Bash スクリプトで GDB を実行する

Fumbani Banda 2023年10月12日
  1. バイナリファイルを作成する
  2. Bash スクリプトで gdb を実行する
Bash スクリプトで GDB を実行する

このチュートリアルでは、コマンドライン引数を取るバイナリファイルを使用して 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

出力から、gdbrun と入力しなくても、バイナリファイルが自動的に実行されたことがわかります。

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
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