国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > ASM > 正文

計算機(jī)是如何工作的?--通過匯編一個簡單的C程序,分析匯編代碼理解計算機(jī)是如何工作的

2019-11-08 18:24:51
字體:
供稿:網(wǎng)友

王雪 原創(chuàng)作品轉(zhuǎn)載請注明出處 《linux內(nèi)核分析》MOOC課程 http://mooc.study.163.com/course/USTC-1000029000

一、理論基礎(chǔ) (1)馮諾依曼體系結(jié)構(gòu):存儲程序計算機(jī)的工作模型 這里寫圖片描述 從硬件角度看程序的執(zhí)行過程:其中ip(instruction pointer)為CPU中的寄存器,指向內(nèi)存中的某一塊,CPU執(zhí)行指令時,會從IP中取出一條指令后執(zhí)行,執(zhí)行過后,IP自加一(增加一個指令的長度),取下一條指令執(zhí)行。 從程序員的角度看: CPU是一個大的for循環(huán),不停地執(zhí)行next instruction命令,存儲器主要負(fù)責(zé)數(shù)據(jù)和代碼等信息的存儲,CPU與Main Memory通過總線進(jìn)行連接。 注意: 1.程序員不可以直接修改IP的值,只能通過一些指令,如CALL、RET、JMP等間接修改IP的值 2.IP在32位機(jī)器中表示為eip(本次實驗以32位作為分析),在64位機(jī)器中表示為rip。 (2)x86匯編基礎(chǔ)知識(32位機(jī)器) 一.寄存器:在x86體系中,寄存器可分為通用寄存器、段寄存器、標(biāo)志寄存器 1通用寄存器: EAX:累加器 EBX:基地址寄存器 ECX:計數(shù)寄存器 EDX:數(shù)據(jù)寄存器 EBP:堆棧基指針 ESI,EDI:變址寄存器 ESP:堆棧頂指針 2.段寄存器:CS,DS,ES,SS,FS,GS 3.標(biāo)志寄存器 CPU在實際取指令時根據(jù)CS:eip來準(zhǔn)確確定某一個指令在內(nèi)存中的地址。 二:匯編指令(以常見的MOV,PUSH,POP,CALL等進(jìn)行說明) (1)MOV指令及尋址方式 1.MOV指令,能實現(xiàn)以下操作: ① CPU內(nèi)部寄存器之間數(shù)據(jù)的任意傳送(除了碼段寄存器CS和指令指針I(yè)P以外)。 ② 立即數(shù)傳送至CPU內(nèi)部的通用寄存器組(即AX、BX、CX、DX、BP、SP、SI、DI),給這些寄存器賦初值。 ③ CPU內(nèi)部寄存器(除了CS和IP以外)與存儲器(所有尋址方式)之間的數(shù)據(jù)傳送,可以實現(xiàn)一個字節(jié)或一個字的傳送。 ④ 能實現(xiàn)用立即數(shù)給存儲單元賦初值。 movb,movl,movw,movq分別針對8位,16位,32位,64位系統(tǒng) (2)pushl和pop指令,pushl用于入棧(棧的擴(kuò)張),pop用于出棧(棧的收縮) 棧是向下生長的,也就是說棧底位于高地址,棧頂位于低地址,用ebp指向棧底,用esp指向棧頂。 入棧操作:pushl %eax完成的操作包括兩步

subl $4,%espmovl %eax,(%esp)

出棧操作:pop %eax完成的操作包括兩步

movl (%esp),%eaxaddl $4,%esp

(3)CALL主要用于函數(shù)調(diào)用 call 0x12345 完成的操作包括兩步

push %eipmovl %0x12345,%eip

(4)RET指令用于恢復(fù)操作,完成pop %eip操作 (5)enter和leave操作 enter 置為空棧,完成的操作包括兩步

pushl %ebpmovl %esp,%ebp

leave用于撤銷函數(shù)調(diào)用堆棧,完成的操作包括兩步

movl %ebp,%esppopl %ebp

