( bzt | 2025. 08. 05., k – 06:48 )

Kiprobalom majd a 32/64 bites megkulonboztetest
Az meg
    if(ehdr->e_ident[EI_CLASS] == ELFCLASS64) {
        // 64 bites, Elf64_* struktok
    } else {
        // 32 bites, Elf32_* struktok
    }
Ja, és csak a teljesség kedvéért, ha tényleg mindenféle architektúrára akarod használni, akkor elfordulhat, hogy big-endian számokba is belefutsz. Ezt
    if(ehdr->e_ident[EI_DATA] == ELFDATA2LSB) {
        // little endian (x86, arm, risc, stb.)
        // le16toh(), le32toh(), le64toh()
    } else {
        // big endian (ősrégi procik, pl. M68K)
        // be16toh(), be32toh(), be64toh()
    }
kóddal lehet egységesen kezelni. Elvileg legalábbis, ugyanis 20 éve láttam utoljára nem little endian masinát, ELF big endian fájlt meg még sosem kellett feldolgoznom. Biztos tudod, de azért leírom, ha valaki weben keresve találna ide, hogy ilyenkor a megfelelő méretű endian.h függvényt kell hívni az ELF struktok mezőire. Ha azonos a programod és a bemenet ELF endianness-e, akkor erre nincs semmi szükség. De szerintem felesleges ennyire univerzálisra megírnod, egy
    if(ehdr->e_ident[EI_DATA] != ELFDATA2LSB) {
        printf("bocsi, nem támogatott bájtsorrend\n");
        exit(1);
    }
ellenőrzés bőven elég lesz neked, mert minden általad felsorolt architektúra little-endian.
Illetve meg debuggolas kozben annyi kijott hogy az elso SHT_STRTAB neve az `.shstrtab`
Igen, általában, de ne vegyél arra mérget, hogy mindig az első lesz. Az ehdr->e_shstrndx index a biztos.