2011-08-08 48 views
2

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

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

我的问题是,我们可以得到确切的目标文件名(* * .obj),它包含符号表信息中的符号吗?我在解析时是否缺少一些信息?

回答

1

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

看起来,特定源文件中的符号遵循STT_FILE符号和STB_LOCAL的绑定。

从System V的ABI标准:

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

相关问题