注: (1)函數(shù)調(diào)用堆棧是由邏輯上多個堆棧疊加起來的(比如函數(shù)的嵌套) (2)函數(shù)的返回值默認(rèn)使用eax寄存器存儲返回給上一級函數(shù) (3)一定要注意的是eip不能由程序員直接修改,程序員想修改eip只能通過特殊指令間接修改。 2.尋址方式 (1)寄存器尋址(不訪問內(nèi)存) movl % eax,% edx <==>edx= eax,將eax中的值賦值給edx (2)立即尋址(不訪問內(nèi)存)用$表示立即數(shù) movl $ 0x1234,%edx <==>edx = 0x1234 (3)直接尋址 movl 0x123,%edx <==>edx = * (int32_t*)0x123 將內(nèi)存地址0x123所指向的內(nèi)存數(shù)據(jù)賦值給edx (4)間接尋址 movl (%ebx),%edx <==>edx = * (int32_t*)ebx (5)變址尋址 movl 4(%ebx),%edx <==>edx = * (int32_t*)(ebx+4) 二、通過實驗分析計算機(jī)是如何工作的 (1)實驗代碼與截圖 在實驗樓的linux終端下創(chuàng)建一個main.c文件(注意實驗樓的環(huán)境為64位) main.c中的內(nèi)容 利用指令(64位下生成32位的匯編文件)

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

這里寫圖片描述 進(jìn)入main.s匯編文件,去掉所有以.開始的代碼行(以.開始的代碼是連接時的輔助信息)得到純匯編代碼 這里寫圖片描述 可以看到剛才介紹過的指令操作。 (2)實驗分析——-對執(zhí)行過程的分析 與C語言類似,匯編代碼的入口也為main函數(shù) 初始時棧的狀態(tài) 這里寫圖片描述 進(jìn)入main函數(shù),執(zhí)行18行代碼

pushl %ebp

執(zhí)行后棧的狀態(tài) 這里寫圖片描述 0標(biāo)號下下存放ebp的內(nèi)容,esp指向標(biāo)號1處

movl %esp,%ebp

這里寫圖片描述 esp和ebp指向相同位置

subl $4,%esp

這里寫圖片描述

movl $8,(%esp)

這里寫圖片描述

call f

執(zhí)行call時實際執(zhí)行兩個動作,pushl %eip ; movl f ,%eip 此時eip指向第23行代碼 這里寫圖片描述 執(zhí)行后,eip指向f 跳轉(zhuǎn)到f中執(zhí)行:

pushl %ebpmovl %esp,%ebpsubl $4,%esp

這里寫圖片描述 在執(zhí)行過movl%esp,%ebp后,esp和ebp置于相同的標(biāo)號處(4) 執(zhí)行subl $4,%esp,esp向下移動到標(biāo)號5 這里寫圖片描述

movl 8(%ebp),%eaxmovl %eax,(%esp)

movl 8(%ebp),%eax 變址尋址,將ebp(此處為標(biāo)號4)加8(向上移動兩個標(biāo)號,也就是標(biāo)號2處)的值賦給eax,所以%eax = 8 movl %eax,(%esp),將eax的內(nèi)容也就是8賦值到esp下也就是標(biāo)號5處 這里寫圖片描述

call gleave

執(zhí)行call時實際執(zhí)行兩個動作,pushl %eip ; movl g,%eip 此時eip指向第15行代碼leave的位置,此時eip指向g跳轉(zhuǎn)到g中去執(zhí)行 這里寫圖片描述 在g中執(zhí)行:

pushl %ebpmovl %esp,%ebp

pushl %ebp同上,將esp向下移動,將ebp(標(biāo)號為4)壓棧 這里寫圖片描述 movl %esp,%ebp esp和ebp指向相同的位置 這里寫圖片描述

movl 8(%ebp),%eax

強(qiáng)ebp向上移動兩個標(biāo)號的值(也就是8)賦給eax

addl $57,%eaxpopl %ebpret

%eax中存放的值為8,addl操作,將eax的值與立即數(shù)57相加,結(jié)果為65,將65存回到eax popl %ebp,將ebp的值放回到ebp,執(zhí)行效果:ebp重新指向標(biāo)號為4的位置,同時esp減4 這里寫圖片描述 ret執(zhí)行popl %eip,也就是說esp向上移動指向5的標(biāo)號的位置,同時eip指向15行指令的位置(call的下一條指令) 這里寫圖片描述 回到f中執(zhí)行

leaveret

leave執(zhí)行兩條指令, movl %ebp,%esp popl %ebp 首先,將esp指向ebp相同的位置(也就是標(biāo)號4的位置),popl %ebp,將ebp出棧,此時ebp指回標(biāo)號1的位置,由于popl,esp向上移動 這里寫圖片描述

這里寫圖片描述 ret執(zhí)行popl %eip 由于popl,esp向上增加一個,指向標(biāo)號2,eip指向第23行代碼處 這里寫圖片描述 eip執(zhí)行第23行代碼,回到main處,執(zhí)行

addl $1,%eaxleaveret

