问题描述
我还没有确切地找出导致这种情况的原因,但是有时我会使用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 (将#修改为@)