在C语言中读取ELF头
目前我正在编写一个小程序,读取elf文件头并打印一些信息 我有一个名为buf的无符号字符指针,它指向elf文件在内存中的位置(我使用mmap将它映射到内存),然后我将它键入一个适当的elf头指针在C语言中读取ELF头,c,linker,elf,C,Linker,Elf,目前我正在编写一个小程序,读取elf文件头并打印一些信息 我有一个名为buf的无符号字符指针,它指向elf文件在内存中的位置(我使用mmap将它映射到内存),然后我将它键入一个适当的elf头指针 Elf32_Ehdr *ehdr = (Elf32_Ehdr *)buf; 在这之后,我想得到程序头表的地址,我这样做 Elf32_Phdr *ptbl = (Elf32_Phdr *) (buf + ehdr->e_phoff) fprintf( stdout , "Offset of pr
Elf32_Ehdr *ehdr = (Elf32_Ehdr *)buf;
在这之后,我想得到程序头表的地址,我这样做
Elf32_Phdr *ptbl = (Elf32_Phdr *) (buf + ehdr->e_phoff)
fprintf( stdout , "Offset of program headers : %d\n", ehdr->e_phoff);
我注意到ptbl指针的值没有改变,当我试图像这样打印e_phoff成员的值时
Elf32_Phdr *ptbl = (Elf32_Phdr *) (buf + ehdr->e_phoff)
fprintf( stdout , "Offset of program headers : %d\n", ehdr->e_phoff);
我得零分
当我试图打印程序头和节头的数量时,也会发生同样的情况-总是得到零
如果我使用LinuxReadelf,它会打印正确的值
是否有人遇到过相同的问题?解析ELF对象时,您需要记住:
教程```包含一个易读的ELF(3)API介绍。我想我发现了问题,我使用的是64位机器,所以我刚刚将Elf32_Phdr更改为Elf64_Phdr,它可以提前回答您自己的问题。如果你先找到答案,这是一件有道理的事情。显然,您使用了错误的结构指针类型,因此您引用了预期的上游内存。我建议使用libelf。您可以共享您的代码吗?谢谢,伙计,我只是在玩这个示例,以便更深入地了解什么是ELF,无论如何,感谢有用的链接