逆向工具 GDB 基本影片教學

GDB 基本教學
(影片教學在文章最下方)
1. GDB 介紹
GDB(GNU Debugger)是一個強大的調試工具,可用於調試 C、C++ 及其他語言的程式。它允許你設置斷點、單步執行程式、檢查變數值、修改記憶體等。
2. 安裝 GDB
Linux(Ubuntu/Debian)
sudo apt update
sudo apt install gdb
macOS(透過 Homebrew)
brew install gdb
Windows
可透過 MinGW 或 Cygwin 來安裝 GDB。
3. 編譯程式以供 GDB 除錯
在編譯時,需要加上 -g
選項來產生除錯資訊。
gcc -g -o my_program my_program.c
4. 啟動 GDB
gdb my_program
或執行並傳遞參數:
gdb --args my_program arg1 arg2
5. GDB 常用指令
5.1 設置斷點
- 設定函式內的斷點:
break main
- 設定特定行號的斷點:
break 10
- 設定特定檔案與行號的斷點:
break my_program.c:15
5.2 執行程式
- 執行程式(會停在第一個斷點):
run
- 帶參數執行:
run arg1 arg2
5.3 單步執行
- 執行下一行程式碼(會進入函式內部):
step
- 執行下一行程式碼(不進入函式內部):
next
- 繼續執行直到遇到下一個斷點或程式結束:
continue
- 執行到當前函式返回:
finish
5.4 變數與記憶體檢查
- 顯示變數值:
print x
- 監視變數變化:
watch x
- 列出當前函式的所有變數:
info locals
5.5 監控執行狀態
- 查看呼叫堆疊:
backtrace
- 切換堆疊幀(frame):
frame 2
5.6 修改變數值
- 變更變數內容:
set var x = 10
5.7 移除斷點
- 列出所有斷點:
info breakpoints
- 刪除特定斷點(例如刪除 1 號斷點):
delete 1
5.8 退出 GDB
- 退出除錯模式:
quit
6. GDB 進階功能
6.1 記錄程式執行
- 使用
record
指令記錄程式執行過程:record
- 反向執行(撤銷一步):
reverse-step
- 反向繼續執行:
reverse-continue
6.2 追蹤記憶體
- 檢查記憶體地址:
x/10xw 0x601040
- 檢視指標指向的內容:
print *ptr