1

我正在使用 gdb 调试 x86 程序集中的程序。虽然我对某些变量有奇怪的行为,但我不明白为什么。

这就是我定义和查看它们的方式:

section .data
CountDied: dd 0000
OnesFound: db 00

section .text
global _start
_start:
nop
... code

当我逐步运行 gdb 时,我会在第一条指令中检查变量是否具有正确的值,然后得到以下信息:

print CountDied
$1=0
print OnesFound
$2=167772672

尽管在接下来的说明中,OnesFound 似乎以正确的方式行事。我真的很困惑。感谢您的建议。

4

1 回答 1

4

程序集“变量”只是内存中特定点的标签。GDB 不知道它应该有多大,它只是假设它是一个 32 位的值。

你得到的数字的十六进制表示是 0x0A000200。x86 是一个 little endian 平台,因此它实际上会以00 02 00 0A. 只有第一个字节实际上是您设置的值的一部分,并且设置正确。

x/b &OnesFound您可以使用命令而不是使用 print来查看您想要的特定字节。

于 2012-09-17T13:32:17.547 回答