c - junior - formato elf
Añadiendo sección al archivo ELF (5)
Necesito poder agregar una sección arbitraria a un archivo ELF. No puedo usar el código GPL en este programa, por lo que BFD está fuera de discusión. Puedo usar libelf / gelf para leer secciones, pero la documentación es bastante escasa para estas, y no puedo averiguar cómo agregar una sección. ¿Alguien sabe cómo hacer esto? Preferiría no escribir mi propio código ELF.
Eche un vistazo a ELFsh, que ahora forma parte del proyecto ERESI http://www.eresi-project.org/ Tienen una gran cantidad de documentación y usos geniales de sus herramientas.
Los siguientes enlaces podrían ser útiles:
- El tutorial " libelf by Example " tiene un capítulo sobre la creación de nuevos objetos ELF.
- El proyecto elftoolchain tiene páginas de manual que describen en detalle la API de
libelf
.
No lo he probado (todavía), pero puedes ver la función elf_newscn en libelf
Sé que esta es una pregunta antigua, pero encontré un ejemplo práctico que me ayudó a aplicarlo a mi proyecto. (En caso de que alguien se tope con esta pregunta)
tomado de Sourceware Mail Archiv
$ echo ''int main() { puts ("Hello world"); }'' | gcc -x c - -c -o hello.o
$ echo "this is my special data" >mydata
$ objcopy --add-section .mydata=mydata /
--set-section-flags .mydata=noload,readonly hello.o hello2.o
$ gcc hello2.o -o hello
$ ./hello
Hello world
$ objdump -sj .mydata hello
Hay algunas respuestas (posiblemente) relacionadas en esta pregunta sobre los encabezados de los archivos ELF . La respuesta aceptada mencionó el uso de objcopy
para agregar secciones a un archivo ELF, y el BSD bintools afirma tener una implementación de objcopy
licencia objcopy
que podría satisfacer sus necesidades.