У меня есть следующий код сборки global _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
правильно увеличивает все значения, но 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).