在 WinDbg 中查看函数参数

发布于 2024-11-30 00:39:13 字数 98 浏览 0 评论 0原文

我正在对一些东西进行逆向工程。我想查看传递给 WinDbg 中各种系统函数的参数的良好打印输出。有点像 OllyDbg 所做的。 没有符号我该如何做到这一点?

谢谢。

I'm reverse engineering something. I'd like to view a nice print-out of arguments being passed to various system functions in WinDbg. Kind of like OllyDbg does.
How do I do this without symbols ?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

欲拥i 2024-12-07 00:39:13

您无法像 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"

希望它会有所帮助:)

You cannot view it like ollydbg / Immunity debugger. But you can retrieve arguments from stack manually. You have to check the API reference in MSDN and retrieve augments from stack.

As an example, to get arguments of MessageBoxW() you can set a break point at 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

Now when the break point get hit, you can get them from stack. MessageBoxW() accepts 4 arguments. So we dump 5 stack elements from stack.

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

Where 0x01001fc4 is the return address, where MessageBoxW will return. And next 4 pointers are arguments passed to MessageBoxW(). Now you can dump them accordingly.

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

Hope it will help :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文