目錄小記
gdb除錯命令
多程序常用命令
多執行緒常用命令
linux程式發布流程
反除錯技術
安裝gdb外掛程式gef gdb7.7以上才能用 且程式編譯時 -g 才能用gdb除錯
git clone ~/gdbplugins
對應啟動命令:
echo "source ~/gdbplugins/peda/peda.py" > ~/.gdbinit
echo "source ~/gdbplugins/gef/gef.py" > ~/.gdbinit
echo "source ~/gdbplugins/gdbinit/gdbinit" > ~/.gdbinit
檢視程序命令 ps -a 檢視特定程序 ps -ef | grep hello 檢視程序目錄 which hello
gdb啟動命令:
本地啟動:gdb 路徑
本地段錯誤檔案啟動:gdb 路徑 core
ulimit -c 檢視當前檔案控制代碼
sudo ulimit -c unlimited 設定無限大儲存core檔案
attch方式啟動 gdb 路徑 pid gdb /home/wd/hello 2946
遠端啟動 gdbserver 0.0.0.0:6666 /path/to/file
指定檔案方法 命令 ***.c:***x
1.設定函式引數 set args 100 200
set env user = hcen 設定環境變數
set step-mode 設定單步跟蹤 取消命令 set step-mode no
set detach-on-fork off 掛起所有程序 父程序和子程序都卡住 反之*** on 放行乙個程序 detach inferiors 《程序編號》
set follow-fork-mode 設定跟隨子程序還是父程序 同類 set follow-fork-mode
2.檢視函式 l /list 顯示位置(函式名 行數等) 例:l main 或者 list main
設定顯示行數 set listsize 20 //上下顯示10行
3.斷點 b/break 斷點位置(行數 函式名) 例: b 18 或者 b sum 或者 b hello.c:18
info breakpoints 檢視當前所有斷點
disable 斷點號 設定該斷點失效
delete 斷點號 刪除該斷點
b 行號 if 條件 條件斷點 例: b 22 if i==90
b * 0x8048361 在某個位址上打斷點
watch 引數 記憶體斷點 當讀取這塊記憶體時斷點 用rwatch 引數 移除
4.執行程式 r/run
5.單步執行 ,有函式進入 s/step
6.單步執行,有函式跳過 next /n
ni 執行下一條指令 彙編指令
7.完成函式呼叫並返回 finish/f
8.執行到函式結束或斷點 continue/c
9.檢視程式呼叫堆疊 backtrace/bt
info frame 棧號 檢視該棧號的棧幀
frame 檢視第多少個棧幀
10.檢視記憶體 examine/x
x/(大小int)(單位b一位元組h兩個位元組w四個位元組g八個位元組)(進製x f字串 d i**。。。)
例:x/20gz 0x.....
vmmap 檢視位址段
401000 開頭的是 **段位址
601000 開頭的是 堆位址
11.反彙編** disassemble
12. 檢視命令info
12.1檢視暫存器 info registers/i r
第乙個引數rdi 第二個引數rsi 第三個引數rdx 第四個引數rcx r8 r9 其餘引數在棧裡 壓棧暫存器rsp
32位程式 直接壓棧 暫存器esp 從右到左
上乙個函式的返回值儲存在暫存器 rax 中
12.2檢視變數 info locals /i lo p $rsp 當前執行位址 p $rip 當前執行操作
12.3 檢視程式用到的終端模式 infor terminal
重定向輸出 out>fileout
指寫輸入輸出的終端裝置 tty 例 tty /dev/tty0
12.4 檢視當前所有程序 info inferiors 進入乙個程序 inferiors
13.列印資訊 print/p 例:p reselt 或者p/s reselt (字串列印) p/d reselt(十進位制列印) p/i reselt(**列印)
檢視陣列中的十個元素 p *a@10
14.立即跳出迴圈 until/u
15.指定符號表 symbol-file hello.symbol
16.設定程式執行路徑 path
show paths 檢視程式執行路徑
set follow-fork-mode parent/chile 設定接下來進入子程序還是父程序
set detach-on-fork on/off 接下來建立的建立的子程序和當前父程序全部卡住
info inferiors 檢視所有程序資訊
detach inferiors 編號 釋放乙個程序的卡住
thread thread-編號 切換到某個執行緒
info threads 檢視所有執行緒
set printf thread-events 設定執行緒是否列印資訊
set scheduler-locking off/on/step 除當前執行緒:off不阻止所有執行緒 on所有執行緒鎖定 step 同步除錯
1.檢視檔案是否存在符號表: readelf -s/-s hello.gcc
2.剝離符號表操作: objcopy --only-keep-debug hello.gcc hello.debug
2.生成release程式操作: objcopy --strip-debug hello.gcc hello.release //可通過(strip hello.release)再次剝離
3.gdb除錯
加殼 / 加花 (upx壓縮殼 很low)
模糊頭方法
GDB 多文件除錯設定及常用除錯命令
1.多文件除錯設定 以前用gdb除錯都只是除錯單個的檔案,在做dhcp二級relay的時候需要對整個工程進行gdb除錯,發現自己竟然不會!現在終於惡補上了,發到部落格上與大家分享。載入可執行檔案進行gdb除錯。gdb demo 在main函式中斷點位置設定在分包函式這 b dhcrelay.c 36...
GDB常用除錯命令
呼叫gdb編譯需要在cc後面加 g引數再加 o root redhat home gdb 除錯檔案 啟動gdb gdb l 字母l 從第一行開始列出原始碼 gdb break n 在第n行處設定斷點 gdb break func 在函式func 的入口處設定斷點 gdb info break 檢視斷...
gdb常用除錯命令
將.c檔案程式設計成包含標準除錯資訊的檔案 命令 gcc g c o 1 啟動gdb除錯程式 兩種方式 a gdb filename b 啟動gdb後,使用file filename 2 list l 檢視程式 方便設定斷點 3 break b 函式名 在某函式入口處新增斷點 4 break 行號 ...