下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
helloworld解析執(zhí)?過程開篇學(xué)習(xí)任何?門編程語?,都會從helloworld開始。對于?門從未接觸過的語?,在短時間內(nèi)我們都能?這種語?寫出它的helloworld。這篇?章將簡單的討論程序的運?機制開發(fā)平臺隱藏的過程每?種語?都有??的開發(fā)平臺,我們的程序?多是也都是在這?誕?的。從程序源代碼到可執(zhí)??件的轉(zhuǎn)化過程其實是分很多步?且是很復(fù)雜的,只是?現(xiàn)在的開發(fā)平臺把所有的這些事情都??承擔了,給我們帶來?便的同時她也影藏了?量的實現(xiàn)細節(jié)。所以?多程序員只負責編寫代碼,其它的復(fù)雜的轉(zhuǎn)換?作則由開發(fā)平臺默默完成。3裝載進?內(nèi)存,運??件howtosloveit》??對這種?法也有敘述。在解題的時候可以通過增加中間層來簡化問題)那么從源代碼到可執(zhí)??件的過程可以這樣理解。從源代碼到可執(zhí)??件也是?樣的,通過(不斷的)在他們之間增加中間層,來解決問題。和上?說的,,再把中間?件轉(zhuǎn)化為我們需要的?標?件。在處理?件的時候就是按照這種思路來的。更專業(yè)的說法是:?標?件。她不是可執(zhí)?程序,需要和其它的?標?件進?鏈接、裝載后才能執(zhí)?。對于?個源程序,開發(fā)平臺?先要做的就是把源程序翻譯成機器語?。其中很重要的?部就是編譯。相信很多?都知道,就是把源代碼翻譯成機器語?(其實就是?堆?進制代碼)。編譯知識很重google。?標?件格式:現(xiàn)在來看?下上?說的?標?件是如何組織的(也就是存放結(jié)構(gòu))。起源:想象?下如果是你來設(shè)計會如何組織這些?進制代碼?就像書桌上的物品要分類放置才整潔?樣,為了便于管理翻譯出來的?進制代碼也分類存放,把表?代碼segment)的東西。標準:COFFcommonobjectfileformatwindowsLinuxCOFF?同?異,都可以認為是它的變種。a.out:a.outa.out的?件。google。:上圖是?標?件的典型結(jié)構(gòu),實際的情況可能會有所差別,但都是在這個基礎(chǔ)上衍?出來的。ELF?件頭:即上圖中的第?個段。其中的header是?標?件的頭部,??包含了這個?標?件的?些基本信息。如該?件的版本、?標機器型號、程序??地址等等。重定位段包括了?本重定位和數(shù)據(jù)重定位,??包含了重定位信息。?般來說,代碼中都會存在引?了外部的函數(shù),或者變量的情況。既然是引?,那么這些函數(shù)、變量并沒存在該?標?件內(nèi)。在使?他們的時候,就要給出他們的實際地址(這個過程發(fā)?在鏈接的時候)。正是這些重定位表,提供了尋找這些實際地址的信息。理解了上?之后,?本重定位和數(shù)據(jù)重定位也就不難理解了。符號表:符號表包含了源代碼中所有的符號信息?!皊tudent”這個符號,對應(yīng)的在符號表中就包括這個符號的信息。包括這個符號所在的段、它的屬性(讀寫權(quán)限)等相關(guān)信息。其實符號表最初的來源可以說是在編譯的詞法分析階段。在做詞法分析的時候,就把代碼中的每個符號及其屬性都記錄在符號表中。字符串表:和符號表差不多的功能,存放了?些字符串信息?,F(xiàn)實中的?標?件會?這個模型要復(fù)雜些,但是它的思路都是?樣的,就是按照類型來存儲,再加上?些描述?標?件信息的段和鏈接中需要的信息。{}gcchello.ca.out。a.outvima.out是何等東西,怎能這么簡單就暴露出來呢vim“"objdump。有了它,我們就能徹底的去了解?readelf也很有?,這個在后?介紹。LinuxgoogleLinuxGCCObjdumpreadelfLinux的童鞋ubuntu~a.out的組織結(jié)構(gòu):(每段的起始地址、、??等等)查看?標?件的命令是objdump-ha.out就和上?中描述的?標?件的格式?樣,可以看出是分類存儲的。?標?件被分為了6段。從左到右,第?列(IdxName)是段的名字,第?列(Size)是??,VMA為虛擬地址,LMA為物理地址,F(xiàn)ileoff是?件內(nèi)的偏移。也就是這段相對于段中某?參考(?般是段起始)的距離。最后的Algn是對段屬性的說明,暫時不?理會段:代碼段。段:也就是上?說的數(shù)據(jù)段,保存了源代碼中的數(shù)據(jù),?般是以初始化的數(shù)據(jù)。這?的?標?件格式只是列出實際情況中主要部分。實際情況還有?些表未列出。如果你也在?Linux,可以?objdump-X列出更詳細的段“comment”GCC編譯器,后?的是版本號。a.out,再研究?下他的匯編形式是恨必要的objdump-da.outmainmainmain函數(shù)執(zhí)?以后都還有多?作要做。即初始化函數(shù)執(zhí)?環(huán)境以及釋放函數(shù)占?的空間等。上?的圖中,左邊是代碼的?六進制形式,左邊是匯編形式。對匯編熟悉的童鞋應(yīng)該能看懂?部分,這?就不在多述。在介紹?標?件格式的時候,提到過頭?件這個概念,??包含了這個?標?件的?些基本信息。如該?件的版本、?標機器型號、程序??地址等等。下圖是?件頭的形式:d圖中分為兩欄,左邊?欄表?的是屬性,右邊是屬性值。第??常被稱為魔數(shù)。后?是?連串的數(shù)字,其中的具體含義就不多說了,可以??去google。上?是內(nèi)容?具體的實例說了?標?件內(nèi)部的組織形式,?標?件只是產(chǎn)?可執(zhí)??件過程中的?個中間過程,對于程序是如何運?的還沒做討論,?標?件是如何轉(zhuǎn)變?yōu)榭蓤?zhí)??件以及可執(zhí)??件是如何執(zhí)?的將在下?的部分中討論鏈接通俗的說就是把?個可執(zhí)??件。合并成?個?件的過程就是鏈接了。有專門的過程?來鏈接程序,稱為鏈接器。他將?些輸?的?標?件加?后合成?個輸出?件。這些?標?件中往往有相互的數(shù)據(jù)、函數(shù)引?。helloworld的反匯編形式,是?個還沒有經(jīng)過鏈接的?件,也就是說當引?外部函數(shù)的時候是不知道其地址的:如下圖:calprintf()printf()“ffffff”來表?它的地址。等經(jīng)過鏈接以后,這個地址就會變?yōu)楹瘮?shù)的實際地址,應(yīng)為連接后這個函數(shù)已經(jīng)被加載進?這個?件中了。鏈接的分類:相關(guān)的數(shù)據(jù)或函數(shù)合并為?個?件的先后可以把鏈接分為靜態(tài)鏈接和動態(tài)鏈接。靜態(tài)鏈接:AB都需要?到某個庫函數(shù),同時執(zhí)?時,內(nèi)存中就存在該庫函數(shù)的兩份拷貝,這?疑浪費了存儲空間。當規(guī)模擴?的時候,這種浪費尤為明顯。靜態(tài)鏈接還有不容易升級等缺點。為了解決這些問題,現(xiàn)在的很多程序都?動態(tài)鏈接。動態(tài)鏈接:和靜態(tài)鏈接不?樣,動態(tài)鏈接是在程序執(zhí)?的時候才進?鏈接。也就是當程序加載執(zhí)?的時候。還是上?的例?,如果都?到了庫函數(shù)Fun()Fun()的?個拷貝。關(guān)于鏈接還有很多知識,以后會?專門的?章來談。這?就不展開講了。我們知道,程序要運?是必然要把程序加載到內(nèi)存中的。在過去的機器?都是把整個程序都加載進?物理內(nèi)存中,現(xiàn)在?般都采?了虛擬存儲機制,即每個進程都有完整的地址空間,給?的感覺好像每個進程都能使?完成的內(nèi)存。然后由?個內(nèi)存管理器把虛擬地址映射到實際的物理內(nèi)存地址。按照上?的敘述,程序的地址可以分為虛擬地址和實際地址。虛擬地址即她在她的虛擬內(nèi)存空間中的地址,物理地址就是她被加載的實際地址。在上?中查看段0.加載的過程可以這樣理解:先為程序中的各部分分配好虛擬地址,然后再建?虛擬地址到物理地址的映射。其實關(guān)鍵的部分就是虛擬地址到物理地址的映射過cpupc就指向?件中的代碼起始位置,然后程序就按順序執(zhí)?。從源代碼到可執(zhí)??件通
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鹽城電鍍涂裝施工方案
- 鋪設(shè)混凝土方磚施工方案
- 瀝青混凝土改裝方案
- 藥店展柜定制方案
- 市政工地用電施工方案
- 箱變通風除濕施工方案
- 2024-2025年中國單脈沖系統(tǒng)設(shè)備行業(yè)市場深度分析及發(fā)展前景預(yù)測報告
- 增塑劑項目立項申請報告
- 建筑模板運輸保證書
- 航空城石子運輸合同樣本
- 項目七電子商務(wù)消費者權(quán)益保護的法律法規(guī)
- 品質(zhì)經(jīng)理工作總結(jié)
- 供電搶修述職報告
- 集成電路設(shè)計工藝節(jié)點演進趨勢
- 新型電力系統(tǒng)簡介演示
- 特種設(shè)備行業(yè)團隊建設(shè)工作方案
- 眼內(nèi)炎患者護理查房課件
- 肯德基經(jīng)營策略分析報告總結(jié)
- 買賣合同簽訂和履行風險控制
- 中央空調(diào)現(xiàn)場施工技術(shù)總結(jié)(附圖)
- 水質(zhì)-濁度的測定原始記錄
評論
0/150
提交評論