我正在尝试分析和逆转我的Objective-C程序。
我通过手动更改一些操作码对可执行文件进行了一些修改。但是,当我测试修改后的软件时,我得到了
被杀:9
那很好,我想我触动了一些我不应该做的事情。我启动了gdb myprogram
以分析错误。这里发生了一些事情(对我来说很奇怪):如果我没有放任何断点,程序会收到SIGKILL,而如果我尝试在接收信号之前的几行之前放置一个断点,似乎没有任何事情发生,程序似乎工作细
从这里我的问题:断点是否会改变程序流程?
如果答案是否定的,那么我想我写的信息不足以解决,所以请问,如果你有一些提示或建议指出我正确的方向,我将不胜感激。
我正在使用MacOS 10.7.4和gdb 6.3.50 (Apple version gdb-1752)
。假设我无权访问源代码。
答案 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!