buffer_overflow 第2章 筆記2 組合語言

來,馬上淺談組合語言之不給你喘息。

                                         ã€Œæ²’問題 少林足球」的圖片搜尋結果

首先,組合語言就2件事。

1.CPU。        //做運算

2.暫存器。    //用來存放數據



把CPU看成是你的大腦在做思考,暫存器則是每個手跟腳或器官,可以放不同東西。

例如:  

        左手現在有一隻掃把,右手則有一隻笨斗,光拿著是沒用的,想要掃地,就必須結合使用,靠我們的大腦思考要如何掃地。


上面的例子:

左手是一個暫存器           存放的數據是掃把

右手也是個暫存器           存放的數據是笨斗

左腳    暫存器                   一隻白鞋

右腳    暫存器                   一隻白鞋

CPU才是老大可以控制所有手跟腳,讓左手的掃把打人,也可以掃地,也可以穿白色鞋子邊走邊掃。


「沒問題 少林足球」的圖片搜尋結果

常見暫存器有哪些:

AX,BX, CX, DX    這四個暫存器基本上隨便用,可以存放任何數據。

接下來非常重要的指針暫存器,IP,BP,SP  。

指針熟悉C語言的都知道吧?    不知道別怕。。。

範例   

         宣告 int *ptr            //   ptr 是指針變數  

                  int  a=123        //    a變數的值是123

                  ptr=&a            // ptr變數指向a變數

只要是變數 都會有記憶體地址空間 ,該空間可以存放數據


假如   ptr變數的地址是0x4410       數據還未知(因為還沒指向)

           a變數的地址則是0x8761       數據為  123


當 ptr=&a時:


           ptr變數的地址是0x4410       數據為0x8761(a的地址)

           a變數的地址則是0x8761       數據為  123


    所以指針存放的數據會是一個記憶體位置

這三個指針暫存器 非常重要 

IP            // IP暫存器內的值  是一個地址 

BP           // BP暫存器內的值 是一個地址 

SP           // BP暫存器內的值 是一個地址     

 1. IP暫存器內的值是一個地址,此地址裡面的指令CPU接下      來會執行



 2. BP暫存器內的值是一個地址,此地址代表堆疊基底



 3. SP暫存器內的值是一個地址,此地址代表堆疊頂

BP到SP之間就是堆疊目前的高度


             

  目前到這裡先望文生義即可!!!

  我們要用現在所學的暫存器套用在上一節的    故事中 


  BP 就是 書籤

  SP 就是  筆記本用過的最後一頁

  假如書籤在筆記本第1頁,筆記本用到第11頁,這中間夾起來的頁數可以說是堆疊的高度。


前面講的故事有兩個主角 孔子 就是main 函數 白居易 則是 func自訂函數,接下來請看影片講解: main函數執行到func函數,再從func函數回到main函數的堆疊過程。



漏洞程式:

void func(char *str)
{
       char buffer[24];       
       int *ret;                      // 此行暫時沒用
       strcpy(buffer,str);     //把 func吃的參數 複製到buffer里    strcpy()是高危險                                                                                                                          //函數
     
}

int main(int argc, char **argv)
{
     int x;
      x=0;
     func(argv[1]);          //argv是主程式的參數   func函數需要這個參數
     x=1;
     printf("x is 1\n");
     printf("x is 0\n");
     system("pause");
}































留言

這個網誌中的熱門文章

buffer_overflow 第1章 筆記 介紹

Buffer_overflow 第2章 筆記1 函數堆疊的故事

buffer_overflow 第3章 筆記6 拼出我們第二個shellcode。