我正在使用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似乎表现得很正确。我真的很困惑。谢谢你的建议。
答案 0 :(得分:4)
程序集“variable”只是内存中特定点的标签。 GDB不知道它应该有多大,它只是假设它是一个32位的值。
您获得的数字的十六进制表示为0x0A000200。 x86是一个小端平台,所以它实际上将作为00 02 00 0A
存储在内存中。只有第一个字节实际上是您设置的值的一部分,并且设置正确。
您可以使用命令x/b &OnesFound
而不是使用print来查看所需的特定字节。