gpt4 book ai didi

linux - 获取ELF文件信息

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:57 25 4
gpt4 key购买 nike

好的...所以我想编写一个程序,仅使用 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 位置 - 这将为我提供节表,并且 sh_name 将为我提供字符串表的索引...

我如何去蜇 table ?它是如何表示的?我该如何使用它? sh_name 中的值是字符串表中的索引(如果它表示为数组),或者是偏移量..

无论如何 - 假设我想打印前两部分的名称 - 考虑到我上面写的代码,我该怎么做请帮忙?

最佳答案

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

这可能是错误的。除非显式声明Elf32_Ehdr结构__attribute__((packed)),否则编译器最终将在该结构的成员之间插入填充,因此sizeof(Elf32_Ehdr) !=(ELF header 部分的实际大小)。为什么不简单地使用 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));

等等。

关于linux - 获取ELF文件信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10855126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com