断点改变了程序流程

时间:2012-08-23 01:22:33

标签: objective-c gdb reverse-engineering breakpoints disassembly

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

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

  

被杀:9

那很好,我想我触动了一些我不应该做的事情。我启动了gdb myprogram以分析错误。这里发生了一些事情(对我来说很奇怪):如果我没有放任何断点,程序会收到SIGKILL,而如果我尝试在接收信号之前的几行之前放置一个断点,似乎没有任何事情发生,程序似乎工作细

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

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

1 个答案:

答案 0 :(得分: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!