🎓
gdbの学習記録
初めに
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 id
は docker 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
最適化オプションを無効化する。デバッグ情報が最適化によって失われないようにするため
- gdbの実行
-
gdb add
もしくは、gdb
にて起動させた後file add
プロンプトに(gdb)と表示される
-
run
orr
でプログラムを実行させる - 数字の入力が求められるので、1つ目の値を入力後に
enter
で改行し、2つ目の値を入力する
-
3. 以上でgcc, gdbの動作検証を終了
以上で終了となります
Discussion