我正在尝试分析和逆向我拥有的 Objective-C 程序。
我通过手动更改一些操作码对可执行文件进行了一些修改。然而,当我测试修改后的软件时,我得到
死亡人数:9
没关系,我想我触碰了不该触碰的东西。我当时就推出了gdb myprogram
以便分析错误。这里发生了一些事情(对我来说很奇怪):如果我不放置任何断点,程序会收到 SIGKILL,而如果我尝试在收到信号的行之前放置断点,则似乎什么也没有发生,并且程序似乎可以工作美好的。
从这里我的问题是:断点会改变程序流程吗?
如果答案是否定的,那么我想我写的信息不足以解决问题,所以请询问,如果您有一些提示或建议来指出我正确的方向,我将不胜感激。
我正在使用 MacOS 10.7.4 和gdb 6.3.50 (Apple version 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!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)