Bash スクリプトで GDB を実行する
Fumbani Banda
2023年10月12日
このチュートリアルでは、コマンドライン引数を取るバイナリファイルを使用して bash スクリプトで gdb
を実行する方法を示します。
単一のコマンドライン引数を取り、それをバイナリファイルに変換する C プログラムを作成します。このチュートリアルでは、デモンストレーションの目的でこのバイナリファイルを使用します。
バイナリファイルを作成する
これは、コマンドライン引数を取り、それを画面に出力する C プログラムです。
#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]);
}
}
C プログラムをコンパイルし、次のコマンドを使用してバイナリファイルに変換します。
gcc args.c -o args
引数なしでバイナリファイルを実行します。
./args
引数なしのバイナリファイルの出力:
This is a C program!
No argument passed.
単一の引数でバイナリファイルを実行します。
./args hello
単一の引数を持つバイナリファイルの出力。
This is a C program!
Argument 1: hello
Bash スクリプトで gdb
を実行する
bash スクリプトは、-q
オプションを指定して gdb
を実行します。これはかなりの意味です。起動時にバージョン番号を出力しないように gdb
に指示します。--args
オプションは、デバッグのために gdb
がロードするバイナリにコマンドライン引数を渡すために使用されます。ただし、最初の引数はバイナリです。
この場合、args
はバイナリの名前であり、arg1
はバイナリに渡される引数です。
#!/bin/bash
gdb -q --args args arg1
bash スクリプトを実行します。
bash gdb_script.sh
スクリプトを実行すると、以下に示すように gdb
が開きますが、バイナリファイルは実行されません。gdb
でバイナリファイルを実行するには、run
と入力する必要があります。
Reading symbols from args...
(no debugging symbols found)...done.
gdb$
bash スクリプトを実行した後、バイナリファイルを自動的に実行するには、以下に示すように -ex=r
を追加します。
!/bin/bash
gdb -q -ex=r --args args arg1
bash スクリプトを実行します。
bash gdb_script.sh
出力から、gdb
に run
と入力しなくても、バイナリファイルが自動的に実行されたことがわかります。
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