Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récuperer les noms des symboles ELF

15 février 2019 à 22:17:36

Bonjour !

J'essaye de récupérer dans un programme le nom des symboles d'un fichier elf (comme quand on fait nm fichier.o) et je n'y arrive pas .

Pour l'instant, je récupère la section SYM_TAB, j'ai compris que le Elf64_sym st_name était un index de la string table mais je n'arrive pas plus .

int main(int ac, char **av)
{
    int fd;
    int filesize;
    void *buf;
    struct stat s;
    Elf64_Ehdr *elf;
    Elf64_Shdr *sections;
    Elf64_Sym *sym;
    uint64_t str_tbl_ndx;

    fd = open(av[1], O_RDONLY);
    if (fd == -1) {
        return 84;
    }
    filesize = lseek(fd, 0, SEEK_END);
    buf = mmap(NULL, filesize, PROT_READ, MAP_SHARED, fd, 0);
    if (buf != NULL) {
        int i = 0;
        elf = (Elf64_Ehdr *)(buf);
        sections = (Elf64_Shdr *)(buf + elf->e_shoff);

        char *strtab = (char *)((elf->e_shentsize * elf->e_shstrndx) + elf->e_shoff);

        for (int i = 0; i < elf->e_shnum; i++) {
            if (sections[i].sh_type == SHT_SYMTAB) {
                printf("Sym Table found !\n");
                sym = (Elf64_Sym *)(buf + sections[i].sh_offset);
                int size = (sections[i].sh_size / sizeof(Elf64_Sym));
                for (int i = 0; i < size; i++) {
                    printf("name : %s\n", strtab + sym[i].st_name);
                }
            }
        }
    }
}

J'ai l'impression que le problème vient de ma "strtab" mais je ne suis pas sur .

Deux jours que je suis bloqué la dessus je demande de l'aide maintenant :p Quelqu'un aurait une idée ?

merci de votre aide :)

  • Partager sur Facebook
  • Partager sur Twitter
La ou certains ne voient que folie , nous voyons du génie