計算機是如何工作的———高級語言轉變為機器語言的過程
作者:20135304 劉世鵬
《Linux內核分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000 ”
實驗過程
寫入c語言代碼

執行gcc -S -o main.s main.c -m32指令后得到匯編代碼

刪除以“.”開頭的附加項后得到純凈的匯編代碼

分析過程
得到純凈的匯編代碼之后對其工作過程進行分析
前幾步較為簡單,ebp和esp所指向數值的箭頭顏色與右邊代碼外框的顏色對應
值得強調的是在main函數執行到“call f”指令后,eip指向“f函數”,代碼的執行進入f函數,

在f函數中,eax計算器存儲“5304”這一數值

“call g ”指令將eip指向“g 函數”,開始執行g函數的指令。
在g函數中,eax修改5307為存儲值

pop %ebp指令將ebp指向4,esp上移一位


ret指令退出“g函數”,進入離開“f函數”的位置,esp上移一位

執行f函數的leave指令,將ebp的值賦值給esp,隨后將ebp的值指向1,隨后esp上移一位

退出f函數,執行離開main函數后的代碼,修改eax為5308

繼續執行leave和ret指令,使得esp和ebp最后恢復初始狀態。整個過程結束。
實驗體會
在上學習信息安全系統中的“緩沖區溢出”實驗中對匯編代碼的執行過程已有了初步了解,經過這學期的課程,讓我對以前感到模糊的概念有了清晰的認識,課程視頻時間雖然不長,但講解的很透徹,讓我們學會匯編代碼工作的核心思想。對計算機的工作原理有了更深的認識。可能是之前匯編學習不夠扎實,在視頻分析過程中沒能一次理解的知識點就反復看視頻理清思路,最終學有所得。
