3

我正在尝试分析和反转我拥有的 Objective-C 程序。

我通过手动更改一些操作码对可执行文件进行了一些修改。但是,当我测试修改后的软件时,我得到

击杀:9

没关系,我想我碰了一些我不应该碰的东西。然后我启动gdb myprogram以分析错误。这里发生了一些事情(对我来说很奇怪):如果我没有放置任何断点,程序会收到 SIGKILL,而如果我尝试在收到信号的断点之前放置几行断点,似乎什么也没发生,程序似乎可以工作美好的。

从这里我的问题是:断点会改变程序流程吗?
如果答案是否定的,那么我想我写的信息不足以解决所以请询问,如果您有一些提示或建议可以为我指明正确的方向,我将不胜感激。

我正在使用 MacOS 10.7.4 和gdb 6.3.50 (Apple version gdb-1752). 假设我无权访问源代码。

4

1 回答 1

1

断点改变代码工作方式的第一大原因是竞争条件。它基本上是这样的:

Without breakpoints:
    make some asynchronous request
    do something with response
    ERROR because request hasn't responded yet

With breakpoints:
    send some asynchronous request
    wait for user to continue
    response arrived while waiting for the continue
    do something with response
    OK!
于 2012-08-23T01:28:50.643 回答