最终executable中符号table的要求?

Requirement of symbol table in the final executable?

我读到 windows portable executable 格式包含符号 table。我理解为什么在编译的语义分析阶段以及代码生成期间需要符号 table 。但是我不明白为什么最终的 executable 本身应该包含一个符号 table 因为地址在这个阶段被映射到汇编代码中。我错过了什么??

我真的不能具体说 PE,但我想它类似于 ELF 的情况,其中有两个不同的符号 tables 可以说:

  • "ordinary" 符号 table(通常称为 "the symbol table" 的那个)在最终的 executable 中是可选的。如果它存在,调试器和其他程序会使用它来检查带有符号信息的程序。它通常由链接器生成,但之后可以并且经常被剥离以减小文件大小。
  • 动态符号 table 用于在运行时针对 DSO 进行链接,因此需要为使用动态链接的 executable 提供。它只列出了 executable 需要的外部符号(或者想公开,这也是可以的);不是链接期间出现在其中的每个符号。