🎓

gdbの学習記録

2023/04/17に公開

初めに

CTFでWeb Exploitationをやっているうちに、gdbを使ったデバッグの知識が必要になりました。初めて触れる人(自分含め)でもわかりやすいように、c言語、gdb、gccについてまとめます。
C言語、gdb、gccには初心者ですので、誤りがあります。その際、ご指摘いただけるとうれしみ

本記事でのゴール

dockerを用いて環境構築 & 環境確認

環境構築

自分はCTF以外で、C, gdb, gccを扱わないので、自身のpcには不要です。

ですので、dockerを用いてCTF専用の環境を構築しました。Dockerfileを下記いたします。

—no-install-recommendsは必須です!めちゃくちゃ軽くなりました!

# 基本イメージの選択
FROM ubuntu:latest

# 必要なツールのインストール
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
		file \
		strings \
		unzip \
    python3 \
    python3-pip \
    nmap \
    gdb \
		gcc \
		less \
		vim \

# pipのアップデート
RUN pip install --upgrade pip

# ワーキングディレクトリの設定
WORKDIR /ctf

上記ファイルを Dockerfileとして保存し、同ディレクトリで下記コマンドを実行します。

{ }内はご自由に命名ください。{}は不要です。

  • docker build -t {ctf_container} .
  • docker run -it --name {ctf_conainer_instance} {ctf_container}

以上で環境構築が完了しました!

環境確認

作成した環境が問題ないか、簡単なプログラムをデバッグしながら検証していきます。

1. 以下のコマンドで、コンテナ内に入っていきます!

docker exec -it { container id } bash

container iddocker psにて表示されます

2. 簡単なCプログラムを書き、コンパイルする。

足し算を実行するサンプルコードを下記します。

#include <stdio.h>

int main()
{
    int a, b, sum;

    printf("Enter two integers: ");
    scanf("%d %d", &a, &b);

    sum = a + b;

    printf("Sum = %d\n", sum);

    return 0;
}

下記コマンドより、add.cをコンパイルします。

gcc -g -O0 add.c
  • -g ファイルにデバッグ情報を付加する。↓本当?次回要検証
    • ソースコードの行番号やファイル名
    • 変数名や関数名などのシンボル情報
    • スタックフレーム、レジスタ、変数の値などの実行時の情報
  • -O0 最適化オプションを無効化する。デバッグ情報が最適化によって失われないようにするため
  1. gdbの実行
    1. gdb add もしくは、 gdb にて起動させた後 file add プロンプトに(gdb)と表示される
    2. run or rでプログラムを実行させる
    3. 数字の入力が求められるので、1つ目の値を入力後に enterで改行し、2つ目の値を入力する
      alt

3. 以上でgcc, gdbの動作検証を終了

以上で終了となります

Discussion