防止远程gdbserver总是进入功能

问题描述

我还没有确切地找出导致这种情况的原因,但是有时我会使用gdbserver在远程系统上调试二进制文件,而GDB会拒绝逐步执行函数调用。通常,目标系统是ARM或ARM64。在这些情况下,我已经专门使用了GDB的next命令,而不是step。在其他二进制文件上(可能是在本地调试或在不同体系结构上调试时),则不会出现此问题,我可以照常执行功能

以该示例为例:

     0x4001a4                  cbz    x0,0x4002b8
 →   0x4001a8                  bl     0x4036b0
   ↳    0x4036b0                  ldrb   w1,[x0]  
        0x4036b4                  cmp    w1,#0x20
        0x4036b8                  sub    w2,w1,#0x9

GDB不再步进到0x4001ac,而是步进到0x4036b0。 GEF甚至显示下一条指令将在被调用函数之内。

作为一种解决方法,我编写了这个简单的GDB脚本,将预期的行为绑定到nn

define nn
    tb *($pc+4)
    c
end

使用next / nexti时,如何像往常一样配置GDB以跳过该功能?我知道有一个skip功能,但是我觉得我不必为我认为应该为认/正确行为的内容手动执行变通方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)