Per le chiamate effettuate dal codice PIC, si è certi che il PLT non è realmente necessario. Il compilatore poteva benissimo generare una ricerca GOT e una chiamata indiretta all'indirizzo ottenuto dal GOT. L'uso di un PLT tende a rendere il codice leggermente più efficiente anche se (almeno, meno ingombro per chiamata), quindi è generalmente utilizzato in ogni caso.
Laddove il PLT è assolutamente necessario, tuttavia, è in codice non-PIC collegato in modo dinamico. (Solitamente ciò si verifica solo nel programma principale, su molti arch, il codice non PIC non è nemmeno consentito/supportato nelle librerie condivise.) Quando il compilatore genera un codice non PIC per una chiamata di funzione, non ha modo di sapere che il l'indirizzo di destinazione effettivo verrà risolto dinamicamente in fase di esecuzione tramite GOT. Quindi genera solo una normale istruzione di chiamata. Il linker è quindi responsabile quando vede un trasferimento del tipo di chiamata per un simbolo che non è risolto localmente e che richiede il collegamento in runtime, per generare una voce PLT che carica l'indirizzo dal GOT e fa un salto indiretto ad esso. In questo modo, il codice di chiamata della funzione non PIC originale non viene modificato.
fonte
2013-12-10 05:10:08
possibile duplicato di [Tabella concatenamento processo e tabella offset globale] (http://stackoverflow.com/questions/9688076/process-linkage-table-and-global-offset-table) –
Questa domanda non risponde alla mia domanda a tutti – Rell3oT