我可以从ELF文件中的符号表中的符号信息中获取对象名称吗?

时间:2011-08-08 12:03:24

标签: c++ elf

我已经成功解析了从多个源文件编译的elf文件(可执行文件)。我能够获得绑定(本地,全局,弱),类型(对象,文件,部分,函数),符号的大小和符号的地址以及符号名称(来自字符串表)。

我也知道符号链接的部分。

我的问题是,我们是否可以获得包含符号表信息中的符号的确切对象文件名( * * .obj)?我在解析时错过了一些信息吗?

1 个答案:

答案 0 :(得分:1)

您无法直接获取目标文件名,这在链接期间会丢失。但是,根据用于创建可执行文件的构建过程,您可以从STT_FILE符号推断出目标文件名(例如,可执行文件包含名称为foo.c的STT_FILE符号 - >您可以推断出目标文件是foo的.o)。

特定源文件中的符号似乎遵循带有STB_LOCAL绑定的STT_FILE符号。

从System V ABI标准:

  

STT_FILE - 传统上,符号的名称给出了与目标文件关联的源文件的名称。文件符号具有STB_LOCAL绑定,其部分索引为SHN_ABS,并且它位于文件的其他STB_LOCAL符号之前(如果存在)。