如何在没有符号的情况下调试时跳过(不执行!)GDB中的调用?

时间:2013-04-20 19:58:24

标签: linux assembly gdb 64-bit

我正在调试一个我没有符号的Linux程序。剥离二进制文件。没什么大不了的,我能解决这个问题。但是,当我到达特定的代码片段时,如何在调试器内跳过调用?

我要问的是这个:Use gdb to debug assembly, how to skip a call

如果我有:

,我感兴趣
 call 0x12345678
 ...

在没有执行 ... 的情况下直接跳转到call

我该怎么做?

2 个答案:

答案 0 :(得分:2)

经过多次阅读后,我找到了解决方案。

在我的情况下,我知道call的操作码是五个字节长,所以我可以通过设置GDB register name $pc(“程序计数器”)来跳过它来解决它:

set $pc+=5

根据Employed Russian对此答案的评论,以下内容提供了相同的功能:

jump *$pc+5

假设您在地址call处有0x01234567 并希望跳过五个字节,则可以在.gdbinit中执行以下操作:

b *0x01234567
commands 1
x/i $pc
echo Not executing the call\n
set $pc+=5
x/i $pc
end

答案 1 :(得分:1)

rip值设置为此call 0x12345678之后的指令地址。