gpt4 book ai didi

windbg - 获取WinDBG中公共(public)符号的参数

转载 作者:行者123 更新时间:2023-12-05 00:19:16 29 4
gpt4 key购买 nike

我正在使用 WinDBG 调试应用程序,并且 PDB 文件仅包含公共(public)符号,因此“k”命令仅显示调用堆栈中的函数名称。我如何也可以显示参数?

我已经发现我可以通过启用“.symopt-2”来显示修饰名称,
所以我可以使用 Visual Studio 附带的“undname.exe”从修饰名称中获取参数。本质上,我希望 WinDBG 做同样的事情。那可能吗?有这个插件吗?

提前谢谢了!

(PS:Visual Studio 显示参数,所以它可能默认这样做)

最佳答案

工具 dbh.exe 在windbg 包中有一个 undec 命令和 -d command line option您可以通过将 exe 加载到与 windbg 中相同的基地址的单独 cmd 行窗口中来利用它,并像下面这样检查这涉及到装饰名称的手动复制粘贴

一个例子

dbh -d classmagic.exe

classmagic [1000000]: b 1350000 <-- base as loaded in windbg

classmagic [1350000]: a 1351000

?somecrap@@YAHHMND@Z
name : ?somecrap@@YAHHMND@Z
addr : 1351000
size : 0
flags : 400000
type : 0
modbase : 1350000
value : 0
reg : 0
scope : SymTagNull (0)
tag : SymTagPublicSymbol (a)
index : 1

classmagic [1350000]: undec ?somecrap@@YAHHMND@Z

?somecrap@@YAHHMND@Z =
int __cdecl somecrap(int,float,double,char)

classmagic [1350000]:

如果您需要自动化并且可以适本地接受或改进正则表达式
1) 你应该有 unix/linux 的 gnuwin32 端口sed.exe 在路径中(从 k1 输出中去除 modname )
2) 你应该有 而不是 undname.exe vc++filt 在路径中
3) 你应该可以运行windbg .shell 命令
4) 用 重新修饰函数名.symopt- symopt_undname
5)运行这一个类轮 .shell -ci "k1"sed s/.*!//g | vc++过滤

k1 仅使用一帧 ( top of stack)
.shell -ci 接受一个 windbg 命令和 passes the commands output to an external applicationsed 去除模块名称和 bang 字符 某某! 并通过管道将其发送到 vc++过滤
vc++filt 去除符号名称并返回正式的
函数名到windbg屏幕

下面的一个例子
0:000> k1
ChildEBP RetAddr
001cf904 013513b5 classmagic!?somecrap@@YAHHMND@Z
0:000> .shell -ci "k1" sed s/.*!//g | vc++filt
ChildEBP RetAddr
int __cdecl somecrap(int,float,double,char)

关于windbg - 获取WinDBG中公共(public)符号的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36251393/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com