LinuxのgdbとGhidraの併用での解析方法(おまけ) | reverse-eg-mal-memoのブログ

reverse-eg-mal-memoのブログ

サイバーセキュリティに関して、あれこれとメモするという、チラシの裏的存在。
medium(英語):https://sachiel-archangel.medium.com/

gdbでプログラムを実行しながらバイナリコードを解析する際に使いそうなコマンドをメモ。

適宜ここに追加していく予定。

 

情報の参照

 

コマンド 内 容
info proc プロセスの要約情報
info proc mappings プロセスのマッピング情報
info proc status プロセスの状態情報
info proc all プロセスの情報すべて
info breakpoints ブレークポイントの情報

 

 

ブレークポイント

 

コマンド 内 容
b *(アドレス) ブレークポイントの設定
例:b *0xaaaaaaac45e0
watch *(アドレス) 値が変更された場合にブレークするブレークポイントを設定
例:watch *0xaaaaaaaaa000
tb *(アドレス) プログラムの実行コードのブレークポイント、ただし1回限り
rwatch *(アドレス) 読み込みメモリアクセス時のブレークポイント
awatch *(アドレス) 読み書きメモリアクセス時のブレークポイント
catch syscall (関数名) 特定のシステムコール呼び出し時
delete breakpoints (番号) 設定されているブレークポイントの削除(番号は"info breakpoints"で表示された番号)

 

 

メモリの参照

値の参照方法

x (アドレスまたはレジスタ)

 

値の参照方法(フォーマット付き)

x/(フォーマット) (アドレスまたはレジスタ)

 

フォーマット一覧

パラメータ 内 容
数字 繰り返す回数
b 単一バイト(1バイト)
h 半ワード(2バイト)
w ワード(4バイト)
g 巨大ワード(ダブルワード)(8バイト)
x 符号なし16進数
d 符号付き10進数
u 符号なし10進数
o 符号なし8進数
a 絶対アドレス、またはシンボルに定義された相対アドレス
c 文字定数
f 浮動小数点(w、gのみ)
s 文字列
i 機械語インストラクション

 

例:0xa0000000から1バイト単位で16バイト表示する。
x/16b 0xa0000000     
    
例:スタックポインタ以下の値を16ワード表示する。
x/16xw $esp    
 

 

レジスタの参照

 

コマンド 内 容
info registers 全てのレジスタの値を参照 ("i r"で省略可能)
info register(レジスタ名) 特定のレジスタの値を参照 ("i r (レジスタ名)"で省略可能)
p/x $(レジスタ名) 特定のレジスタの値を参照(別法)

 

 

逆アセンブルコードの表示

 

逆アセンブルコードの表示

disassemble (アドレス)

 

逆アセンブルコードのレイアウト設定

set disassembly-flavor (レイアウト)

 

レイアウト:

  •     intel (intel形式)
  •     att (AT&T形式)

 

 

プロセスの実行

 

コマンド 内 容
run プロセス開始(最初から実行)
continue ブレークポイントからの継続
step 1ステップ実行(デバッグモードモジュールかつソースとリンク)
stepi ニモニック命令レベルで1ステップ実行
nexti ニモニック命令レベルで実行(callの場合リターンするまで継続)
finish スタックフレームからリターンするまで継続
until (アドレス) 指定位置またはスタックフレームからリターンするまで継続