【发布时间】:2020-10-16 03:09:27
【问题描述】:
我是 C 新手。我正在尝试使用汇编语言在 GDB 中调试我的代码。
在汇编中有“ldr r0, [sp, #4]”。如何检查 sp+4 的值?不是地址。
谢谢。
【问题讨论】:
我是 C 新手。我正在尝试使用汇编语言在 GDB 中调试我的代码。
在汇编中有“ldr r0, [sp, #4]”。如何检查 sp+4 的值?不是地址。
谢谢。
【问题讨论】:
这并不像您希望的那样方便,因为大多数寄存器都没有任何内置的 $variables。不过,可能堆栈指针有一个$变量。
首先使用info register sp获取sp的值。 (将 sp 替换为您感兴趣的任何寄存器。info register all 本身将打印所有寄存器的值。)
然后使用x 命令在 sp+4 处检查内存。您必须将 sp 的值复制并粘贴到命令中。 x 采用多种后缀来指定读取多少内存以及如何格式化,详见help x。
例如:
(gdb) info register sp
sp 0x7fffdcd8 -9000
(gdb) x/xw 0x7fffdcd8 + 4
0x7fffdcdc: 0x00005555
如果堆栈指针有一个$变量,它的名字将是$sp,你可以把它简化为
(gdb) x/xw $sp + 4
0x7fffdcdc: 0x00005555
不幸的是,我不知道有什么方法可以列出所有内置的 $variables。在我的电脑上show conv 只显示了没有注册的内置$变量。
【讨论】:
$reg_name 用于任何寄存器。 $pc 用于程序计数器,无论它在目标上调用什么(例如 x86-64 上的 RIP)。