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