( bzt | 2025. 08. 02., szo – 17:19 )

kulonbseggel hogy 32 bites ELF-eken kell most dolgozzak [...] Szoval a tipusokat atirtam Elf32_*-ra
Igen, tényleg csak ennyi.
Oh, megvan: ket SHT_STRTAB is van ebben a *.elf-ben... es hat nem mindegy hogy melyiket hasznaljuk.
Ja, igen, lehet több sztringtábla is, tipikusan ilyenkor van egy, amiben a szekciónevek vannak (ehdr->e_shstrndx indexű szekcióban), meg egy másik csak a szimbólumok neveivel. De ez csak konvenció kérdése, lehet egyben is a kettő, az ELF megengedi. Ha tutibiztosra akarsz menni, akkor a szekció típuskódja helyett a szekciónevet kell nézni:
    // szekciónevek sztringtáblája
    strt = (Elf32_Shdr *)((uint8_t *)shdr + ehdr->e_shstrndx * ehdr->e_shentsize);
    shstr = (char*)data + strt->sh_offset;
    // nem típuskódot, hanem szekcióneveket nézünk
    for(i = 0; i < ehdr->e_shnum; i++) {
        s = ((Elf32_Shdr *)((uint8_t *)shdr + i * ehdr->e_shentsize));  // köv. section
        if(!memcmp(shstr + shdr->sh_name, ".strtab", 8)) strs = s; else
        if(!memcmp(shstr + shdr->sh_name, ".symtab", 8)) syms = s;
    }
    // a többi már ugyanaz
A szimbólumneveket tartalmazó sztringtábla neve mindig ".strtab" és ilyenből mindig csak egy van. Ha a nevet nézed, akkor működik úgy is, ha csak egy sztringtábla van, akkor is, ha kettő, meg akkor is, ha a másodikban vannak a szekciónevek (ezt sem köti meg az ELF, elvileg bármi lehet a sorrend).