【问题标题】:Can I get object name from a symbol information in the symbol table in an ELF file?我可以从 ELF 文件的符号表中的符号信息中获取对象名称吗?
【发布时间】:2011-08-08 12:03:24
【问题描述】:

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

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

我的问题是,我们能否从符号表信息中获取包含符号的确切目标文件名(**.obj)?解析时是否遗漏了一些信息?

【问题讨论】:

    标签: c++ elf


    【解决方案1】:

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

    似乎特定源文件中的符号跟在 STT_FILE 符号之后,并具有 STB_LOCAL 的绑定。

    来自 System V ABI 标准:

    STT_FILE -- 按照惯例,符号名称给出了与目标文件关联的源文件的名称。一个文件符号具有 STB_LOCAL 绑定,它的节索引是 SHN_ABS,并且它在文件的其他 STB_LOCAL 符号之前(如果存在)。

    【讨论】:

      猜你喜欢
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多