Quando si risolvono i simboli per una libreria condivisa, il caricatore prima cerca nel "file eseguibile principale" (per consentire alle definizioni di sovrascrittura dell'eseguibile principale ...) o cosa?
Sì, esattamente. Il caricatore dinamico ha un elenco collegato di oggetti ELF caricati (la testa dell'elenco è _r_dynamic.r_map
) e ricerca linearmente le tabelle di simboli degli oggetti in tale elenco in modo lineare, finché non trova la definizione di simbolo che sta cercando.
Il capo dell'elenco punta sempre all'eseguibile principale. Se un determinato simbolo viene esportato dall'eseguibile principale, allora (quasi) sempre "vince" (sostituisce altre definizioni).
Tuttavia, notare che il flag di collegamento -Bsymbolic
cambia leggermente l'immagine.
fonte
2012-10-01 03:19:49
Per completezza: ci sono simboli dell'eseguibile principale che non verranno esportati nella tabella dei simboli dinamici a meno che non lo si compili con l'opzione rdynamic (o simile) – debuti