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 (アドレス) | 指定位置またはスタックフレームからリターンするまで継続 |