获取ELF文件信息

时间:2012-06-01 17:57:53

标签: linux unix elf

确定... 所以我想编写一个程序,只使用mmap打印elf文件中的所有部分名称(这不重要......)

所以我到目前为止做的是这个 - 将文件绑定到stat结构= map_start = mmap(0,fd_stat.st_size,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0))< 0)

从我得到=的起点将其转换为写入格式 header =(Elf32_Ehdr *)map_start;

从文件=获取节标题偏移量 secoff = header-> e_shoff;

现在 - 我知道我需要去map_start + secoff位置 - 这会给我一个section表,而sh_name会给我一个字符串表索引...

我怎么去刺痛台? 它是如何表现的? 我该如何使用它?并且是sh_name中的值,字符串表中的索引(如果它表示为数组)或偏移量。

无论如何 - 让我说我想要打印前两个部分的名字 - 我怎么做才能完成我上面写的代码 请帮忙吗?

1 个答案:

答案 0 :(得分:0)

header = (Elf32_Ehdr *) map_start;
secoff = header->e_shoff;

这可能是错的。除非显式声明Elf32_Ehdr结构__attribute__((packed)),否则编译器最终会在结构成员之间插入填充,因此sizeof(Elf32_Ehdr) != (the actual size of an ELF header section)。为什么不简单地使用libelf访问器函数呢?

更新:如果您不允许使用访问者功能,则必须执行以下操作:

Elf32_Ehdr hdr;
memcpy(&hdr.e_ident, map_start + 0, EI_NIDENT);
memcpy(&hdr.e.type, map_start + 0 + sizeof(Elf32_half), sizeof(Elf32_Half));

等等。