assembly – 在WinDbg中查看函数参数

我正在逆向工程.我想查看一个很好的打印出来的参数传递给WinDbg中的各种系统函数.有点像OllyDbg.

如何在没有符号的情况下这样做?

谢谢.

最佳答案 您无法像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"

希望它会有所帮助:)

点赞