【问题标题】:How to skip (not execute!) a call in GDB when debugging without symbols?在没有符号的情况下调试时如何跳过(不执行!)GDB 中的调用?
【发布时间】:2013-04-20 19:58:24
【问题描述】:

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

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

我有兴趣,如果我有:

 call 0x12345678
 ...

直接跳转到...执行call

我该怎么做?

【问题讨论】:

  • 但是在指令之后的一个断点call 0x12345678

标签: linux assembly gdb 64-bit


【解决方案1】:

经过一番阅读,我找到了解决方案。

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

set $pc+=5

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

jump *$pc+5

假设您有call at 地址0x01234567 并且想要跳过五个字节,您可以在.gdbinit 中执行以下操作:

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

【讨论】:

  • @EmployedRussian:非常感谢。如果您不介意,会将其编辑到我的答案中。感谢分享!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多