Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 获取ELF文件信息_Linux_Unix_Elf - Fatal编程技术网

Linux 获取ELF文件信息

Linux 获取ELF文件信息,linux,unix,elf,Linux,Unix,Elf,好的。。。 所以我想写一个程序,只使用mmap打印elf文件中的所有节名,这并不重要 到目前为止我做的是- 将文件映射到stat结构= map_start=mmap0,fd_stat.st_size,PROT_READ | PROT_WRITE,map_SHARED,fd,0 e_shoff 现在-我知道我需要转到map_start+secoff位置-这将给我一个section表,sh_名称将给我一个字符串表的索引 我怎么去那张桌子? 它是如何表现的? 我如何使用它?如果以数组或偏移量表示,则S

好的。。。 所以我想写一个程序,只使用mmap打印elf文件中的所有节名,这并不重要

到目前为止我做的是- 将文件映射到stat结构= map_start=mmap0,fd_stat.st_size,PROT_READ | PROT_WRITE,map_SHARED,fd,0 e_shoff

现在-我知道我需要转到map_start+secoff位置-这将给我一个section表,sh_名称将给我一个字符串表的索引

我怎么去那张桌子? 它是如何表现的? 我如何使用它?如果以数组或偏移量表示,则SHU name中的值是字符串表中的索引

不管怎样,假设我想打印前两个部分的名称,那么如何使用上面编写的代码呢 请帮忙

header = (Elf32_Ehdr *) map_start;
secoff = header->e_shoff;
这可能是错误的。除非Elf32_Ehdr结构被显式声明为u属性u压缩,否则编译器最终将在结构的成员之间插入填充,因此sizeofElf32_Ehdr!=ELF标头节的实际大小。为什么不直接使用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));

等等。

好吧,这项任务是给我们的,因此我们将了解ELF文件的结构-我们假设使用直接从ELF头获取的数据获取名称。。。我想他们不希望我们使用访问器功能。。我甚至不知道有访问器函数。。。当我写代码时,我确实得到了偏移量,编译器允许我使用上面的转换进入elf头-所以我真的不知道它是否错了。。。它起作用了。。我想,但它不起作用,因为你没有得到预期的结果。你想一个接一个地填充结构的成员,手工编码适当的偏移量和长度,然后用它们来记忆。。。我真的不明白你在说什么-这是我第一次使用ELF文件。只是为了确保你明白我想做什么你可能会做。。。但是我真的没有什么要说的,因为我不知道。嗯,我只想把章节的名字打印出来。我真的不明白你在那里做了什么——顺便说一句,当时是萨克斯。。!可能重复的