我正在查看与 C 程序相对应的二进制文件。
我有一个非常大的地址存储在%eax
.
当试图通过查看值时gdb
,它打印一个负值(原因here).
现在,当mov %eax, 0x4c(%esp)
执行后,结果值为0x4c(%esp)
有时是正的,有时是负的。这个效果cmp $0, 0x4c(%esp)
以下声明!
有人可以解释一下这种行为吗?
如果这有帮助:
core: ELF 32-bit LSB core file Intel 80386, version 1 (SYSV), SVR4-style
寄存器没有标志;他们持有比特。这取决于你如何解释它们。这同样适用于堆栈:它保存位,并且由您决定如何解释它们。如果将值从寄存器移至堆栈,则会复制这些位。如果你像解释寄存器中的位一样解释堆栈上的位,你会得到相同的值。
请注意,有are将这些位解释为值的指令 - 乘法、比较等。但MOV
不是其中之一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)