-
Notifications
You must be signed in to change notification settings - Fork 1
/
gdb_cheatsheet.txt
87 lines (71 loc) · 4.38 KB
/
gdb_cheatsheet.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
[]があるのは引数をとるコマンド
.gdbinitにユーザー定義のコマンドを追加できる
「gdb --pid [PID]」でプロセスにattachできる。
* ノーマルなgdbのコマンド
help [] 引数に入っているコマンドに対するhelpを表示
info [] 引数で指定された情報の表示
prog(program) programの状態
func(function) 関数などのシンボルの一覧。libcの関数等も表示してしまうのでプログラム固有のものが見たければ、runする前に確認すると良い。
args(arguments) 現在の関数の引数の表示
stack スタック上の関数の積層の様子
full info stackをより詳細に表示
frame 現在のスタックフレームの情報
reg(registers) レジスタの情報
b(break) breakpointの情報
shell [] OSのshellコマンドを実行可能。例えば「shell clear」。引数なしだとshellそのものがgdbの子プロセスとして起動
![] shellコマンドと同じ
b [] breakpointをはるコマンド。引数にアドレスを取る場合は「*」をつける。例えば「b *0x400012」
b [] if [] if文の条件に当てはまった時にbreak
del [] breakpointの削除
r breakpointに当たるかerrorで落ちるかプログラムが正常終了するまで実行
c 止まっていたプログラムの実行を継続
fin 現在の関数を抜ける(exitする)まで実行
n ソースコードの1行分を実行。ネストの関数の中で止まることはない。
s ソースコードの1行分を実行。ネストの関数の中でも1行分で止まる
ni 1命令分を実行。call命令などで呼び出し先の関数の中で止まることはない。
si 1命令分を実行。call命令なでの呼び出し先の関数の中でも1命令分で止まる。
disas [address] バイナリをdisassembleした結果を表示
q quitコマンド。gdbの終了コマンド。
p [] printコマンド。引数の変数の値を表示。
&(func) 関数のアドレスを表示。()は必要ない。例えば「p &main」
$(reg) レジスタの値を表示。()は必要ない。例えば「p $rip」
p/[type] [] 値を指定したtypeで表示。例えば「p/x $rsp」
/t binary
/x 16進数
/c character
/f floating point
/s string
x [address] addressの指す値を表示。例えば「x 0x7fffffffe3b8」や「x $rsp」
x/[length][format] [address] 例えば「x/10gx $rsp」
length 何個表示するか。
format どのような形式で表示するか。値の型とwordをそれぞれ指定できる。
型
/t binary
/o 8進数
/x 16進数
/d decimal
/f floating point
/a address
/i instruction
/c character
/s string
word
/b byte
/h half-word(16bit) インテル記法で言うWORD
/w word(32bit) インテル記法のDWORD
/g giant-word(64bit) インテル記法のQWORD
where info stackに同じ。fullも使える。
bt backtrace。info stackに同じ。fullも使える。
set [式] 式を使ってレジスタ等の値を書き換える。例えば「set $rax += 4」
* peda拡張のコマンド
vmmap メモリのレイアウトと書き込み権限の表示。
sgrep [string] 文字列の検索。後ろにallをつければデバッグしているプロセスのメモリ全体から検索。
pd(pdisas) disasのcallやjmp命令が色付きで見やすくなる。
telescope [cnt] addressを指定しなければstackを表示
checksec checksecというプログラムが個別に存在するが、それと同じ機能。バイナリのセキュリティ機構の有無を確認。
他にもマニアックなコマンドがたくさんある。
* Pwngdb固有のコマンド
libc libc_baseのアドレス
ld ldのアドレス
got gotのテーブルの情報を表示
他にもheap関連のコマンドがそこそこ存在する。