Ejecute GDB en Bash Script
Este tutorial demuestra la ejecución de gdb
en un script bash con un archivo binario que toma argumentos de la línea de comandos.
Crearemos un programa en C que toma un solo argumento de línea de comando y lo convierte en un archivo binario. Usaremos este archivo binario con fines de demostración en este tutorial.
Crea un archivo binario
Aquí hay un programa en C que toma un argumento de línea de comando y lo imprime en la pantalla.
#include <stdio.h>
void main(int argc, char *argv[]) {
printf("This is a C program!\n");
if (argc < 2) {
printf("No argument passed.\n");
} else {
printf("Argument 1: %s\n", argv[1]);
}
}
Compile el programa C y conviértalo en un archivo binario usando el siguiente comando.
gcc args.c -o args
Ejecute el archivo binario sin argumentos.
./args
La salida del archivo binario sin argumentos:
This is a C program!
No argument passed.
Ejecute el archivo binario con un solo argumento.
./args hello
La salida del archivo binario con un solo argumento.
This is a C program!
Argument 1: hello
Ejecute gdb
en Bash Script
El script bash ejecuta gdb
con la opción -q
, que significa bastante. Le dice a gdb
que no imprima el número de versión al iniciar. La opción --args
se utiliza para pasar argumentos de la línea de comandos al binario que carga gdb
para depurar. Sin embargo, el primer argumento es el binario.
En nuestro caso, args
es el nombre del binario y arg1
es el argumento que se pasa al binario.
#!/bin/bash
gdb -q --args args arg1
Ejecute el script bash.
bash gdb_script.sh
Una vez que ejecuta el script, abre gdb
como se muestra a continuación, pero no ejecuta el archivo binario. Debe escribir run
para ejecutar el archivo binario en gdb
.
Reading symbols from args...
(no debugging symbols found)...done.
gdb$
Para ejecutar automáticamente el archivo binario una vez que ejecutamos el script bash, podemos agregar el -ex=r
como se muestra a continuación.
!/bin/bash
gdb -q -ex=r --args args arg1
Ejecute el script bash.
bash gdb_script.sh
En la salida, podemos ver que el archivo binario se ejecutó automáticamente sin que tuviéramos que escribir run
en gdb
.
Reading symbols from args...
(no debugging symbols found)...done.
Starting program: /root/args arg1
This is a C program!
Argument 1: arg1
[Inferior 1 (process 3372) exited with code 021]
Warning: not running
gdb-peda$