【发布时间】:2019-03-10 13:52:38
【问题描述】:
我在汇编中有这段代码:
global _start
section .rodata
hello: db "Hello World!", 10
section .text
_start:
mov eax,4
mov ebx,1
mov ecx,hello
mov edx,13
int 80h
; Terminate program
mov eax,1
xor ebx,ebx
int 80h
如果我获取以下代码的 objdump,我会得到:
如果我在 objdump 中获得 NUL 字符,我将无法完成我正在处理的任务。如何在没有任何 NUL(0x00) 字节的情况下获得 objdump?
【问题讨论】:
-
您组装的文件(并且在问题的顶部)不是您转储的文件。
-
我会假设这真的是关于 shellcode 漏洞利用的全部?
-
您正在查看不相关的文件。它甚至不是 64 位汇编/32 位反汇编不匹配,在您的源代码中你有
syscall而在反汇编中你有int 80- 它们是完全不相关的文件。 -
我建议在我写的这个 Stackoverflow 答案中查看 shellcode:stackoverflow.com/a/50690339/3857942。它是 64 位代码,将字符串打印到控制台,然后退出并避免 NUL 字节,这几乎正是您在这里尝试做的。
-
objdump只是一个反汇编程序。 它只显示文件中的字节。 编写汇编为机器代码的 asm 不包含任何00字节,然后objdump输出将不含它们。最明显的一点是,对于小常量,您必须避免使用mov r32, imm32,因为不幸的是没有r/m32, imm8形式的mov。 push imm8 / pop reg 是一种常见的解决方法,或者使用已知库中的lea。
标签: assembly x86 nasm shellcode objdump