Objective c 断点更改程序流

Objective c 断点更改程序流,objective-c,gdb,reverse-engineering,breakpoints,disassembly,Objective C,Gdb,Reverse Engineering,Breakpoints,Disassembly,我正试图分析和逆转我的Objective-C程序 通过手动更改一些操作码,我对可执行文件进行了一些修改。然而,当我测试修改后的软件时,我得到 死亡人数:9人 没关系,我想我碰了不该碰的东西。然后我启动了gdb myprogram,以分析错误。这里发生了一些事情(对我来说很奇怪):如果我没有放置任何断点,程序将接收到SIGKILL,而如果我尝试在接收到信号的断点之前放置一个断点,则似乎什么都没有发生,程序似乎工作正常 我的问题是:断点是否会改变程序流 如果答案是否定的,那么我想我写的信息不足以解决

我正试图分析和逆转我的Objective-C程序

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

死亡人数:9人

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

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


我正在使用MacOS 10.7.4和
gdb 6.3.50(苹果版gdb-1752)
。假设我没有访问源代码的权限。

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

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!

可能是程序主动不允许断点,并且注意到它何时加载到gdb并抛出异常?可能是反调试措施?有趣的作品+希望听到一些答案。