2011-08-18 51 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" 

希望这将有助于:)