Ejecute GDB en Bash Script

Fumbani Banda 12 octubre 2023
  1. Crea un archivo binario
  2. Ejecute gdb en Bash Script
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$ 
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub