用C代码获取ELF文件任何部分的完整内容

问题描述 投票:0回答:1

我想获得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命令提供的信息,但找不到提供所有信息的结构。

您能帮我找到可以在其中找到此信息的结构的线索或名称吗?

c elf objdump
1个回答
0
投票

这是一个错误:

if (data != NULL) {

因为mmap在失败时不返回NULL(它返回MAP_FAILED)。

您的shdr变量指向struct Elf64_Shdr,它具有.sh_offset.sh_size字段。要获取本节的内容,您想转储位于.sh_size(char *)data + shdr->sh_offset字节。

© www.soinside.com 2019 - 2024. All rights reserved.