我具有以下全局汇编代码_start
section .text
_start:
jmp call
pop:
pop ecx ; ECX = address of hello
xor eax, eax ; EAX = 0
xor al, al ; EAX = 4 (int 0x80 sys_write)
inc al
inc al
inc al
inc al
xor ebx, ebx
inc ebx //Does not work inside exploit
xor edx, edx
mov dl, hellolen ; EDX = length of hello string
int 0x80
; Terminate program
xor eax, eax
inc eax //Does not work inside exploit
xor ebx, ebx ; EBX = return value of 0
int 0x80
call:
call pop
hello: db "Hello World!Ho are you!!!!!"
hellolen equ $-hello
上面的代码可以正常运行,并且在独立运行时可以提供正确的输出。
但是当我使用相同的objdump时,如果尝试通过缓冲区溢出运行,则会遇到以下问题。
这里inc al
会适当增加al值,但是inc eax
或inc ebx
可能是因为它在objdump中显示
inc al
-> fe c0
inc ebx
-> 43 //大约一个字节数
我还尝试了以下方法来更新eax和ebx
xor ebx, ebx
xor bl, bl
inc bl
movsx ebx, bl
;inc ebx
但是这里movsx操作码是0x0f,因为遇到空终止的字符串(\ x0x \ x0f),所以它不起作用。