断点改变程序流程(Breakpoint changes program flow)

2019-09-21 12:13发布

我试图分析和扭转的Objective-C程序我有。

我用手改变一些操作码做一些修改可执行文件。 当我测试修改后的软件,但是,我得到

死亡人数:9

这很好,我想我摸过的东西我不应该。 接着我就推出gdb myprogram以分析错误。 这里的东西(很奇怪,我)发生了:如果我不把程序接收SIGKILL任何断点,而如果我尝试把一个断点几行之前,我收到的信号没有一个似乎发生,程序似乎工作精细。

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

我使用的MacOS 10.7.4和gdb 6.3.50 (Apple version gdb-1752) 假设我没有访问源代码。

Answer 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!


文章来源: Breakpoint changes program flow