2012-11-08 70 views
3

如何查看寄存器的值?我有集會的下面一行:使用gdb檢查寄存器的值

mov 0x8(%rax), %rax 
cpm %ebx, (%rax) 

使用命令:

(gdb) p/x $ebx 
(gdb) p/x $rbx 
$3 = 0xb 

我得到存儲在該寄存器中的值。然而,當我嘗試看看它是存儲的int存儲位置(%RAX),我有以下問題:

(gdb) display *(int *)$rax 
Disabling display 10 to avoid infinite recursion. 
10: *(int *)$rax = Cannot access memory at address 0x17 

我無法不明白爲什麼會這樣,而且如何找出(%RAX)已經在。

回答

2

要查看寄存器的值只使用

print $rax 
info register $rax 
info register 

你的情況,似乎rax包含數字0x17和調試器不能訪問這個位置。請確保rax包含指向一個整數的有效地址。

如果您想快速查看,您應該使用print而不是display。不要濫用display命令。如果你需要一種看門狗來表達,你可以使用它。

這裏你可以找到一個快速參考

http://www.yolinux.com/TUTORIALS/GDB-Commands.html

希望它幫助。

1

不知道你正在使用什麼類型的CPU(x86?),但內存訪問必須對齊?這意味着你可以訪問0x08,0x10,0x18,0x20等(或者它可能是32位字,它們可能是0x00,0x20,0x40等等)。這可能是一個不正確的答案,儘管取決於你的架構。此外,什麼是註冊表標籤? Windows註冊表似乎不相關。

+0

我正在使用64位機器;這就是爲什麼我有%rax而不是%eax。對於標籤抱歉,我雖然是用於這種寄存器 – FranXh

+0

什麼架構? Itanium,SPARC或POWER? – fabspro

+0

可能將架構作爲標籤添加到問題中。 – fabspro