目錄
簡介
一、GDB命令
1.1 斷點
1.2 執行
1.3 資訊查看
1.4 其他
二、GDB啟動
2.1 用gcc編譯程式
2.2 使用GDB除錯
簡介
GDB是一個跨作業系統的除錯器,是Linux系統分析漏洞、除錯溢位程式常用的除錯工具,
一、GDB命令
1.1 斷點
| GDB命令 | 引數 | 作用 | 示例 |
|---|---|---|---|
| break(簡寫為b) | 地址(型別包括:函式名、源檔案行號,*記憶體地址) | 下斷點 | break main break 10 break *0x08000000 |
| watch | 運算式 | 當運算式的值被改變,程式將停止執行 | watch *((int*)0x80d1ba0) |
| clear | 地址 | 和break相反,清除指定地址上的斷點 | clear main clear 10 clear *0x08000000 |
| info | break | 顯示斷點資訊(斷點的編號、種類、使能狀態、地址以及位置) | info break |
| disable | 斷點編號 | 禁用指定斷點 | disable 1 |
| enable | 斷點編號 | 啟用一個被禁用的斷點 | enable |
| delete(簡寫為d) | 斷點編號 | 洗掉指定斷點 | delete 1 |
1.2 執行
`| GDB命令 | 引數 | 作用 | 示例 |
|---|---|---|---|
| run(簡寫為r) | 命令列引數 | 運行程式 | run XFOCUS |
| attach | 行程號 | 除錯正在運行的程式 | attach 1022 |
| continue(簡寫為c) | 次數(可選) | 繼續執行,引數表示忽略幾次斷點 | c c 4 |
| next(簡寫為n) | 次數(可選) | 單步(不進入函式呼叫),引數表示執行幾次next | n n 4 |
| nexti(簡寫為ni) | 次數(可選) | 單步(不僅如此函式呼叫) | ni ni 4 |
| step(簡寫為s) | 次數(可選) | 單步(跟入函式呼叫) | s s 4 |
| stepi(簡寫si) | 次數(可選) | 單步(跟入函式呼叫) | si si 4 |
| until(簡寫為u) | 源檔案行號 | 執行到指定地址后中斷 | u 18 |
| finish | 無 | 運行當前函式知道函式退出 | finish |
| return | 無 | 立即退出當前函式 | return |
gdb /path/program 1022
1.3 資訊查看
`| GDB命令 | 引數 | 作用 | 示例 |
|---|---|---|---|
| info(簡寫為i) | reg break files args frame functions | 顯示各種資訊 | info reg info break |
| backtrace(簡寫為bt) | 幀的數目 | 顯示當前函式呼叫堆疊資訊 | bt |
| print(簡寫為p) | /f exp (f為修飾,exp為運算式) | 顯示運算式的值,格式有 x 十六進制 c 字符 | p/c 0x41 p/x 1024 p str p/x $eax |
| x | /nfu addr (n為個數,f為格式,u為單元大小)如果沒有指定地址則接著上一次x命令顯示之后的地址 | 顯示指定地址內容, 格式有: x 十六進制 s 字串 i 指令 等 單元大小有: b h w g(b為一個位元組,其他依次比前一個大一倍) | x/4i $pc x/16xb $sp x/s * (argv + 1) x/s 0xbffffc52 |
| list(簡寫為l) | 行號、函式或地址 | 如果除錯的是帶符號的編譯的程式,那么list命令可以列出程式原始碼 | l file.c:19 |
| disass | 函式名 | 翻匯編指定函式,如果沒有指定引數默認為當前引數 | disass main |
1.4 其他常用命令
`| GDB命令 | 引數 | 作用 | 示例 |
|---|---|---|---|
| 回車 | 無 | 重復執行上一條命令 | |
| set | 引數很多,建議輸入help set查看 | 設定值 | set var i=4 set {int}0xbffffc52=50 set {int}($esp+4)=$eip |
| shell | 外部shell命令 | 執行外部shell命令 | shell ps -ef |
| quit(簡寫為q) | 無 | 退出gdb | quit |
二、GDB啟動
2.1 用gcc編譯程式
gcc -g a.c -o a
注:添加引數-g,會保留代碼的文字資訊,
2.2 使用GDB除錯
gdb a
如果要減少不必要的提示資訊,可以加-q引數,即
gcc -q a
參考資料
linux下gdb除錯方法與技巧整理
gcc編譯為什么要加-g選項
RUNOOB gdb引數詳解
《網路滲透技術》許治坤著
原創不易,感謝支持,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413351.html
標籤:其他
