与gdb奇怪的变量

时间:2012-09-17 12:59:14

标签: variables assembly gdb

我正在使用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似乎表现得很正确。我真的很困惑。谢谢你的建议。

1 个答案:

答案 0 :(得分:4)

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

您获得的数字的十六进制表示为0x0A000200。 x86是一个小端平台,所以它实际上将作为00 02 00 0A存储在内存中。只有第一个字节实际上是您设置的值的一部分,并且设置正确。

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