Portál AbcLinuxu, 21. května 2024 20:41
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.