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

指向表示标准 PE 标头以外的标头的 MODLOAD_DATA 结构的指针。 此参数是可选的,可以 NULL

[in] Flags

此参数可以是零个或以下一个或多个值。 如果此参数为零,函数将加载模块和模块的符号。

价值 意义
SLMFLAG_NO_SYMBOLS
0x4
加载模块,但不加载模块的符号。
SLMFLAG_VIRTUAL
0x1
BaseOfDll中指定的地址创建名为 moduleName 的虚拟模块。 若要向此模块添加符号,请调用 SymAddSymbol 函数。

返回值

如果函数成功,则返回值为已加载模块的基址。

如果函数失败,则返回值为零。 若要检索扩展的错误信息,请调用 GetLastError

如果模块已加载,则返回值为零,GetLastError 返回ERROR_SUCCESS。

言论

符号处理程序为模块创建一个条目,如果关闭延迟的符号加载选项,则尝试加载符号。 如果启用了延迟符号加载,则模块将标记为延迟,在对模块中的符号进行引用之前,不会加载符号。 因此,在调用 symLoadModuleEx 后,应始终调用SymGetModuleInfo64 函数。

若要卸载符号表,请使用 SymUnloadModule64 函数。

所有 DbgHelp 函数(如此函数)都是单线程的。 因此,从多个线程调用此函数可能会导致意外行为或内存损坏。 若要避免这种情况,必须将来自多个线程的所有并发调用同步到此函数。

若要调用此函数的 Unicode 版本,请定义DBGHELP_TRANSLATE_TCHAR。

例子

有关示例,请参阅 加载符号模块

要求

要求 价值
目标平台 窗户
标头 dbghelp.h
Dbghelp.lib
DLL Dbghelp.dll
可再发行组件 DbgHelp.dll 6.0 或更高版本

另请参阅

DbgHelp 函数

MODLOAD_DATA

SymAddSymbol

SymUnloadModule64