目前我正在编写一个小程序,它读取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,它会打印正确的值。
有没有人遇到过同样的问题?