es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

gcc: cómo producir ELF donde el tamaño del archivo sea igual al tamaño de memoria para todos los segmentos de carga sin un script de enlace personalizado?

Tengo que producir un binario ELF con gcc a partir de un programa Hello World escrito en C, donde el tamaño de memoria sea igual al tamaño de archivo en todos los segmentos LOAD del archivo ELF. Mi experiencia me dice que esto se puede evitar si muevo .bss a .data en un script de enlazador personalizado. Pero en mi caso, quiero lograr esto sin un script de enlazador personalizado.

¿Hay alguna manera de forzar a todos los segmentos LOAD a tener el mismo tamaño de archivo que el tamaño de memoria con una opción para GCC?

Contexto: Estoy trabajando en habilitar binarios de Linux en un sistema operativo personalizado. El cargador ELF hasta ahora es bastante básico y la prueba/desarrollo será mucho más simple si puedo asignar el ELF tal como está (siempre que todos los segmentos LOAD estén alineados a la página).

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no hay opción dentro de GCC para forzar que todos los segmentos LOAD tengan el mismo tamaño de archivo que el tamaño de memoria. Como mencionaste, la solución común para este problema es crear un script de enlazador personalizado y mover el contenido de .bss a .data. Sin embargo, específicamente dijiste que no quieres usar un script de enlazador personalizado.

    Una solución potencial podría ser usar las banderas -fdata-sections y -ffunction-sections al compilar tu programa con GCC. Esto asegurará que cada variable y función se coloque en su propia sección, lo que potencialmente puede reducir el tamaño de la sección .bss. Además, podrías usar el comando strip para eliminar cualquier sección no utilizada del archivo ELF final, lo que también podría ayudar a reducir el tamaño del archivo.

    En última instancia, sin embargo, puede ser necesario usar un script de enlazador personalizado para lograr tu resultado deseado de tener todos los segmentos LOAD con el mismo tamaño de archivo que el tamaño de memoria.

Comments are closed.