Portál AbcLinuxu, 1. listopadu 2025 17:16
emacsu a gcc. Ten neuvěřitelný bordel co má gcc v includech je naštěstí viditelný, takže se proti němu občas bojuje, ovšem proti tomu co vyvádí ld jde o slabý odvar. Přeji příjemnou zábavu s čtením map file triviálního executable:
$ more main.c
int main () { return 0; }
$ gcc -Wl,-M main.c 2>map
$ more map
Sice jsem chtěl napsat pouze "bez komentáře", ale neudržím se. Proč na linkování jednoho object file potřebuje GNU ld načíst a použít 13 obj souborů nebo knihoven? Proč je výsledkem linku (po agregaci linkovacím skriptem!) neskutečných 62 sekcí, z toho 34 obsahujících nějaká data, a 28 které se mapují do paměti? Proč je i taková blbost jako inicializace současně implementována třemi nezávislými způsoby (.preinit_array, .init_array, .ctors)? Opravdu je potřeba jen kvůli uložení čísla verze překladače vyplýtvat 3 sekce (.gnu.version , .gnu.version_d, .gnu.version_r)? Proč je debug info uloženo v 23 různých sekcích? Jsou ty lidi vůbec normální?
Tiskni
Sdílej:
objdump z nejakeho podivneho duvodu nezobrazuje sekce .shstrtab .symtab .strtab a take sekci NULL, prestoze je binarka obsahuje, jak dokazuje readelf --section-headers.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.