簡介
GDB(GNU Debugger)是 GNU 計畫開發的一款命令列除錯工具,主要用來對 C、C++、Assembly 等語言編寫的程式進行除錯。它讓你可以在程式執行過程中暫停、檢查變數與記憶體狀態、逐步追蹤程式流程,進而找出程式中的 bug。
GDB Cheat Sheet
基本操作
| 指令 | 縮寫 | 說明 |
|---|---|---|
ni |
— | Next Instruction(Step over),執行下一行 Instruction |
si |
— | Step Into,執行下一行 Instruction 並追入 Function |
run <args> |
r |
開始執行 |
b [<symbol>/*<address>] |
— | 設立斷點在某個符號(函數)或地址 |
continue |
c |
繼續執行直到結束或是下個斷點 |
finish |
fin |
執行到下一個 ret 指令 |
context |
ctx |
重新印出 Debug 上下文 |
exit / quit |
q |
退出 |
資訊查詢(info)
| 指令 | 縮寫 | 說明 |
|---|---|---|
info <subcommand> |
i <subcommand> |
顯示資訊 |
info breakpoints |
i b |
顯示所有斷點 |
info register |
i r |
顯示所有暫存器資訊 |
info functions |
i functions |
顯示函數資訊 |
斷點管理
| 指令 | 說明 |
|---|---|
del <num> |
刪除該斷點 |
反組譯
| 指令 | 縮寫 | 說明 |
|---|---|---|
disassemble <function_name> |
disass |
顯示函數反組譯組合語言 |
列印(print)
| 指令 | 縮寫 | 說明 |
|---|---|---|
print |
p |
打印變數或運算式 |
p i |
— | 打印變數 i 的值 |
p &i |
— | 打印變數 i 的地址 |
p $rax |
— | 打印暫存器 rax 的值 |
p *ptr |
— | 解引用並打印 ptr 指向的地址的值 |
p/x 1234 |
— | 以 16 進位打印 1234 |
記憶體檢視(x / Examine)
| 指令 | 說明 |
|---|---|
x/<count><format><unit> <address> |
檢視記憶體位址的內容 |
參數說明
| 參數 | 說明 | 選項 |
|---|---|---|
<count> |
要顯示幾個單位 | 任意數字 |
<unit> |
單位大小 | b (byte), h (half), w (word), g (giant) |
<format> |
資料格式 | x (hex), s (string), c (char), i (instruction) |
範例
| 指令 | 說明 |
|---|---|
x/8wx $rsp |
以 hex 顯示 rsp 開始的 8 個 4-byte |
x/16bx 0xdeadbeef |
以 hex 顯示 0xdeadbeef 開始的 16 個 bytes |
x/s $rsi |
以字串顯示 rsi 的值 |
x/i $rip |
以 Instruction 顯示 rip 的值 |


說些什麼吧!