2009-12-21 154 views
0

我正在使用WinDbg(Native x64-NOT Itanium)來調試加載託管的非託管dll的x64(非託管)應用程序。WinDbg - 調試混合x64託管/非託管代碼

我想在一個非託管dll中設置斷點。當斷點被擊中並且我逐步完成時,顯示的指令與它們應該完全不同。我使用兩個不同的反彙編程序驗證了WinDbg在我逐步完成時沒有顯示正確的反彙編。

當連接到應用程序中,我得到這樣一行:

ModLoad: 00000000`XXXXXXXX 00000000`YYYYYYYY C:\MyDLL.DLL 

我調整了兩個反彙編的地址以反映基地址XXXXXXXX。

可能是什麼問題?

+0

我發現這(從未完全回答): http://stackoverflow.com/questions/1398826/vs2008-on-win7-64-bit-debugging-a-windows-service 或許這可以幫助? – devviedev 2009-12-22 00:09:22

+0

拆卸一般意義嗎?我一般會優先選擇windbg,因爲它使用有效的IP進行解碼,而不是單純依靠靜態分析(反彙編可能是好的),而是在有效的過程中有效。你能透露一些彙編代碼來比較嗎? – deemok 2009-12-22 14:23:09

+0

這是「調用someFunc」與「mov ebx,esp」。即使踩在其他點也不匹配。在哪個斷點被擊中似乎不一致;我設置了應該被擊中但不是的斷點。 – devviedev 2009-12-22 18:08:41

回答

0

是否uf modname!FuncName返回正確的結果?如果你在奇怪的地方拆卸/斷點,你有時可以欺騙WinDbg。請記住,x86/x64是一個可變寬度的指令集,所以如果你從指令的中途開始讀取,反彙編器會感到困惑。

+0

你認爲.NET解釋器可以改變事物嗎? – devviedev 2009-12-21 21:56:47

+0

不,CLR不會更改任何非託管DLL – 2009-12-21 22:27:12

+0

如果我執行「u

」,則它不匹配。我沒有使用符號進行調試。我也嘗試了一下這個地址,並沒有幫助正確的反彙編。 – devviedev 2009-12-21 22:59:39

0

某處我注意到這可能與您的DLL中不正確的入口點有關。但我不知道如何處理這些信息(我是初學者)。