【问题标题】:How to check [sp,#4] value in gdb如何检查 gdb 中的 [sp,#4] 值
【发布时间】:2020-10-16 03:09:27
【问题描述】:

我是 C 新手。我正在尝试使用汇编语言在 GDB 中调试我的代码。

在汇编中有“ldr r0, [sp, #4]”。如何检查 sp+4 的值?不是地址。

谢谢。

【问题讨论】:

    标签: c assembly arm gdb


    【解决方案1】:

    这并不像您希望的那样方便,因为大多数寄存器都没有任何内置的 $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 只显示了没有注册的内置$变量。

    【讨论】:

    • 我认为大多数目标的 GDB 都允许您将$reg_name 用于任何寄存器。 $pc 用于程序计数器,无论它在目标上调用什么(例如 x86-64 上的 RIP)。
    猜你喜欢
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多