3

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

 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) 的内容。

4

2 回答 2

6

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

print $rax
info register $rax
info register

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

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

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

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

希望能帮助到你。

于 2012-11-08T07:11:09.847 回答
1

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

于 2012-11-08T04:52:18.067 回答