我不明白为什么代码的输出是Ole。小字节序不应该影响push命令吗?
global _start
section .data
x: dd 3
section .text
_start:
mov eax, 4
mov ebx, 1
mov dword[x], 0x0a656c4f
push dword[x]
mov ecx, esp
mov edx, 4
int 0x80
mov eax,1
mov ebx, 0
int 0x80
如果我在mov dword [x],0x0a656c4f之后正确找到,则内存布局为:
0a (higher)
65
6c
4f (lower)
由于x86的字节序很少,因此x指向值为4f的字节。在push dword [x]之后,有相同的堆栈图片(随着向下增长而反转),其中esp指向0a
同样的问题与代码有关
mov dword[x], 0x0a656c4f
push dword[x]
替换为:
push dword 0x0a656c4f
谢谢。
堆栈向下生长:
推送之前:
****
****
**** <--- ESP
之后push DWORD 0x0a656c4f
:
****
****
**** -+
0x0A |
0x65 ^
0x6C |
0x4F <--- ESP -+- write(2) four bytes from here
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句