プログラム解析
デバッグしていく前には、当然バグが起こる厳密な場所はわからない。 なので、マクロな範囲からミクロな範囲へと絞っていくのがデバッガの役目である。(コール命令をまたいだ瞬間バグが起こるなら、そこでステップ・インすれば、よりミクロな範囲に絞れる) …
ELF形式の解析を行う際の手順をまとめておきます。 まず、main関数で解析対象のバイナリをfopenします。 そしてfstatやmmapを利用してベタバイナリをメモリに確保したあと、ようやく解析が始まります。 int fd; struct stat sb; char *head; // 対象のELF形…
gdbにおける「ステップオーバー・ステップイン・ステップアウト」についてまとめておきます 【高級言語のソースレベル】 ステップオーバー = n (next) ステップイン = s (step) ステップアウト = fin 【機械語レベル】 ステップオーバー = ni (nexti) ス…
大まかな流れは「https://tech.blog.aerie.jp/archive/category/Portable%20Executable」と「リバース・エンジニアリングバイブル」で確認してほしい。 中でも「https://tech.blog.aerie.jp/entry/2015/12/27/140649」」では、PEヘッダの流れが一望できる。 …
gdbでアドレスを指定してブレイクポイントを仕掛けるには、先頭に「*」を付ける必要があるみたいです。 >> break *0x8049370 次のようにすると、行番号を指定したと思われるようです(多分...) もちろん、こんなに大きな数の行番号が指定されるととっくにプロ…