我可以从 ELF 文件的符号表中的符号信息中获取对象名称吗?
Posted
技术标签:
【中文标题】我可以从 ELF 文件的符号表中的符号信息中获取对象名称吗?【英文标题】:Can I get object name from a symbol information in the symbol table in an ELF file? 【发布时间】:2011-08-08 12:03:24 【问题描述】:我已经成功解析了一个从多个源文件编译的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 符号之前(如果存在)。
【讨论】:
以上是关于我可以从 ELF 文件的符号表中的符号信息中获取对象名称吗?的主要内容,如果未能解决你的问题,请参考以下文章
elf文件中的.plt .rel.dyn .rel.plt .got .got.plt的关系