GDB
流程控制
命令功能 | 命令 | 簡寫 |
---|---|---|
重新執行除錯的程式 | run | r |
繼續執行 | continue | c |
執行下一步 | next | n |
執行N次下一步 | next N | n N |
執行上次執行的命令 | [Enter] | |
單步進入 | step | s |
執行完當前函式返回到呼叫它的函式 | finish | f |
指定程式直到退出當前迴圈體 | until | u |
強制返回當前函式將會忽略當前函式還沒有執行完畢的語句,強制返回。 return後面可以接一個表示式,表示式的返回值就是函式的返回值。 |
return | |
在當前的檔案中某一行(假設為6)設定斷點 | break 6 | b |
類似於`run,停在main函式的開始 | start |
斷點設定
- break 函式名或者 * 0x地址
PIE保護下斷點
b *$rebase(0x地址)
列印Print
命令功能 | 命令 | 簡寫 |
---|---|---|
列印變數的值 | print var | |
列印變數的地址 | print &var | |
print /x var |
print /x var中x的含義 | print /x var中x的選擇 |
---|---|
按十六進位制格式顯示變數 | x |
按十進位制格式顯示變數 | d |
按十六進位制格式顯示無符號整型 | u |
按八進位制格式顯示變數 | o |
按二進位制格式顯示變數 | t |
按十六進位制格式顯示變數 | a |
按字元格式顯示變數 | c |
按浮點數格式顯示變數 | f |
記憶體顯示
x /<n/f/u>
例如:x /10dw arr
n 顯示的長度
f 表示顯示的格式 | f的選擇 |
---|---|
按十六進位制格式顯示變數 | x |
按十進位制格式顯示變數 | d |
按十六進位制格式顯示無符號整型 | u |
按八進位制格式顯示變數 | o |
按二進位制格式顯示變數 | t |
按十六進位制格式顯示變數 | a |
按字元格式顯示變數 | c |
按浮點數格式顯示變數 | f |
u 表示的位元組方式 | u的選擇 |
---|---|
表示單位元組 | b |
表示雙位元組 | h |
表示四位元組 | w |
表示八位元組 | g |
其他
x/s addr 檢視addr處的字串
x/b addr 檢視addr處的字元
x/i addr 檢視addr處的反彙編結果
x/10wx
x/10gx
檢視暫存器
- i r [a]|[eax]
修改暫存器
- set $eax=0x11
修改地址內容
無符號 | 修改位元組數 |
---|---|
set {unsigned char}地址 =值 | 一個位元組 |
set {unsigned short}地址 =值 | 兩個位元組 |
set {unsigned int}地址 =值 | 四個位元組 |
set {unsigned long long}地址 =值 | 八個位元組 |
有符號 | 修改位元組數 |
---|---|
set {char}地址 =值 | 一個位元組 |
set {short}地址 =值 | 兩個位元組 |
set {int}地址 =值 | 四個位元組 |
set {long long}地址 =值 | 八個位元組 |
- 或者set (型別)
=
除錯技巧
方案一
啟動程式之後,再用gdb除錯
gdb attch
python中pause()進行中斷
方案二
在python中gdb.attach(p,'command') 如:gdb.attach(p,'b *地址')
堆相關指令
檢視分配的堆 | heap [-h] [-v] [-s] [addr] (chunk頭開始) |
檢視各種bins | bins [addr] |
16進位制檢視 | hexdump 地址 顯示的位元組數 |
檢視各個bins的情況 | heapinfo (常用) |
檢視堆的基地址 | heapbase |
檢視使用者使用的堆的使用情況 | parseheap (chunk頭開始)(par簡寫)(常用) |
檢視chunks記憶體 | vis_heap_chunks |
查詢fake_chunks | find_fake_fast &main_arena |
檢視棧資訊
含義 | 指令 |
---|---|
列印當前函式引數和對應值 | info args |
列印當前函式區域性變數和對應值 | info locals |
列印詳細的棧資訊,主要以程式的虛擬地址資訊為主 | info frame |
向棧的下面移動n層 | down [n] |
向棧的上面移動n層 | up [n] |
列印當前呼叫棧的資訊,n可正可負。 表示只列印棧頂上n層的棧資訊或棧底n層資訊。 |
backtrace [n] |
其他指令
指令含義 | 指令 | 簡寫 |
---|---|---|
顯示當前gdb斷點資訊 | info breakpoints | info b |
反彙編該函式或地址 | disassemble 函式名或地址 | disass |
用棧的方式檢視 | telescope 地址 | tele |
檢視區段 | vmmap | |
搜尋字串 | searchmem 字串 | |
檢視子命令幫助 | help x | |
轉換為intel格式 | set disassembly-flavor intel | |
轉換為att格式 | set disassembly-flavor att | |
檢視符號地址 | info address 符號 | |
檢視puts的got表地址 | info address puts@got.plt | |
檢視libc中system函式地址 | info address system | |
檢視記憶體對映 | info proc mappings |