Ho una situazione interessante sul lavoro che sto cercando di trovare una buona soluzione per. Abbiamo un codice che gira su un metallo nudo MIPS multi-core (nessun kernel). Abbiamo l'obbligo di integrare alcuni codici di terze parti che devono essere aggiornati. Stavo pensando di compilare il codice di terze parti come PIC e quindi modificare il GOT per i simboli codice/dati quando scarico questo codice (ho il controllo su dove risiederà il codice). Inoltre, supponete che le interfacce nel codice di terze parti non vengano modificate, quindi non ci sono nuove voci PLT/GOT. Funzionerà ?. Quali altre cose dovrei considerare?Emulazione del caricatore dinamico per correggere gli offset delle librerie condivise
risposta
La risposta corretta è più lunga di "incorporare un linker/caricatore dinamico"? Il tuo problema sembra lo stesso risolto da ld.so e simili. Descrivere tutte le cose che un linker/loader dinamico deve considerare è l'argomento di libri come Linkers and Loaders di John Levine.
Sto cercando qualcosa di più semplice della scrittura del mio caricatore incorporato. Ho letto il libro che hai menzionato sopra. Quando avrò finito di risolvere il mio problema, pubblicherò ciò che ho finito per fare. Grazie!. – vamsi
Le binutils Linux/Unix objcopy
sarebbero quelle che state cercando. Supponendo che tu stia costruendo tutti i tuoi binari in una volta, invece di volerli caricare dinamicamente in runtime in ordine casuale [e non hai abbastanza memoria per diffonderli attraverso quella memoria], allora penso che funzionerebbe.
Ovviamente, se SOLO hai bisogno di sistemare il GOT, allora non vedo perché non puoi farlo solo - non è così difficile scrivere qualcosa che lo faccia. Ma objcopy è già stato scritto e può fare un po 'di binari/eseguibili "pasticciare" (l'ho usato per creare boot-rom per vari sistemi, incluse le ROM del BIOS per PC e simili) [Non che io sia venuto fuori con l'idea, più come se avessi preso il makefile di qualcuno, cosa che accadeva di avere objcopy al suo interno - ho solo guardato cosa ha fatto per capire come ha fatto la rom quando qualcosa stava andando storto in un punto o in un altro]
- 1. Caricamento dinamico di librerie condivise Linux?
- 2. Makefile per librerie condivise?
- 3. percorsi relativi per librerie condivise
- 4. Come trovare l'indirizzo assoluto del simbolo delle librerie condivise?
- 5. durante il caricamento delle librerie condivise libpng16
- 6. Librerie condivise opzionali
- 7. Caricatore di plugin per librerie dinamiche C++ multipiattaforma
- 8. Librerie condivise Linux C++
- 9. Stripping librerie condivise di linux
- 10. Dilemma sulle librerie condivise su Unix
- 11. Librerie condivise di Websphere "Priorità"?
- 12. Costruisci librerie condivise in ATLAS
- 13. Miscelazione di librerie statiche e librerie condivise
- 14. Come ottenere l'elenco delle librerie condivise eseguibili da C++?
- 15. Errore Gcc di Cygwin durante il caricamento delle librerie condivise?
- 16. errore durante il caricamento delle librerie condivise libstdC++ so.5
- 17. durante il caricamento delle librerie condivise: errore libopencv_core.so.3.0
- 18. Automake e librerie condivise standard
- 19. Differenza tra moduli e librerie condivise?
- 20. Come combinare le librerie condivise?
- 21. Ricerca offset di simboli locali nelle librerie condivise a livello di codice su OS X
- 22. Aggiorna librerie condivise senza riavviare processi
- 23. Qual è la differenza tra linker dinamico e caricatore dinamico?
- 24. Perché gcc forza il PIC per le librerie condivise x64?
- 25. LD_PRELOAD equivalente per Windows per precaricare le librerie condivise
- 26. ELF Ordinamento ricerca simboli caricatore dinamico
- 27. FFmpeg non compila con le librerie condivise
- 28. Differenza tra librerie statiche e condivise?
- 29. Variabili globali, librerie condivise e -effetto fPIC
- 30. Qual è l'opzione "soname" per la creazione di librerie condivise?
diciamo, mentre penso che stia nuotando nella parte molto profonda di una domanda molto localizzata, semplicemente non riesco a convincermi a farlo cadere (e in effetti, invece, ho votato), poiché è semplicemente troppo dannatamente intrigante l'idea e la curiosità mi hanno conquistato (e apparentemente anche altri). In bocca al lupo! – WhozCraig
@vamsi La domanda non mi è chiara. Intendi cambiare il GOT ogni volta che carichi una nuova versione di terze parti (aggiornamento)? Stai chiedendo come scrivere da solo un caricatore? – selalerer
@selalerer Sì, intendevo cambiare il GOT ogni volta che carica una nuova versione di terze parti. Sì, in sostanza quello che finirò per avere è un caricatore leggero. Non voglio implementare un caricatore a pieno campo. Tutto quello che voglio fare è sistemare le tabelle GOT/PLT e ottenere il nuovo codice attivo. – vamsi