2010-05-24 12 views
7

Actualmente estoy buscando una manera de agregar datos a un archivo ejecutable ELF ya compilado, es decir, incrustando un archivo en el archivo ejecutable sin volver a compilarlo.Embalaje de un archivo en un archivo ejecutable ELF

Podría hacerlo fácilmente usando cat myexe mydata > myexe_with_mydata, pero no pude acceder a los datos del ejecutable porque no sé el tamaño del ejecutable original.

¿Alguien tiene una idea de cómo podría implementar esto? Pensé en agregar una sección al ejecutable o usar un marcador especial (0xBADBEEFC0FFEE por ejemplo) para detectar el comienzo de los datos en el ejecutable, pero no sé si hay una forma más hermosa de hacerlo.

Gracias de antemano.

Respuesta

5

Se podría añadir el archivo en el archivo elf como una sección especial con objcopy (1):

objcopy --addsection sname=file oldelf newelf 

agregará el archivo a oldelf y escribir los resultados a newelf (oldelf no habrá modificado) Puede usar libbfd para leer el archivo elf y extraer la sección por nombre, o simplemente hacer rodar su propio código que lee la tabla de secciones y encuentra su sección. Asegúrese de usar un nombre de sección que no colisione con cualquier cosa que el sistema esté esperando, siempre y cuando su nombre no comience con ., debería estar bien.

+0

¡No sabía que objcopy podría hacer eso! Gracias. –

1

He creado una pequeña biblioteca llamada elfdataembed que proporciona una interfaz simple para extraer/referenciar secciones integradas usando objcopy. Esto le permite pasar el desplazamiento/tamaño a otra herramienta, o hacer referencia directamente desde el tiempo de ejecución utilizando los descriptores de archivo. Espero que esto ayude a alguien en el futuro.

Vale la pena mencionar que este enfoque es más eficiente que compilar a un símbolo, ya que permite que las herramientas externas hagan referencia a los datos sin necesidad de extraerlos, y tampoco requiere que todo el binario se cargue en la memoria para poder para extraerlo/referenciarlo.

Cuestiones relacionadas