2011-04-09 14 views
4

在Visual Studio中    2008調試器顯示在拆卸窗口相對地址作爲顯示在下面的代碼段:如何配置Visual Studio 2008以在反彙編窗口中顯示真正的EIP地址?

00000548 8B 4D B8   mov   ecx,dword ptr [ebp-48h] 
0000054b 8B 01    mov   eax,dword ptr [ecx] 
0000054d FF 50 28   call  dword ptr [eax+28h] 
00000550 89 85 44 FF FF FF mov   dword ptr [ebp+FFFFFF44h],eax 
00000556 8B 8D 44 FF FF FF mov   ecx,dword ptr [ebp+FFFFFF44h] 
0000055c E8 2F 1D 2C 76  call  762C2290 
00000561 90     nop 

通知的地址的值如何太低是真實的地址。當我在地址0x548(第一行)時,我的EIP是0x034D1A90。如何配置調試器/反彙編窗口以顯示實際地址(例如,0x034D1A90)而不是相對地址(例如0x0548)?

+0

仍未修復VS2012。對於Windbg來說,unti VS的功能還是很平等的。 – 2012-08-02 22:49:21

回答

4

是的,這是調試器中的一個錯誤。它計算的地址基於左側列出的地址。哪些是假的,實際的機器代碼不是從地址0開始的。它沒有顯示實際地址的選項。

要找到真正的呼叫目標地址,必須在呼叫指令上設置一個斷點。當它命中時,使用Debug + Windows + Registers並將EIP寄存器的值複製/粘貼到你的計算器中。然後添加調用參數的值並減去地址的值,如左圖所示。這是真正的地址。

要在那裏查看機器代碼,您必須將調試器切換到非管理模式。調試+ Windows +調用堆棧並雙擊其中一個非託管方法的堆棧幀。底部如果你不確定。現在您在地址框中輸入「0x」並複製/粘貼您計算的地址。一定要啓用符號服務器。

+0

感謝您的詳細解釋。我認爲這是一個已知的錯誤。 MS是否有修補程序/修補程序? (恐怕答案很可能是「否」,否則你可能會提到修正)。 – Hex440bx 2011-04-09 21:02:12

+0

永遠這樣,我不懷疑這是調試器界面中的限制。考慮到抖動代碼的方式,它確實很有意義。你可以發佈到connect.microsoft.com,有人可能已經這麼做了。投票。 – 2011-04-09 21:06:34

相關問題