一、GDB調試工具的原理
1.1 未執行進程調試
啟用gdb調試運行gdb ./test的時候,在操作系統里發生了很多復雜的事情,系統首先會啟動gdb進程,這個進程會調用系統函數fork()來創建一個子進程,這個子進程做兩件事情:
?調用系統函數ptrace(PTRACE_TRACEME,[其他參數]);
?通過exec來加載、執行可執行程序test,那么test程序就在這個子進程中開始執行了。
1.2 執行中進程調試
如果想對一個已經執行的進程進行調試,那么就要在gdb這個父進程中調用ptrace(PTRACE_ATTACH,[其他參數]),此時,gdb進程會attach(綁定)到已經執行的進程B,gdb把進程B收養成為自己的子進程,而子進程B的行為等同于它進行了一次 PTRACE_TRACEME操作。
此時gdb進程會發送SIGSTO信號給子進程B,子進程B接收到SIGSTOP信號后,就會暫停執行進入TASK_STOPED狀態,表示自己準備好被調試了。
1.3 gdb系統調用原型介紹
#include < sys/ptrace.h >
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
ptrace系統函數是Linux內核提供的一個用于進程跟蹤的系統調用,通過它,一個進程(gdb)可以讀寫另外一個進程(test)的指令空間、數據空間、堆棧和寄存器的值。
而且gdb進程接管了test進程的所有信號,也就是說系統向test進程發送的所有信號,都被gdb進程接收到,這樣一來,test進程的執行就被gdb控制了,從而達到調試的目的。
下面對各個參數進行解釋:
- ** enum __ptrace_request request:** 是一個枚舉類型,用于指定要執行的操作類型。這個參數告訴** ptrace** 函數將要對進程進行何種跟蹤操作,例如讀取寄存器、寫型,其定義了一系列跟蹤請求類型的常量。例如,**PTRACE_ATTACH **表示附加到一個新進程,PTRACE_GETREGS 表示獲取寄存器值。request的主要類型如下:
PTRACE_TRACEME:用于將當前進程標記為被跟蹤的目標。調用進程使用這個類型請求后,它的父進程可以使用 PTRACE_ATTACH 來附加到它,對其進行調試和跟蹤。
PTRACE_ATTACH:用于將一個進程附加到另一個進程上進行調試和跟蹤。調試器進程可以使用這個類型請求,通過指定目標進程ID來附加到目標進程。
PTRACE_DETACH:用于從一個已經被附加和調試的進程上分離調試器。這個請求會停止對目標進程的跟蹤,并將其恢復為正常運行狀態。
PTRACE_PEEKDATA:用于從目標進程的內存中讀取數據??梢允褂迷撜埱髞碜x取目標進程的內存值,例如寄存器、棧幀等。
PTRACE_POKEDATA:用于向目標進程的內存中寫入數據??梢允褂迷撜埱髞硇薷哪繕诉M程的內存值,例如修改寄存器、改變變量值等。
PTRACE_GETREGS:用于獲取目標進程的寄存器值。通過這個請求,可以獲得目標進程的 CPU 寄存器的當前值,用于調試和跟蹤。
PTRACE_SETREGS:用于設置目標進程的寄存器值。通過這個請求,可以將特定的寄存器值設置為目標進程中的特定值。
PTRACE_CONT:用于繼續執行已附加的目標進程。調試器進程可以使用這個請求來繼續目標進程的執行,直到下一個斷點或者其他事件觸發。
2. pid_t pid: 是一個整數類型,表示要操作的目標進程的進程ID(PID)。pid指定了要對哪個進程進行跟蹤操作,可以是當前進程、正在運行的其他進程或子進程等。
3. void addr: 是一個指針類型,用于指定內存地址,具體用途根據不同的request *參數而定。例如,對于一些讀寫內存的請求,addr指定了要讀取或寫入的內存地址。
4. void data: 是一個指針類型,用于傳遞數據,具體用途也根據不同的request *參數而定。對于一些讀寫內存或寄存器的請求,data指定了要讀取或寫入的數據存儲位置。
ptrace函數返回一個long類型值,表示操作的結果或錯誤碼。通常情況下,返回值大于等于0表示成功,小于0表示發生錯誤。
如果沒有gdb調試,操作系統與目標進程之間是直接交互的;如果使用gdb來調試程序,那么操作系統發送給目標進程的信號就會被gdb截獲,gdb根據信號的屬性來決定:在繼續運行目標程序時是否把當前截獲的信號轉交給目標程序,如此一來,目標程序就在gdb發來的信號指揮下進行相應的動作。
-
寄存器
+關注
關注
31文章
5363瀏覽量
121155 -
調試工具
+關注
關注
1文章
49瀏覽量
12662 -
gdb
+關注
關注
0文章
60瀏覽量
13346
發布評論請先 登錄
相關推薦
評論