符号 table 存储在哪里?

Where symbol table gets stored?

我正在研究编译器,我突然很好奇如果我用 -g 选项编译一个程序(比方说 test.c),一个带有符号 table 的实际文件会得到创建并存储在某处,或者它只是与 executable?

结合

我是全新的,所以我真的在学习基础知识,对你们中的一些人来说可能听起来很愚蠢的问题..抱歉,但请告诉我!

谢谢!

ELF 目标文件格式(这是 gcc 在许多常见平台上生成的格式)是一种容器格式,可以包含许多不同类型的信息。它总是包含一个符号 table 的外部链接符号(从库中定义或需要)。此外,如果指定了 -g,ELF 文件将包含大量仅供调试器使用的信息,包括所有使用的本地符号。

您可以使用 objdump --debuggingreadelf --debug-dump 以某种人类可读的格式查看调试信息。祝你好运!

调试信息中通常不包含的一件事是实际的源代码。您会发现源文件的名称和对应于不同编译代码块的行号。调试器读取源代码文件以报告源代码行;如果在编译 executable 后编辑了源代码文件,那将不会按预期工作。