2012-09-17 124 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來解引用指針。謝謝你的幫助! –