eax此時的值為65,執(zhí)行addl,65+1 = 66,將66存回到eax。 函數(shù)返回值默認(rèn)使用eax來存儲 執(zhí)行l(wèi)eave,分為兩步, movl %ebp,%esp,將esp指向ebp的位置,popl %ebp,將ebp出棧(ebp指向0的位置),popl指令時esp向上移動,也就是說esp,ebp均指向標(biāo)號0的位置,棧回到main函數(shù)最初的狀態(tài)。 ret,return的是main函數(shù)之前的堆棧,此處由操作系統(tǒng)管理。 這里寫圖片描述 棧向下生長,向上還原,增增減減,將程序變?yōu)橹噶盍鳎瑥腃PU上流過。 此時,小程序執(zhí)行完成 三、實驗總結(jié)–對計算機(jī)如何工作的理解 1.計算機(jī)的基本原理是存儲程序和程序控制,預(yù)先要把指揮計算機(jī)如何進(jìn)行操作的指令序列(稱為程序)和原始數(shù)據(jù)通過輸入設(shè)備輸送到計算機(jī)內(nèi)存貯器中。每一條指令中明確規(guī)定了計算機(jī)從哪個地址取數(shù),進(jìn)行什么操作,然后送到什么地址去等步驟。 計算機(jī)在運行時,先從內(nèi)存中取出第一條指令,通過控制器的譯碼,按指令的要求,從存儲器中取出數(shù)據(jù)進(jìn)行指定的運算和邏輯操作等加工,然后再按地址把結(jié)果送到內(nèi)存中去。接下來,再取出第二條指令,在控制器的指揮下完成規(guī)定操作。依此進(jìn)行下去。直至遇到停止指令。簡單來說就是CPU負(fù)責(zé)處理和運算,存儲器負(fù)責(zé)保存指令和數(shù)據(jù)。通過操作系統(tǒng)得調(diào)度和安排,不停地進(jìn)行取址、譯碼、執(zhí)行的循環(huán)。 2.匯編代碼是什么? 計算機(jī)語言的發(fā)展過程從機(jī)器語言(計算機(jī)能直接識別的二進(jìn)制0和1的組合)->匯編語言(為了減輕使用機(jī)器語言編程的痛苦,人們進(jìn)行了一種有益的改進(jìn):用一些簡潔的英文字母、符號串來替代一個特定的指令的二進(jìn)制串,依賴于硬件)->高級語言(接近于數(shù)學(xué)語言或人的自然語言,同時又不依賴于計算機(jī)硬件,編出的程序能在所有機(jī)器上通用)。 我們編寫了一個小程序,比如上面實驗中寫到的main.c文件,編譯器執(zhí)行的過程,這里寫圖片描述 可執(zhí)行的二進(jìn)制文件是計算機(jī)“認(rèn)識”的文件,可以直接執(zhí)行。 3.以上便是我對這次實驗的總結(jié),計算機(jī)很“單純”,它可以執(zhí)行很多復(fù)雜的指令,但它也是被“告訴”要執(zhí)行什么,才會去執(zhí)行什么,通過對匯編語言的分析可以方便我們理解計算機(jī)處理的過程,了解計算機(jī)如何工作等等,這也會成為我今后學(xué)習(xí)的重點。感謝為我們辛苦準(zhǔn)備課程的老師!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
51成人精品网站| 黄色国产在线| 国产调教视频在线观看| 日本黄色免费网址| 在线观看av网站| 在线免费观看污| 天天干天天摸| 免费网站看黄yyy222| 九九热在线视频观看| 五月婷婷导航| 国产福利三区| 国产精品自产拍在线网站| 天天操天天操一操| 另类专区欧美| 亚洲成人电视网| 99免费视频| 91在线中文| 99在线免费观看| 在线黄色国产电影| 欧美日韩综合高清一区二区| 夜夜嗨yeyeh| 久久久久久91精品色婷婷| 国产又色又爽又黄刺激在线视频| 国产网红在线观看| www.亚洲视频| 中文字幕2019第三页| 中文字幕2020第一页| 狠狠干婷婷色| 亚洲尤物在线视频| 国产激情在线| 中文字幕免费在线视频| 青青在线视频| 精品国产高清a毛片无毒不卡| 精品176二区| 99视频免费| 久蕉依人在线视频| 日本一卡二卡四卡精品| 精灵使的剑舞无删减版在线观看| 天天操天天操一操| 欧美高清视频| 国产精品视频h| 麻豆精品永久免费视频| 国产黄色在线网站| 中文字幕日本在线| 国产网站观看9久| 国产精品㊣新片速递bt| 国产乱在线观看视频| 黄色电影网站在线观看| 狠狠插狠狠操| 国产无遮挡又黄又爽免费网站 | 久青青在线观看视频国产| 91欧洲在线视精品在亚洲| 国产精品爱久久久久久久小说| 中文字幕在线观看播放| 高清色视频在线观看| eeuss影院在线观看| 亚洲成人国产综合| 老司机精品视频一区二区| 欧美96在线| 国内精品不卡| 国产视频青青| 午夜在线视频播放| 欧美啪啪精品| 国产极品嫩模在线视频一区| 国产卡1卡2卡三卡在线| www.91在线播放| 亚洲综合在线不卡| 亚洲sss视频| 日本视频一二三区中文字幕| 日韩亚洲一区中文字幕| 亚洲成人福利| 国产永久av在线| 最近最好的中文字幕2019免费 | 国产中文伊人| 国产无遮挡又黄又爽免费网站 | 国产精品不卡一区二区三区在线观看| 中文字幕成人乱码在线电影| 国产成人夜间影院在线观看| 在线午夜视频| 天天操天天艹| 国产精品久久麻豆| 亚洲精品午夜级久久久久| 久草在线视频网| 国产成人亚洲综合小说区| 亚色视频在线观看| 国产精品视频一区二区免费不卡 | 最新国产在线精品91尤物| 国产午夜精品一区理论片| 伊人网在线视频| 丁香婷婷在线| 亚洲欧美精选| 精品99又大又爽又硬少妇毛片| 在线播放一区二区精品产| 国产三级自拍| 久久精品最新免费国产成人| 精品a在线观看| 国产三级在线免费观看| 老师我好爽再深一点的视频| 在线播放www| 国产高清在线观看| 国产精品偷乱一区二区三区 | 永久免费网站在线| 国产黄在线看| 国产精品视频一区二区久久 | 日本国产在线| 日本黄在线观看| 亚洲色婷婷综合开心网| 国产91久久久久蜜臀青青天草二| 中文字幕乱在线伦视频乱在线伦视频 | 亚洲网站视频在线观看| 99在线播放| 国产色a在线观看| 导航福利在线| 免费看的毛片| 国产中文字幕在线播放| 黄网在线免费| 国产精品一区二区婷婷| 激情丁香婷婷| 黄色三级视频在线观看| 免费精品国产自产拍观看| 日本三级视频网站| 青草av在线| 二人午夜免费观看在线视频| 丁香视频五月| 精品a在线观看| 狠狠色综合久久婷婷| 最新av中文字幕| 国产成人亚洲综合小说区| 精品一区二区三区免费站| 伊人影院在线播放| 国产在线黄色片| 精品51国产黑色丝袜高跟鞋| 亚洲男人的天堂成人| 激情视频国产| 在线观看精品视频一区二区三区| av在线你懂的| 国产人成在线观看| 香蕉视频在线观看www| 国产精品偷乱一区二区三区| 精品卡1卡2卡三卡免费网站| 狠狠操狠狠色| 四虎中文字幕| 国产91足控脚交在线观看| a视频免费看| 国产国语**毛片高清视频| 久色视频在线观看| 精品国产白色丝袜高跟鞋| 欧美日韩一区二区三区在线播放 | 男人天堂网在线观看| 国产三级免费观看| 成年网站免费入口在线观看| 亚洲欧美中文字幕在线观看| 国产精品久久精品牛牛影视| 久久久久久国产视频| 亚洲国产日韩在线人成电影| 国产精品区一区二| 国产永久在线观看| 狠狠操五月天| www.狠狠艹| 性欧美精品xxxx| 在线视频中文字幕第一页| 中文字幕网在线| 国产精品作爱| 国产区在线视频| 国产不卡视频| 精精国产xxxx视频在线中文版| 国产精品视频一区二区免费不卡| 中文字幕在线播放网址| 国产中文字幕网| 天天操天天曰| 黄色一级视频网站| 成在线人视频免费视频| 久久er视频| 成年黄网站在线观看免费| h网址在线观看| 青青久草在线| 国产美女福利在线| 午夜视频在线| 国产高清自拍视频在线观看| 精品国产二区三区| 日本h片在线观看| 国产中文字幕av| 最近免费中文字幕大全免费第三页| 国产麻豆麻豆| 国产精品美女一区二区视频| 国产精品白浆视频免费观看| 99久热re在线精彩视频| а√最新版在线天堂| 青青草视频在线免费观看| 不卡av免费观看| 五月婷婷在线视频| 精品免费视频一卡2卡三卡4卡不卡| 2020亚洲男人天堂| 欧美日韩视频精品二区| 国产午夜电影| 欧美黑人乱大交| 2021天堂中文幕一二区在线观| 欧美一级久久久久久久久大| 国产色在线播放| 日本天堂影院在线视频|