3

我正在嘗試分析和反轉我的Objective-C程序。斷點更改程序流程

我通過手動更改某些操作碼對可執行文件進行了少量修改。當我測試修改後的軟件,但是,我得到

死亡人數:9

這很好,我想我摸過的東西我不應該。然後我啓動gdb myprogram以分析錯誤。這裏發生了一些事情(對我來說很奇怪):如果我沒有放置任何斷點,程序會收到SIGKILL,而如果我試圖在收到信號之前幾行放置一個斷點,似乎沒有任何事情發生,程序似乎可以正常工作精細。

從這裏我的問題:斷點改變程序流?
如果答案是否定的,那麼我想我寫的信息不足以解決所以請問,如果您有一些提示或建議指向正確的方向,我將不勝感激。

我使用的是MacOS 10.7.4和gdb 6.3.50 (Apple version gdb-1752)。假設我無法訪問源代碼。

+0

難道它的程序是積極不允許的斷點,並注意到它被加載到gdb並引發異常?可能是反調試措施?有趣的OP ... +1,希望聽到一些答案。 –

回答

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!