assembly - 使用 gdb 检查寄存器的值

标签 assembly gdb x86-64

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

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

最佳答案

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

print $rax
info register $rax
info register

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

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

在这里你可以找到一个快速引用

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

希望对您有所帮助。

关于assembly - 使用 gdb 检查寄存器的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13282176/

相关文章:

c - 为什么当我使用 64 位局部变量时堆栈指针没有减少?

assembly - 使用 AND、NOT 和 ADD 操作实现向左旋转

assembly - 更改汇编中用户输入的行尾字符

character-encoding - 当 PuTTY 终端设置为使用 UTF-8 时,gdb --tui 无法使用正确的线条显示边框

gdb - 让 gdb 在断点处退出

c - movq 指令出现段错误?

assembly - x86跳转到某个地址

linux - gdb 是否立即停止所有线程?

c - 适用于 Windows 的硬件性能计数器 API

assembly - VGA 文本模式光标不移动或隐藏