2009-11-23 14 views
12

Ich muss eine ziemlich ungewöhnliche Sache tun: manuell eine Elf ausführbare Datei ausführen. I.e. Lade alle Abschnitte an die richtigen Stellen, frage main() ab und rufe es auf (und bereinige es dann). Die ausführbare Datei wird statisch verknüpft, so dass keine Bibliotheken verknüpft werden müssen. Ich kontrolliere auch die Basisadresse, also keine Sorgen über mögliche Konflikte.Linux User-Space ELF Loader

Also, gibt es irgendwelche Bibliotheken dafür?

fand ich OSKit und seine liboskit_exec, aber Projekt scheint tot zu sein seit 2002.

Ich bin OK mit Teilen von Projekten unter (unter Beachtung von Lizenzen, natürlich) und sie zu meinem Bedürfnisse Schneiderei, aber wie ich In der Linux-Welt bin ich kein Anfänger, ich weiß nicht einmal, wo ich diese Teile finde! :)

PS. Ich brauche das für die ARM-Plattform.

UPD Nun, die Frage des Ladens von Elfen scheint ein gutes Wissen darüber zu benötigen (Seufzer), also bin ich auf der Suche nach einigen Spezifikationen und Handbüchern. Und ich denke, ich bleibe bei bionic/linker und libelfsh. Danke Leute!

Zusammengefasste Ergebnisse:

+0

* bump * Ich habe genau dasselbe Problem (auch auf ARM), aber ich muss auch Umzug durchführen. –

Antwort

2

Eine schnelle apt-cache search schlägt libelf1, libelfg0 und/oder libelfsh0. Ich denke, dass das elfsh Programm (in dem Namensvetter-Paket) ein interessantes praktisches Beispiel für die Verwendung von libelfsh0 sein könnte.

Ich habe selbst nichts versucht, aber ich hoffe, sie könnten hilfreich sein. Viel Glück :-)

0

Werfen Sie einen Blick auf libelf für das Lesen des ausführbaren Formats. Sie werden damit Probleme haben, denke ich.

Klingt wie, wie Sie Bibliotheken für nichts brauchen, warum nicht einfach Ihre ausführbare Datei mmap, setzen Sie Daten über verschiedene Speicherbereiche und jmp/b ein?

Ich weiß nicht, ob ARM ein NX-bit entspricht, aber es lohnt sich zu überprüfen.

1

Googles Android, in seiner "bionic" libc-Implementierung, hat einen komplett neu implementierten ELF Loader. Es ist ziemlich sauber und wahrscheinlich eine bessere Quelle als Gilbc, wenn Sie nach etwas Einfachem suchen.

0

Dieses Tool enthält einen ELF-Lader: http://bitwagon.com/rtldi/rtldi.html

ich den Code aus rtldi für ein ELF chain in einem anderen Projekt wiederverwendet werden.Der Code ist hier: http://svn.gna.org/viewcvs/plash/trunk/chroot-jail/elf-chainloader/?rev=877 und hier ist ein Hintergrund: http://plash.beasts.org/wiki/Story16. (Offensichtlich muss ich diese Links brechen, da stackoverflow mich> 1 Link nicht veröffentlichen lassen wird!)