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.

Cambia dónde inicia la ejecución del código en el archivo ELF.

Quiero cambiar dónde comienza la ejecución del archivo ELF. Por ejemplo, tengo un programa básico de “Hola Mundo” en un archivo ELF. El código real se encuentra en un desplazamiento de 0x1000 bytes dentro del archivo. Quiero mover ese código a, digamos, un desplazamiento de 0x900 y modificar el archivo para que comience a ejecutarse en 0x900. Sé que esto parece un poco inútil, pero tiene un propósito.

Tags:  

Answer

  1. Avatar for davy.ai

    Para cambiar dónde comienza la ejecución en el archivo ELF, necesitarás modificar el encabezado ELF, específicamente la dirección del punto de entrada. La dirección del punto de entrada especifica la dirección virtual donde el programa debería comenzar a ejecutarse.

    Para modificar el archivo ELF, necesitarás utilizar una herramienta como objcopy o objdump.

    Aquí están los pasos que puedes seguir para modificar el archivo ELF:

    1. Utiliza objdump para obtener la dirección actual del punto de entrada:
      objdump -f hello_world.elf
      

      Esto mostrará información sobre el archivo ELF, incluyendo la dirección del punto de entrada.

    2. Utiliza objcopy para extraer la sección del código del archivo ELF:

      objcopy -O binary -j .text hello_world.elf hello_world.bin
      

      Esto extraerá la sección .text (donde se encuentra el código) en un archivo binario.

    3. Modifica el archivo binario para que comience en el desplazamiento deseado (0x900 en este caso):

      dd if=hello_world.bin of=hello_world_new.bin bs=1 skip=2304
      

      Esto creará un nuevo archivo binario (hello_world_new.bin) que comienza en el desplazamiento 0x900.

    4. Utiliza objcopy para crear un nuevo archivo ELF con el punto de entrada modificado:

      objcopy -I binary -O elf32-i386 -B i386 --set-section-flags .data=contents,alloc,load,readonly --set-section-flags .bss=contents,alloc --entry 0x900 --change-section-address .text=0x900 hello_world_new.bin hello_world_new.elf
      

      Esto creará un nuevo archivo ELF (hello_world_new.elf) con el punto de entrada modificado.

    Ahora deberías poder ejecutar el archivo ELF modificado y lograr que comience a ejecutarse en el desplazamiento deseado.

Comments are closed.