我想获得ELF文件中任何节的全部内容,
我可以使用此代码获得内容的名称:
int fd;
int counter;
int filesize;
void *data;
char *strtab;
Elf64_Ehdr *elf;
Elf64_Shdr *shdr;
counter = 0;
fd = open(av[1], O_RDONLY);
if (fd == -1) {
perror("open : ");
return (84);
}
filesize = lseek(fd, 0, SEEK_END);
data = mmap(NULL, filesize, PROT_READ, MAP_SHARED, fd, 0);
if (data != NULL) {
elf = (Elf64_Ehdr *)(data);
shdr = (Elf64_Shdr *)(data + elf->e_shoff);
strtab = (char *)(data + shdr[elf->e_shstrndx].sh_offset);
while(counter < elf->e_shnum) {
printf("Contents of section %s:\n", &strtab[shdr[counter].sh_name]);
counter ++;
}
return (EXIT_SUCCESS);
}
perror("mmap : ");
return (EXIT_FAILURE);
[我发现shdr
结构包含许多信息,但是我想要objdump -s a.out
命令提供的信息,但找不到提供所有信息的结构。
您能帮我找到可以在其中找到此信息的结构的线索或名称吗?
这是一个错误:
if (data != NULL) {
因为mmap
在失败时不返回NULL
(它返回MAP_FAILED
)。
您的shdr
变量指向struct Elf64_Shdr
,它具有.sh_offset
和.sh_size
字段。要获取本节的内容,您想转储位于.sh_size
的(char *)data + shdr->sh_offset
字节。