目前我正在编写一个小程序来读取elf文件头并打印一些信息
我有一个名为buf的unsigned char指针指向elf文件在内存中的位置(我使用mmap将其映射到内存),然后我将它转换为正确的elf头指针
Elf32_Ehdr *ehdr = (Elf32_Ehdr *)buf;
在此之后我想得到一个程序头表的地址,我这样做
Elf32_Phdr *ptbl = (Elf32_Phdr *) (buf + ehdr->e_phoff)
正如我注意到ptbl指针的值没有改变,当我尝试打印e_phoff成员的值时这样
fprintf( stdout , "Offset of program headers : %d\n", ehdr->e_phoff);
我得到零 当我尝试打印多个程序头和节头数时,会发生同样的事情 - 总是为零 如果我使用linux readelf,它会输出正确的值 有没有人遇到过同样的问题?
答案 0 :(得分:5)
解析ELF对象时,您需要记住:
不是手动处理这些情况,而是使用ELF(3)访问API的实现来解析ELF对象可能更容易(参见:BSD libelf或GNU libelf)。 / p>
教程“libelf by Example”包含对ELF(3)API的可读介绍。