FromNandの日記

自分的備忘録

プログラム解析

デバッグする時のブレイクポイントの貼り方

デバッグしていく前には、当然バグが起こる厳密な場所はわからない。 なので、マクロな範囲からミクロな範囲へと絞っていくのがデバッガの役目である。(コール命令をまたいだ瞬間バグが起こるなら、そこでステップ・インすれば、よりミクロな範囲に絞れる) …

【ELF解析】ELF形式のバイナリを解析する際の手順について

ELF形式の解析を行う際の手順をまとめておきます。 まず、main関数で解析対象のバイナリをfopenします。 そしてfstatやmmapを利用してベタバイナリをメモリに確保したあと、ようやく解析が始まります。 int fd; struct stat sb; char *head; // 対象のELF形…

【gdb】ステップオーバー・ステップイン・ステップアウトについて

gdbにおける「ステップオーバー・ステップイン・ステップアウト」についてまとめておきます 【高級言語のソースレベル】 ステップオーバー = n (next) ステップイン = s (step) ステップアウト = fin 【機械語レベル】 ステップオーバー = ni (nexti) ス…

【PEヘッダ】PEヘッダ解析における簡単な流れについて

大まかな流れは「https://tech.blog.aerie.jp/archive/category/Portable%20Executable」と「リバース・エンジニアリングバイブル」で確認してほしい。 中でも「https://tech.blog.aerie.jp/entry/2015/12/27/140649」」では、PEヘッダの流れが一望できる。 …

【gdb】ブレークポイントをアドレス指定で仕掛ける方法

gdbでアドレスを指定してブレイクポイントを仕掛けるには、先頭に「*」を付ける必要があるみたいです。 >> break *0x8049370 次のようにすると、行番号を指定したと思われるようです(多分...) もちろん、こんなに大きな数の行番号が指定されるととっくにプロ…