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.

Volcar la memoria completa del programa de metal desnudo del archivo gdb.

Tengo un programa simple en C de la siguiente manera:

int a = 10;
int b = 20;
int sum = 0;

void add() { sum = a + b; }

int main() {
add();
return 0;
}

Compile esto para risc-v con el siguiente comando y especifique que el segmento .text debe comenzar en 0x1000.

riscv32-unknown-elf-gcc -static -T elf32lriscv.x -Wl,-Ttext-segment=0x1000 -Wl,-Map=add.elf.map -o add.elf add.c

Si imprimo la información del archivo usando gdb, veo lo siguiente:

(gdb) i files
Symbols from "/home/mango/myp/risc-v/prog/add.elf".
Local exec file:
        `/home/mango/myp/risc-v/prog/add.elf', tipo de archivo elf32-littleriscv.
        Punto de entrada: 0x108c
        0x00001074 - 0x0000159c es .text
        0x0000259c - 0x000025a0 es .eh_frame
        0x000025a0 - 0x000025a8 es .init_array
        0x000025a8 - 0x000025ac es .fini_array
        0x000025b0 - 0x000029d8 es .data
        0x000029d8 - 0x000029ec es .sdata
        0x000029ec - 0x000029f0 es .sbss
        0x000029f0 - 0x00002a0c es .bss

¿Existe una forma sencilla de volcar la memoria desde 0x1074 hasta 0x2a0c?

El comando dump memory necesita una dirección de inicio y fin, pero como esto cambia según el programa, preferiría poder volcar este valor automáticamente. Además, esto es claramente accesible dentro de gdb, ¿hay alguna forma de obtener esto automáticamente?

Mi objetivo final es crear un archivo de comandos para gdb y pasar eso de la siguiente manera para automatizar el volcado de memoria:

bash
gdb --command=gdb_commands <nombre_archivo>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera sencilla de volcar la memoria desde 0x1074 hasta 0x2a0c. Puedes usar el comando info files en gdb para obtener las direcciones de inicio y fin de las secciones .text y .bss, y luego utilizarlas para especificar el rango en el comando dump memory.

    Aquí tienes un archivo de comandos de ejemplo para gdb (gdb_commands) que volcará la memoria desde 0x1074 hasta 0x2a0c:

    info files
    dump memory dump.bin 0x1074 0x2a0c
    quit
    

    El comando info files mostrará las direcciones de inicio y fin de las secciones .text y .bss, junto con otras secciones del archivo. Puedes utilizar estas direcciones para especificar el rango en el comando dump memory.

    Guarda este archivo como gdb_commands y luego ejecuta el siguiente comando para automatizar el proceso:

    gdb --command=gdb_commands add.elf
    

    Esto ejecutará gdb, ejecutará los comandos en gdb_commands y luego se cerrará. El volcado de memoria se guardará en dump.bin.

    Ten en cuenta que es posible que debas modificar las direcciones en el comando dump memory en función de la salida de info files, ya que pueden ser diferentes para tu programa específico.

Comments are closed.