使用GDB執行CS IP指向的記憶體單元處的指令

2021-10-03 15:34:27 字數 832 閱讀 3614

使用gdb執行cs:ip指向的記憶體單元處的指令

#include void fun (int x)

int main (void)

(gdb) n

13 fun (i--);

(gdb)

14 fun (i--);

(gdb)

15 fun (i--);

(gdb)

error

17 return 0;

看起來是在15行,呼叫fun的時候出錯了。常見的辦法是在15行設定個斷點,然後從頭run一次。

如果你的環境支援反向執行,那麼更好了。

如果不支援,你也可以直接jump到15行,再執行一次:

(gdb) b 15

breakpoint 2 at 0x40056a: file jump.c, line 15.

(gdb) j 15

continuing at 0x40056a.

breakpoint 2, main () at jump.c:15

15 fun (i--);

(gdb) s

fun (x=-2) at jump.c:5

5 if (x < 0)

(gdb) n

6 puts ("error");

需要注意的是

jump命令只改變pc的值,所以改變程式執行可能會出現不同的結果,比如變數i的值

通過(臨時)斷點的配合,可以讓你的程式跳到指定的位置,並停下來

使用readlink讀取鏈結檔案指向的內容

有時我們需要讀取鏈結檔案指向的內容,比如,給定乙個程序的fd,我們想知道這個fd具體是什麼東西,那麼,就可以在 proc fd目錄下看到該fd指向的內容,只不過這個目錄下該fd是乙個鏈結檔案,我們需要的是該檔案指向的內容。此時就可以用readlink這個system call,具體用法很簡單,比如 ...

GDB 使用 (七)改變程式的執行

改變程式的執行 一旦使用gdb掛上被除錯程式,當程式執行起來後,你可以根據自己的除錯思路來動態地在gdb中更改當前被除錯程式的執行線路或是其變數的值,這個強大的功能能夠讓你更好的除錯你的程式,比如,你可以在程式的一次執行中走遍程式的所有分支。一 修改變數值 修改被除錯程式執行時的變數值,在gdb中很...

使用gdb除錯當前執行的程式

用gdb可以除錯當前的程式的使用情況,讀出他的引數。以下用乙個簡單的程式做為例子 來說明gdb的除錯。第一步 編譯乙個死迴圈程式。file name malloc.c include include include void getmem void p,int num void test void ...