Debugging 防止远程gdbserver始终单步执行功能
我还没有详细说明是什么情况导致了这种情况,但有时我正在使用gdbserver在远程系统上调试二进制文件,而GDB将拒绝跳过函数调用。通常,目标系统是ARM或ARM64。在这些情况下,我已经专门使用GDB的Debugging 防止远程gdbserver始终单步执行功能,debugging,gdb,remote-debugging,gdbserver,Debugging,Gdb,Remote Debugging,Gdbserver,我还没有详细说明是什么情况导致了这种情况,但有时我正在使用gdbserver在远程系统上调试二进制文件,而GDB将拒绝跳过函数调用。通常,目标系统是ARM或ARM64。在这些情况下,我已经专门使用GDB的next命令,而不是step。在其他二进制文件上(可能是在本地调试时,或者在不同的体系结构上),这个问题不会发生,我可以像往常一样跳过函数 以以下示例为例: 0x4001a4 cbz x0, 0x4002b8 → 0x4001a8
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
功能,但我觉得我不应该手动执行我认为应该是默认/正确行为的变通方法