mp3tag - Cargador ELF de espacio de usuario de Linux
mp3tag ubuntu (4)
Eche un vistazo a libelf para leer el formato ejecutable. Tendrás problemas con esto, creo.
Parece que, como no necesitas bibliotecas para nada, ¿por qué no simplemente mapear tu ejecutable, configurar datos sobre varias áreas de memoria y jmp / b?
No sé si ARM tiene un equivalente de NX bits, pero vale la pena verificarlo.
Necesito hacer algo bastante inusual: ejecutar manualmente un ejecutable elf. Es decir, cargar todas las secciones en los lugares correctos, consultar main () y llamarlo (y luego limpiar). El ejecutable se vinculará estáticamente, por lo que no será necesario vincular las bibliotecas. También controlo la dirección base, por lo que no me preocupan los posibles conflictos.
Entonces, ¿hay alguna biblioteca para eso?
Encontré OSKit y su liboskit_exec, pero el proyecto parece estar muerto desde 2002.
Estoy de acuerdo con tomar parte de los proyectos (respetando las licencias, por supuesto) y adaptarlos a mis necesidades, pero como soy bastante novato en el mundo de Linux, ¡ni siquiera sé dónde encontrar esas piezas! :)
PD. Lo necesito para la plataforma ARM.
UPD Bueno, la cuestión de cargar elfs parece requerir un buen conocimiento al respecto (suspiro), así que me voy a leer algunas especificaciones y manuales. Y creo que me quedaré con bionic / linker y libelfsh. ¡Gracias chicos!
Resultados resumidos:
- libelf : http://directory.fsf.org/project/libelf/
- elfsh y libelfsh (ahora son parte de eresi): http://www.eresi-project.org/
- elfio (otra biblioteca de elfos): http://sourceforge.net/projects/elfio/
- OSKit y liboskit_exec (desactualizado): http://www.cs.utah.edu/flux/oskit/
- bionic / linker : https://android.googlesource.com/platform/bionic
El Android de Google, en su implementación libc "biónica", tiene un cargador ELF completamente reimplementado. Es razonablemente limpio, y probablemente una mejor fuente que gilbc si estás buscando algo simple.
Esta herramienta contiene un cargador ELF: http://bitwagon.com/rtldi/rtldi.html
Reutilicé el código de rtldi para un cargador de cadenas ELF en otro proyecto. El código está aquí: http://svn.gna.org/viewcvs/plash/trunk/chroot-jail/elf-chainloader/?rev=877
y hay algunos antecedentes aquí: http://plash.beasts.org/wiki/Story16
. (Aparentemente tengo que romper estos enlaces porque no me deja publicar> 1 enlace!)
Una apt-cache search
rápida de apt-cache search
sugiere libelf1
, libelfg0
y / o libelfsh0
. Creo que el programa elfsh
(en el paquete del mismo nombre) podría ser un ejemplo práctico interesante de cómo usar libelfsh0
.
No he probado ninguno, pero espero que puedan ser útiles. Buena suerte :-)