学习DbgHelp1——使用DbgHelp最简单的例子

DWORD WINAPI SymGetOptions(void);
获得当前DbgHelp的选项设置。
返回0时表示当前的选项都是关闭的。
所有的DbgHelp函数都是单线程的,不要在多个线程里调用这个函数。或者你自己在多个线程里做同步来调用。

设置DbgHelp的选项。返回当前的设置选项。
可以随时修改这些设置,新的设置值影响后来的相关函数调用。

SymOptions可以是下面一个或者多个值的组合:
SYMOPT_ALLOW_ABSOLUTE_SYMBOLS:启用符号都用绝对地址保存。大多数符号地址保存成都是模块基地址的RVA。DbgHelp把它们翻译成绝对地址。不常用的选项。
SYMOPT_ALLOW_ZERO_ADDRESS:启用没有地址的符号。默认的DbgHelp会过滤掉没有地址的符号。
SYMOPT_AUTO_PUBLICS:通过地址查找符号或者枚举符号的时候,不去查找公共符号,除非他们不在公共符号或者当前范围。这个设置对SYMOPT_PUBLICS_ONLY没有影响。
SYMOPT_CASE_INSENSITIVE:所有符号查找都是大小写敏感。
SYMOPT_DEBUG:通过OutputDebugString或者SymRegisterCallbackProc64回调函数调试输出。
SYMOPT_DEFERRED_LOADS:符号直到引用的时候才加载。这样做很快,是种有效的方式,推荐。
SYMOPT_DISABLE_SYMSRV_AUTODETECT:禁用自动检测存储在符号路径中的符号服务器。
SYMOPT_EXACT_SYMBOLS:不加载不匹配的pdb文件。所有都失败的时候不加载导出符号。
SYMOPT_FAIL_CRITICAL_ERRORS:当某些错误发生不弹出系统对话框。
SYMOPT_FAVOR_COMPRESSED:优先使用压缩文件。
SYMOPT_FLAT_DIRECTORY:下载的符号都存储在根目录。
SYMOPT_IGNORE_CVREC:加载pdb时3忽略记录在CodeView中的路径。
SYMOPT_IGNORE_IMAGEDIR:忽略镜像文件目录。
SYMOPT_IGNORE_NT_SYMPATH:SymSetSearchPath没有合法路径的时候也不适用_NT_SYMBOL_PATH。
SYMOPT_INCLUDE_32BIT_MODULES:当在64位系统上调试,包括所有32位模块。
SYMOPT_LOAD_ANYTHING:禁用检查文件是否正确。加载首先被定位到的文件。
SYMOPT_LOAD_LINES:加载代码行号信息。
SYMOPT_NO_CPP:所有c++修饰的符号包含::都用_代替。如果有这个选项,就不能处理c++符号了。
SYMOPT_NO_IMAGE_SEARCH:当加载一个模块符号时模块头不能读取,不去符号目录查找镜像文件。
SYMOPT_NO_PROMPTS:阻止符号服务器的验证。
SYMOPT_NO_PUBLICS:不去查找公共表的符号。
SYMOPT_NO_UNQUALIFIED_LOADS:不清楚。
SYMOPT_OVERWRITE:不清楚。
SYMOPT_PUBLICS_ONLY:不实用私有符号。
SYMOPT_SECURE:不清楚。
SYMOPT_UNDNAME:未修饰的形式存放符号。

为一个进程初始化符号句柄。
hProcess:DbgHelp绑定的进程句柄。
UserSearchPath:调试符号路径。如果为NULL,则使用默认值。
fInvadeProcess:为True则枚举进程加载的所有模块。效果等同于SymLoadModule64枚举每个模块。
在Unicode版本里,你必须定义 DBGHELP_TRANSLATE_TCHAR。

释放相关的资源,与SymInitialize配对调用。

例子:

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注