通過分析匯編代碼理解計算機是如何工作的

網(wǎng)易云課堂《Linux內(nèi)核分析》作業(yè)

實驗目的:

通過反匯編一個簡單的C程序,分析匯編代碼理解計算機是如何工作的

實驗過程:

登陸實驗樓虛擬機http://www.shiyanlou.com/courses/195

準備main.c源碼

main.c

打開終端shell苞氮,輸入以下命令:

gcc –S –o main.s main.c -m32

生成匯編代碼main.s

main.s.part1
main.s.part2
main.s.part3

精簡后的匯編代碼

main.s

實驗分析:

先看C語言代碼亡驰,該程序由3個函數(shù)組成泼疑,分別是main()导而、f()献雅、g()谤绳,實現(xiàn)了2+7+5的簡單數(shù)學計算占锯。

程序首先從main()開始,將數(shù)字2傳入f()缩筛,f()又將main()傳入的數(shù)字2原封不動的傳給g()消略,g()實現(xiàn)了將傳入2加5的操作,結(jié)果7返回給f()瞎抛,f()獲得7后直接返回給main()艺演,mian()將獲得的7加7后返回最終結(jié)果14.

理論上編譯后的匯編語言也應該實現(xiàn)上述功能,即計算2+5+7值桐臊。

下面我們來分析精簡后的匯編代碼:

左邊代碼行標表示eip胎撤,紅框表示當前運行的代碼,eax初始化為未知變量断凶,右邊藍色格子表示內(nèi)存段伤提,為簡化描述在32位環(huán)境下1個內(nèi)存單元格表示4byte,ebp和esp初始值均為0

程序從main開始

1

將ebp壓棧认烁,相當于執(zhí)行以下兩條語句:

subl $4, %esp //esp減4byte肿男,向下移動1格,此時esp指向1

movl %ebp, (%esp) //將ebp的值存入esp指向的存儲單元內(nèi)

2

將esp的值賦值給ebp却嗡,即ebp也指向1

3

將esp的值減4舶沛,即esp向下移動1格,此時esp指向2

4

將數(shù)字2存入esp指向的內(nèi)存塊

5

調(diào)用f稽穆,相當于執(zhí)行以下兩條語句:

pushl %eip

move f, %eip

6

call f執(zhí)行完后的狀態(tài)冠王,此時程序完成由main跳轉(zhuǎn)到f

7
8
9
10

該條指令將ebp-8的位置,即標號為2的內(nèi)存單元所存放的數(shù)字2賦值給eax舌镶,此時eax等于2

11
12

跳轉(zhuǎn)到g

13
14
15
16
17

將eax的值加5后再存入eax柱彻,此時eax等于7

18

出棧操作豪娜,相當于以下兩條語句:

movl (%esp), %ebp

addl $4, %esp

19

ret相當于執(zhí)行以下語句:

popl %eip

20

leave相當于執(zhí)行以下兩條語句:

movl %ebp, %esp

popl %ebp

g沒有l(wèi)eave指令語句的原因是它沒有再調(diào)用其他函數(shù)

21
22
23

將數(shù)字7累加到eax,此時eax等于14

24
25
26

至此整個程序完成了所有操作哟楷,結(jié)果存放在eax瘤载,即14為最終計算結(jié)果,與C語言代碼一致卖擅。

實驗總結(jié):

計算機有一套規(guī)則來控制程序運行鸣奔,在C語言和匯編語言中,CPU從程序main函數(shù)所在的內(nèi)存地址開始做取指操作惩阶,根據(jù)當前狀態(tài)和輸入計算出新值挎狸,并且進入一個新的狀態(tài),同時改變寄存器所存儲的數(shù)值断楷。

參考:計算機實際上是如何工作的

PS:由于超過了提交作業(yè)時間锨匆,本篇作業(yè)未參與評分

互評作業(yè):

作業(yè)1

作業(yè)2

作業(yè)3

作業(yè)4

作業(yè)5

作業(yè)6(該篇作業(yè)未完成,提交了無效鏈接)

作業(yè)7

作業(yè)8

作業(yè)9

作業(yè)10(QZONE)

作業(yè)12

作業(yè)13(未提供博客鏈接冬筒,僅給出精簡后的匯編代碼)

作業(yè)14

作業(yè)15(onedrive)

作業(yè)16

作業(yè)17

作業(yè)18

作業(yè)19

作業(yè)20

作業(yè)21(未提供博客鏈接恐锣,僅給出C源碼和精簡后的匯編代碼)

作業(yè)22(給個微博鏈接是要互粉嗎?)

作業(yè)23

作業(yè)24(QZONE)

作業(yè)25

作業(yè)26

作業(yè)27

作業(yè)28

作業(yè)29(QZONE需要密碼無法查看)

作業(yè)30

作業(yè)31

評分

aapu原創(chuàng)作品轉(zhuǎn)載請注明出處《Linux內(nèi)核分析》MOOC課

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舞痰,一起剝皮案震驚了整個濱河市土榴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌响牛,老刑警劉巖玷禽,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異娃善,居然都是意外死亡论衍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門聚磺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坯台,“玉大人,你說我怎么就攤上這事瘫寝⊙牙伲” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵焕阿,是天一觀的道長咪啡。 經(jīng)常有香客問我,道長暮屡,這世上最難降的妖魔是什么撤摸? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上准夷,老公的妹妹穿的比我還像新娘钥飞。我一直安慰自己,他們只是感情好衫嵌,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布读宙。 她就那樣靜靜地躺著,像睡著了一般楔绞。 火紅的嫁衣襯著肌膚如雪结闸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天酒朵,我揣著相機與錄音桦锄,去河邊找鬼。 笑死耻讽,一個胖子當著我的面吹牛察纯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播针肥,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼香伴!你這毒婦竟也來了慰枕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤即纲,失蹤者是張志新(化名)和其女友劉穎具帮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體低斋,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡蜂厅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了膊畴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掘猿。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖唇跨,靈堂內(nèi)的尸體忽然破棺而出稠通,到底是詐尸還是另有隱情,我是刑警寧澤买猖,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布改橘,位于F島的核電站,受9級特大地震影響玉控,放射性物質(zhì)發(fā)生泄漏飞主。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碌识。 院中可真熱鬧讽挟,春花似錦、人聲如沸丸冕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胖烛。三九已至眼姐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間佩番,已是汗流浹背众旗。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留趟畏,地道東北人贡歧。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像赋秀,于是被迫代替她去往敵國和親利朵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容