我正在尝试调用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 文件中查找与给定地址对应的符号?