Linux內核分析——簡單分析彙編代碼

一、實驗過程:

實驗內容爲通過彙編一個簡單的C程序,分析彙編代碼理解計算機是如何工作的。

1.進入linux實驗環境,打開一個終端。
這裏寫圖片描述
2.打開Code文件下的shiyanlou_cs195文件夾,vi mian.c文件。
這裏寫圖片描述
3.輸入命令gcc -S -o main.c mian.s -m32得到main.s文件。
這裏寫圖片描述
4.刪除以點開頭的行,得到最終的main.s。
這裏寫圖片描述

二、分析彙編代碼的工作工程。

1.首先理解ebp是指向棧底的,esp指向當前棧執行的一條指令,eip指向當前程序按順序執行的指令,eax存儲上一級函數的返回值。

2.剛開始從main函數開始執行前四條指令,只要作用讓棧中0的位置爲ebp 0,棧1的位置存放8.

3.執行call f時此時棧2的位置放的是eip 23.即當前的下一條指令也就會到f函數完成後回溯到接下來的第23行指令。

4.接下來eip指向f函數的第一行指令,f的前5行指令作用是棧3的位置存放ebp 1,eax的值爲8,棧4的位置存放eax 8。

5.執行call g時此時棧5的位置放的是eip 15.即當前的下一條指令也就會到g函數完成後回溯到接下來的第15行指令.

6.接下來eip指向g函數的第一行指令,g函數前兩行作用是讓棧6存放ebp 4,第三行和第四行指令作用是讓eax=8+4=12.

7.接下來g函數popl %ebp,將ebp指向之前4的位置,ret即pop eip的意思,將eip 15pop出來 讓eip指向之前f函數的15的位置。

8.leave即讓esp指向ebp的位置同時pop ebp,使ebp指向之前的1的位置,接下來的ret 即pop eip ,讓eip指向之前的main函數的23行的位置。

9.main的23行add 將eax的值變爲eax=12+2=14.最後的leave和ret讓ebp和esp都指向最初的底棧的位置。

三、理解計算機怎樣工作的。

1.彙編一個簡單的計算機的基本原理是存儲程序和程序控制。預先要把指揮計算機如何進行操作的指令序列(稱爲程序)和原始數據通過輸入設備輸送到計算機內存貯器 中。每一條指令中明確規定了計算機從哪個地址取數,進行什麼操作,然後送到什麼地址去等步驟。

2.計算機在運行時,先從內存中取出第一條指令,通過控制器的譯碼,按指令的要求,從存儲器取出數據進行的運算和邏輯操作等加工,然後再按地址把結果送到內存中去。接下來,再取出第二條,在控制器的指揮下完成規定操作。依次進行下去。直至遇到停止指令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章