文件 .o 的打印符号

Posted

技术标签:

【中文标题】文件 .o 的打印符号【英文标题】:Print symbol of file .o 【发布时间】:2018-02-14 12:23:02 【问题描述】:

我想打印 .o 文件的符号(与 nm 命令相同)。 我对每个部分进行迭代。并使用这个条件:

if (section[i].sh_type == SHT_SYMTAB)
      
                        sym = (Elf64_Sym *)((char *)content + 
                        section[i].sh_offset);
      

当我有我的 Elf64_Sym 结构时,我想打印符号名称。结构是:

typedef struct 
    uint32_t      st_name;
    unsigned char st_info;
    unsigned char st_other;
    uint16_t      st_shndx;
    Elf64_Addr    st_value;
    uint64_t      st_size;
 Elf64_Sym;

如何打印 st_name ?他的类型是 uint32_t。 我不明白如何打印它。

一个想法? 谢谢你!

【问题讨论】:

我不记得它是偏移量还是字符串表的索引。反正就是其中之一。 好的,谢谢。但是如何访问字符串表? 【参考方案1】:

st_name.shstrtab 中的偏移量。

您要搜索的字符串是(char *)(addr of shstrtab) + sym->st_name;

【讨论】:

以上是关于文件 .o 的打印符号的主要内容,如果未能解决你的问题,请参考以下文章

csharp 用符号“o”打印心形图。

Linux命令备忘

Linux的nm查看动态和静态库中的符号

C++学习(三九六)如何查看.o文件

Linux的nm命令查看动态库和静态库中的符号

Intermec PM4i ASCII 符号打印