Exécuter GDB dans Bash Script
Ce tutoriel montre comment exécuter gdb
dans un script bash avec un fichier binaire qui prend des arguments en ligne de commande.
Nous allons créer un programme C qui prend un seul argument de ligne de commande et le convertit en un fichier binaire. Nous utiliserons ce fichier binaire à des fins de démonstration dans ce tutoriel.
Créer un fichier binaire
Voici un programme C qui prend un argument de ligne de commande et l’affiche à l’écran.
#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]);
}
}
Compilez le programme C et convertissez-le en un fichier binaire à l’aide de la commande suivante.
gcc args.c -o args
Exécutez le fichier binaire sans aucun argument.
./args
La sortie du fichier binaire sans arguments :
This is a C program!
No argument passed.
Exécutez le fichier binaire avec un seul argument.
./args hello
La sortie du fichier binaire avec un seul argument.
This is a C program!
Argument 1: hello
Exécutez gdb
dans Bash Script
Le script bash exécute gdb
avec l’option -q
, qui signifie tout à fait. Il indique à gdb
de ne pas imprimer le numéro de version au démarrage. L’option --args
est utilisée pour passer des arguments de ligne de commande au binaire que gdb
charge pour le débogage. Cependant, le premier argument est le binaire.
Dans notre cas, args
est le nom du binaire et arg1
est l’argument passé au binaire.
#!/bin/bash
gdb -q --args args arg1
Exécutez le script bash.
bash gdb_script.sh
Une fois que vous avez exécuté le script, il ouvre gdb
comme indiqué ci-dessous, mais il n’exécute pas le fichier binaire. Vous devez taper run
pour exécuter le fichier binaire dans gdb
.
Reading symbols from args...
(no debugging symbols found)...done.
gdb$
Pour exécuter automatiquement le fichier binaire une fois que nous avons exécuté le script bash, nous pouvons ajouter le -ex=r
comme indiqué ci-dessous.
!/bin/bash
gdb -q -ex=r --args args arg1
Exécutez le script bash.
bash gdb_script.sh
A partir de la sortie, nous pouvons voir que le fichier binaire a été exécuté automatiquement sans que nous ayons à taper run
dans 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$