GDB除錯指令

noahze發表於2024-03-31

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> |$esp

例如: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

相關文章