2012-05-02 40 views
0

我試圖遵循一個簡單的程序,我使用C++編譯的執行指令在調試器(OllyDbg的)(它計算一些素數,然後退出),但我有幾個問題:爲什麼在啓動程序時,每個指令都會崩潰? [調試]

  • 爲什麼第一條指令不是「代碼」部分的入口點?這是不同的
  • 只要我「跳過」一些指令,調試器崩潰並寫入「在ntdll.someaddress的單步事件,按Shift + F7/F8/F9將異常傳遞給程序」並崩潰。如果我運行程序時沒有按步指示,它就可以正常工作並且程序加載沒有問題

爲什麼會發生這種情況?這不會發生只有我的程序,但與其他幾個(我的系統中幾乎所有其他32位exe文件)

+0

這是一個32位程序?在64位操作系統? – kuba

回答

0

如果您在64位操作系統下運行OllyDbg,我相信你是運氣不好,因爲OllyDbg不支持x86-64 Windows,甚至不支持用於調試32位應用程序的調試器。見this forum thread,這是從2006年開始的,但自那之後我什麼也沒有改變。他們建議使用不同的調試器,例如WinDbg的64位版本(這是一個很棒的調試器)。

爲什麼第一條指令不是「代碼」部分的入口點?這是不同的

您可以在OllyDbg中設置此選項:選項 - 調試選項 - 事件 - 「第一次暫停在」。您可以從位於ntdll中的「系統斷點」開始,甚至在調用啓動模塊的入口點之前調用它。

+0

謝謝,我希望例外只是因爲x64的不兼容性 –

相關問題