lm命令中“导出的符号”是什么意思

zar*_*zar 3 windbg

我正在使用 WinDbg 进行调试器会话。我输入lm命令,它显示加载的模块,但我不太明白下面的(导出符号)是什么意思?

048c0000 0550c000   Db         (export symbols)       Db.dll
05520000 05535000   Graph      (export symbols)       Graph.dll
Run Code Online (Sandbox Code Playgroud)

我原以为它会说符号未加载、加载或延迟,但这都不是。在这种情况下,(出口符号)表示什么?

Tho*_*ler 5

导出的符号意味着没有加载 PDB 文件,而是从二进制文件(EXE、DLL)中读取了符号。二进制文件有一个导出表。该表用于解析符号。

导出表是 PE 文件格式的一个特性。如果你想看,你可以使用CFF Explorer。如果你想要一个示例二进制文件,请使用ntdll.dllfrom %windir%\system32

NTDLL导出表

关于信息量,按这个顺序增加:

  • 没有符号
  • 导出符号
  • 公共符号
  • 私人符号

您可能还会看到“延迟”符号,这意味着 WinDbg 还不知道,因为它还没有尝试加载它们。使用ld*;.reload,如果你想摆脱推迟符号。