2009-11-23 7 views
12

Je dois faire quelque chose d'assez inhabituel: exécuter manuellement un exécutable elf. C'est à dire. charger toutes les sections dans les bons endroits, interroger main() et l'appeler (et nettoyer ensuite). L'exécutable sera lié statiquement, il n'y aura donc pas besoin de lier les bibliothèques. Je contrôle également l'adresse de base, donc pas de soucis sur les conflits possibles.Chargeur ELF de l'espace utilisateur Linux

Alors, y a-t-il des bibliothèques pour cela?

Je trouve OSKit et son liboskit_exec, mais projet semble être mort depuis 2002.

Je suis OK avec la prise des parties de projets (dans le respect des licences, bien sûr) et de les adapter à mes besoins, mais comme je Suis tout à fait un noob dans le monde Linux, je ne sais même pas où trouver ces pièces! :)

PS. J'ai besoin de ça pour la plateforme ARM.

UPD Eh bien, la question du chargement des elfs semble exiger quelques bonnes connaissances à ce sujet (soupir), donc je suis à la recherche de spécifications et de manuels. Et je pense que je vais m'en tenir à bionic/linker et libelfsh. Merci les gars!

résultats résumés:

+0

* bump * J'ai exactement le même problème (aussi sur ARM), mais j'ai aussi besoin de faire une relocalisation. –

Répondre

2

A apt-cache search rapide suggère libelf1, libelfg0 et/ou libelfsh0. Je pense que le programme elfsh (dans le package du même nom) pourrait être un exemple pratique intéressant de la façon d'utiliser libelfsh0.

Je n'ai pas essayé moi-même, mais j'espère qu'ils pourraient être utiles. Bonne chance :-)

0

Jetez un oeil à libelf pour lire le format exécutable. Vous allez avoir des problèmes avec ça je pense.

Cela ressemble, comme vous n'avez pas besoin de bibliothèques pour quoi que ce soit, pourquoi ne pas simplement mmap votre exécutable, définir des données sur les différentes zones de mémoire et jmp/b en?

Je ne sais pas si ARM a un équivalent NX-Bit, mais cela vaut la peine d'être vérifié.

1

Android de Google, dans son implémentation "bionic" libc, a un chargeur ELF complètement réimplémenté. C'est raisonnablement propre, et probablement une meilleure source que gilbc si vous cherchez quelque chose de simple.

0

Cet outil contient un chargeur ELF: http://bitwagon.com/rtldi/rtldi.html

Je le code de réutiliser rtldi pour un chainloader ELF dans un autre projet.Le code est ici: http://svn.gna.org/viewcvs/plash/trunk/chroot-jail/elf-chainloader/?rev=877 et il y a un peu d'arrière-plan ici: http://plash.beasts.org/wiki/Story16. (Apparemment, je dois casser ces liens parce que stackoverflow ne me laissera pas poster> 1 lien!)

Questions connexes