1. 程式人生 > >gdb-pada調試實例

gdb-pada調試實例

res 強制 ima clas int sharp malloc 行程 ont

先編寫個簡單的hello的程序

hello.c  (ps:有沒有頭文件行不行,試試不就知道了)
 1 int main(){
 2     printf("hello!\n");
 3     int m,n;
 4     int array[5] = {1,2,3,4,5};
 5     fun1(m,n);
 6     printf("array[0] = %d\n",array[0]);
 7     printf("array[-1] = %d\n",array[-1]);
 8     printf("array[7] = %d\n",array[7]);
 9     printf("
%x\n"); 10 char *a,*b,*c,*d; 11 a = malloc(20); 12 a = malloc(20); 13 a = malloc(200); 14 a = malloc(0x21000); 15 free(a); 16 } 17 int fun1(int a,int b){ 18 a = 1; 19 b = 2; 20 return 0; 21 }

gcc編譯

技術分享圖片

雖然報了一些警告,但是不影響我們的輸入     -m32 生成32位的

 給a.out文件執行權限,運行一下程序

技術分享圖片

gcc編譯 加一些別的參數可以看到編譯過程的文件

技術分享圖片

編譯過程: c     預編譯    匯編   elf(可重定位文件)    .out 文件

技術分享圖片


objdump 可以查看匯編代碼

1 objdump -d hello

進入gdb

1 gdb ./hello
1 start   開始

技術分享圖片

disassemble  main    查看main函數匯編

技術分享圖片

1 info functions  查看程序的所有函數
1 l   查看代碼

技術分享圖片

1 c   運行

技術分享圖片

現在看看結果怎麽來的

l   查看代碼
tb   4   設置一次性斷點
run   運行

技術分享圖片

技術分享圖片

1 可以看到程序運行到第四行,準備執行數據入棧,我們先查看一下 ebp-0x20有什麽數據
x/10dw ebp-0x20

技術分享圖片

數據是看不懂的,繼續設置斷點運行程序

技術分享圖片

可以看到運行到了第6行,準備取array[0]的數據,地址是ebp-0x20,再看看數據

技術分享圖片

發現就是入棧的數據
0xffffd068:    1    2    3    4
0xffffd078:    5    982188544    -134519844    -12128
繼續執行程序,設置斷點
tb 7
c

技術分享圖片

 mov    eax, dword ptr [ebp - 0x24]    取出數值然後賦值給eax
查看  ebp - 0x24
x/10dw $ebp-0x24

技術分享圖片

依次所見  array[7] = -12128
最後執行完程序看看結果
c

技術分享圖片


gdb-peda調試命令

 1 break *0x400100 (b main):在 0x400100 處下斷點
 2 tb一次性斷點
 3 info b:查看斷點信息
 4 delete [number]:刪除斷點
 5 watch *(int *)0x08044530:在內存0x0804453處的數據改變時stop
 6 x /4xg $ebp:查看ebp開始的4個8字節內容(b:單字節,h:雙字節,w:四字節,g:八字節;x:十六進制,s:字符串輸出,i:反匯編,c:單字符)
 7 p $eax:輸出eax的內容
 8 set $eax=4:修改變量值
 9 c:繼續運行
10 r:重新開始運行
11 ni:單步步過
12 si:單步步入
13 fini:運行至函數剛結束處
14 return expression:將函數返回值指定為expression
15 bt:查看當前棧幀
16 info f:查看當前棧幀
17 context:查看運行上下文
18 stack:查看當前堆棧
19 call func:強制函數調用
20 ropgagdet:找common rop
21 vmmap:查看虛擬地址分布
22 shellcode:搜索,生成shellcode
23 ptype struct link_map:查看link_map定義
24 p &((struct link_map*)0)->l_info:查看l_info成員偏移

gdb-pada調試實例