复制为负值的超大地址

Jit*_*ran 2 x86 assembly gdb mov

我正在浏览一个与 C 程序相对应的二进制文件。
我有一个非常大的地址存储在%eax.
当试图通过 来查看值时gdb,它会打印出一个负值(原因在这里)。

现在mov %eax, 0x4c(%esp)执行时,结果值0x4c(%esp)有时为正,有时为负。此效果cmp $0, 0x4c(%esp)说明如下!

有人可以解释这种行为吗?

如果这有帮助:
core: ELF 32-bit LSB core file Intel 80386, version 1 (SYSV), SVR4-style

MSa*_*ers 5

登记册没有标志;他们持有比特。这取决于你如何解释它们。堆栈也是如此:它包含位,如何解释它们取决于您。如果将一个值从寄存器移到堆栈中,则会复制这些位。如果您像解释寄存器中的位一样解释堆栈中的位,您将获得相同的值。

请注意,有一些指令将这些位解释为值 - 乘法、比较等。但MOV不是其中之一。