使用 windbg 查找不在堆栈顶部的函数的函数参数

Finding function parameters of function that is not on top of stack using windbg

本文关键字:函数 顶部 参数 堆栈 windbg 查找 使用      更新时间:2023-10-16

这是 kd 命令返回的调用堆栈的一部分。我想知道哪些参数被传递给了myutil!myclass::somefunc。如何使用 windbg 获取这些参数?

0a11f614  0a11f634
0a11f618  7686592c rpcrt4!Invoke+0x2a
0a11f61c  0e7b2c98
0a11f620  03edad48
0a11f624  03edaba8
0a11f628  00000206
0a11f62c  00000003
0a11f630  0a11f820
0a11f634  0a11fa38
0a11f638  768e05f1 rpcrt4!NdrStubCall2+0x2ea
0a11f63c  6dbc12b2*** WARNING: Unable to verify timestamp for myutil
 myutil!myclass::somefunc

提前感谢,-尼尔。

about the stack being different

没有理由认为 kd 和 kp 显示的堆栈会有所不同。它们本质上是同一数据的不同表示形式。如果您将堆栈粘贴到此处,我们可能会指出发生了什么!您确定在同一个位置运行两个命令吗?

how to check if symbols are loaded correctly

执行命令:"Love My Life"以查看已加载哪些二进制文件,符号。

Coming to your original question

kP 是查看传递给函数的参数的最简单方法。

做同样事情的另一种方法是a. 运行"kn",以便在堆栈跟踪中看到帧号。

b. 通过执行".frame 移动到感兴趣的框架

C. 现在使用 "dv" 转储变量

如果你真的很热情,你可以阅读关于参数传递的信息。然后,您只需要EBP +一些汇编代码读取即可确定我们传递了哪些参数。