使用gdb检查寄存器的值

时间:2012-11-08 03:57:01

标签: assembly gdb x86-64

如何查看寄存器的值?我有以下装配线:

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

使用命令:

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

我得到了存储在这个寄存器中的值。但是,当我试图查看它存储在内存位置(%rax)时,我有以下问题:

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

我不明白为什么会这样,以及如何找出(%rax)的内容。

2 个答案:

答案 0 :(得分:2)

要查看寄存器的值,只需使用

print $rax
info register $rax
info register

在您的情况下,似乎rax包含数字0x17,调试器无法访问此位置。请确保rax包含指向整数的有效地址。

如果您想快速查看,则应使用print代替display。不要滥用display命令。如果你需要一种表达式的看门狗,你可以使用它。

在这里您可以找到快速参考

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

希望它有所帮助。

答案 1 :(得分:1)

不确定您使用的是什么类型的CPU(x86?),但内存访问是否必须对齐?这意味着您可以访问0x08,0x10,0x18,0x20等等(或者可能是32位字,即0x00,0x20,0x40等等)。根据您的架构,这可能是一个错误的答案。另外,注册表标签是什么? Windows注册表似乎不相关。