SymLoadModuleEx 函数 (dbghelp.h)
加载指定模块的符号表。
语法
DWORD64 IMAGEAPI SymLoadModuleEx(
[in] HANDLE hProcess,
[in] HANDLE hFile,
[in] PCSTR ImageName,
[in] PCSTR ModuleName,
[in] DWORD64 BaseOfDll,
[in] DWORD DllSize,
[in] PMODLOAD_DATA Data,
[in] DWORD Flags
);
参数
[in] hProcess
最初传递给 SymInitialize 函数的进程句柄。
[in] hFile
可执行映像的文件的句柄。 此参数主要由调试器使用,其中调试器传递从调试事件获取的文件句柄。 值为 NULL 表示未使用 hFile 。
[in] ImageName
可执行映像的名称。 此名称可以包含部分路径、完整路径或完全不包含路径。 如果无法按提供的名称找到文件,则使用符号搜索路径。
[in] ModuleName
模块的快捷方式名称。 如果指针值为 NULL,则库将使用符号文件的基名称创建一个名称。
[in] BaseOfDll
模块的加载地址。 如果值为零,则库将从符号文件获取加载地址。 符号文件中包含的加载地址不一定是实际的加载地址。 调用此函数时,具有实际加载地址的调试器和其他应用程序应使用实际负载地址。
如果映像是 .pdb 文件,则此参数不能为零。
[in] DllSize
模块的大小(以字节为单位)。 如果值为零,则库将从符号文件获取大小。 符号文件中包含的大小不一定是实际大小。 调用此函数时,具有实际大小的调试器和其他应用程序应使用实际大小。
如果映像是 .pdb 文件,则此参数不能为零。
[in] Data
指向 MODLOAD_DATA 结构的指针,该结构表示除标准 PE 标头以外的标头。 此参数是可选的,可以为 NULL。
[in] Flags
此参数可以是零个或一个或多个以下值。 如果此参数为零,则函数将加载模块和模块的符号。
值 | 含义 |
---|---|
|
加载模块,但不加载模块的符号。 |
|
在 BaseOfDll 中指定的地址处创建名为 ModuleName 的虚拟模块。 若要向此模块添加符号,请调用 SymAddSymbol 函数。 |
返回值
如果函数成功,则返回值是已加载模块的基址。
如果函数失败,则返回值为零。 若要检索扩展的错误信息,请调用 GetLastError。
如果模块已加载,则返回值为零, GetLastError 返回ERROR_SUCCESS。
注解
符号处理程序为模块创建一个条目,如果已关闭延迟符号加载选项,则会尝试加载符号。 如果启用了延迟符号加载,则会将模块标记为延迟,并且除非对模块中的符号进行引用,否则不会加载符号。 因此,在调用 SymLoadModuleEx 后,应始终调用 SymGetModuleInfo64 函数。
若要卸载符号表,请使用 SymUnloadModule64 函数。
所有 DbgHelp 函数(例如此函数)都是单线程的。 因此,从多个线程调用此函数可能会导致意外行为或内存损坏。 若要避免这种情况,必须将多个线程中的所有并发调用同步到此函数。
若要调用此函数的 Unicode 版本,请定义 DBGHELP_TRANSLATE_TCHAR。
示例
有关示例,请参阅 加载符号模块。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | dbghelp.h |
Library | Dbghelp.lib |
DLL | Dbghelp.dll |
可再发行组件 | DbgHelp.dll 6.0 或更高版本 |