assembly - 在 WinDbg 中查看函数参数

标签 assembly reverse-engineering windbg

我正在逆向工程。我想查看传递给 WinDbg 中各种系统函数的参数的 pretty-print 输出。有点像 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"

希望它会有所帮助:)

关于assembly - 在 WinDbg 中查看函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7107628/

相关文章:

assembly - MARS MIPS 汇编程序给出错误 : Extended (pseudo) instruction or format not permitted

python - 通过脚本在结构中设置 IDA 函数指针

c - 通过签名查找函数时如何知道地址范围?

针对字节码逆向工程的java常量

c++ - 是否可以使用 Visual Studio 构建 WinDBG 扩展?

c# - 如何在 WinDBG 中查看托管异常详细信息?

c - 如何在 zlib CRC32 中正确使用无进位乘法程序集 (PCLMULQDQ)?

assembly - 按功能分类的 x86 指令引用

arrays - 在 AVR Assembly 中创建和寻址数组(使用 ATMega8535)

windbg - Windbg 中的 ExceptionAddress 为 0