2011-08-18 78 views
4

我正在逆向工程。我想查看傳遞給WinDbg中各種系統函數的參數的一個很好的輸出。有點像OllyDbg。 如何在沒有符號的情況下做到這一點?在WinDbg中查看函數參數

謝謝。

回答

2

您不能像ollydbg/Immunity調試器那樣查看它。但是你可以手動從棧中檢索參數。您必須在MSDN中檢查API參考並從堆棧檢索擴充。

作爲示例,要獲取MessageBoxW()的參數,可以在MessageBoxW()中設置斷點。

0:002> g 
(9e0.91c): Break instruction exception - code 80000003 (first chance) 
eax=7efa9000 ebx=00000000 ecx=00000000 edx=76f6f8ea esi=00000000 edi=00000000 
eip=76ee000c esp=00f3ff5c ebp=00f3ff88 iopl=0   nv up ei pl zr na pe nc 
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00000246 
ntdll!DbgBreakPoint: 
76ee000c cc    int  3 
0:005> bp user32!MessageBoxW 
0:005> g 
Breakpoint 0 hit 
eax=00000001 ebx=00000000 ecx=002a2fc6 edx=00000000 esi=002b7f00 edi=00000003 
eip=749ffd3f esp=000cf608 ebp=000cf624 iopl=0   nv up ei pl nz na po nc 
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00000202 
USER32!MessageBoxW: 
749ffd3f 8bff   mov  edi,edi 

現在當斷點被擊中時,您可以從堆棧中獲取它們。 MessageBoxW()接受4個參數。所以我們從堆棧中轉儲5個堆棧元素。

0:000> dd esp L5 
000cf608 01001fc4 000806aa 002b7f00 002a3074 
000cf618 00000040 

0x01001fc4是返回地址,其中MessageBoxW返回。接下來的4個指針是傳遞給MessageBoxW()的參數。現在您可以相應地轉儲它們。

0:000> du 002b7f00 
002b7f00 "Cannot find "foo"" 
0:000> du 002a3074 
002a3074 "Notepad" 

希望這將有助於:)