【发布时间】:2011-02-01 19:39:03
【问题描述】:
我正在尝试调用 SymLoadModuleEx 从 PDB 文件中加载符号,然后使用 SymFromAddr 从该 PDB 中查找符号。但是,我不知道要为参数 BaseOfDll 和 DllSize 传递什么——文档明确指出,在加载 PDB 文件时,这些参数不能为 0,实际上尝试传递 0 会导致ERROR_INVALID_PARAMETER 失败。
我的代码如下所示:
SymSetOptions(SYMOPT_LOAD_LINES);
HANDLE hprocess = GetCurrentProcess();
if (!SymInitialize(hprocess, NULL, FALSE))
die("SymInitialize");
if(SymLoadModuleEx(hprocess, NULL, "full path to some PDB file.pdb", NULL,
0, // What to pass here?
0, // What to pass here?
NULL, 0) == 0)
{
die("SymLoadModuleEx");
}
您如何确定在加载 PDB 文件时要传递的 BaseOfDll 和 DllSize?有问题的 PDB 文件是不同程序可执行文件(不是 DLL)的符号文件,为了论证,假设您无权访问生成 PDB 的原始 EXE。
或者,有没有更好的方法从 PDB 文件中查找与给定地址对应的符号?
【问题讨论】:
标签: c winapi pdb-files dbghelp