2012-11-08 71 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