微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

访问符号表 - 分段错误

如何解决访问符号表 - 分段错误

我正在编写调试器,我需要访问 symtab,但在运行时出现分段错误(核心转储),问题可能出在我获取 symatb(和标题....) 这是代码

    int main(int argc,char** argv)
    {
        FILE* file= fopen(argv[1],"r");
        Elf64_Ehdr* header = (Elf64_Ehdr*)file;
        Elf64_Shdr *section = (Elf64_Shdr*)(file+header->e_shoff);
    
    for(int i=0; i < header->e_shnum; i++) {
        if(section[i].sh_type==SHT_SYMTAB)
        {
            Elf64_Sym *symtab = (Elf64_Sym *)(file+section[i].sh_offset);
....

解决方法

FILE* file= fopen(argv[1],"r") 不会导致文件内容被读入内存。返回的指针 file 不指向与文件数据类似的任何内容。它指向一个抽象数据结构,该结构可以传递给系统库函数,如 fread(),后者从文件中读取数据。

因此将 file 转换为 Elf64_Ehdr* 没有意义。如果您想将文件映射到内存中(这可能是解决问题的最简单方法),您可以使用 mmap。 (但请注意,mmap 需要由 open() 返回的文件描述符;它不是标准 C 库的一部分,并且它对 FILE 对象一无所知。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。