2012-09-17 86 views
1

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

这是我如何定义和查看他们:

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

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

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

通过使用命令x/b &OnesFound而不是使用打印,您可以只查看所需的特定字节。

+0

谢谢!一件小事,我不得不做x/b&OnesFound来解引用指针。谢谢你的帮助! –