出版時(shí)間:2009-9 出版社:北京航空航天大學(xué)出版社 作者:John R.Levine 頁(yè)數(shù):184 譯者:李勇
Tag標(biāo)簽:無(wú)
前言
幾乎從有計(jì)算機(jī)以來(lái),鏈接器和加栽器就是軟件開(kāi)發(fā)工具包中的一部分,因?yàn)樗鼈冊(cè)试S使用模塊(而不是一個(gè)單獨(dú)的大文件)來(lái)構(gòu)建程序的關(guān)鍵工具?! ≡缭?947年,程序員們就開(kāi)始使用原始的加載器:將程序的例程存儲(chǔ)在多個(gè)不同的磁帶上,并將它們合并、重定位為一個(gè)程序。在20世紀(jì)60年代早期,這些加栽器就已經(jīng)發(fā)展得相當(dāng)完善了。由于那時(shí)內(nèi)存很貴且容量有限,計(jì)算機(jī)的速度很慢(以今天的標(biāo)準(zhǔn)),為了創(chuàng)建復(fù)雜的內(nèi)存覆蓋策略(以將大容量的程序加載到小容量?jī)?nèi)存中),以及重新編輯先前鏈接過(guò)的文件(以節(jié)省重新創(chuàng)建程序的時(shí)間),這些鏈接器都包含了很多復(fù)雜的特性。 20世紀(jì)七八十年代,鏈接技術(shù)幾乎沒(méi)有什么進(jìn)展。鏈接器趨向于更加簡(jiǎn)單,虛擬內(nèi)存技術(shù)將應(yīng)用程序和覆蓋機(jī)制中的大多數(shù)存儲(chǔ)管理工作都轉(zhuǎn)移給了操作系統(tǒng),越來(lái)越快的計(jì)算機(jī)和越來(lái)越大的磁盤也使得重新鏈接一個(gè)程序或替換個(gè)別模塊比僅僅鏈接改變過(guò)的地方更加容易了。從20世紀(jì)90年代起,鏈接器又開(kāi)始變得復(fù)雜起來(lái),增加了諸多現(xiàn)代特性,包括對(duì)動(dòng)態(tài)鏈接共享庫(kù)的支持和對(duì)C++獨(dú)特要求的支持。同時(shí),像IA64那樣具有寬指令字和編譯時(shí)訪存調(diào)度特性的先進(jìn)處理器架構(gòu),也需要將一些新的特性加入到鏈接器中,以確保在被鏈接的程序中可以滿足代碼的這些復(fù)雜需求。
內(nèi)容概要
本書(shū)講述構(gòu)建程序的關(guān)鍵工具——鏈接器和加載器,內(nèi)容包括鏈接和加載、體系結(jié)構(gòu)、目標(biāo)文件、存儲(chǔ)分配、符號(hào)管理、庫(kù)、重定位、加載和覆蓋、共享庫(kù)、動(dòng)態(tài)鏈接和加載、動(dòng)態(tài)鏈接的共享庫(kù),以及著眼于成熟的現(xiàn)代鏈接器所做的一些變化;并介紹一個(gè)持續(xù)的實(shí)踐項(xiàng)目,即使用Perl語(yǔ)言開(kāi)發(fā)一個(gè)可用的小鏈接器。 本書(shū)適合高校計(jì)算機(jī)相關(guān)專業(yè)的學(xué)生、實(shí)習(xí)程序員、語(yǔ)言設(shè)計(jì)者和開(kāi)發(fā)人員閱讀參考?! ∽髡吆?jiǎn)介: 萊文(John R.Levine)是很多書(shū)籍的作者或合作者,包括Lex & Yacc(O'Reilly),Programming for Graphics Files in C and C++(Wiley),以及7-heIntemetforDummies(IDG)。他還是Journal of C Language Translation的榮譽(yù)退休發(fā)行人、comp.compilers新聞組的長(zhǎng)期仲裁人員,以及某個(gè)最早的商用Fortran 77編譯器的創(chuàng)建考。他在耶魯大學(xué)獲得了計(jì)算機(jī)科學(xué)的博士學(xué)位。
書(shū)籍目錄
第1章 鏈接和加載 1.1 鏈接器和加載器做什么? 1.2 地址綁定:從歷史的角度 1.3 鏈接與加載 1.4 編譯器驅(qū)動(dòng) 1.5 鏈接:一個(gè)真實(shí)的例子 練習(xí)第2章 體系結(jié)構(gòu)的問(wèn)題 2.1 應(yīng)用程序二進(jìn)制接口 2.2 內(nèi)存地址 2.3 地址構(gòu)成 2.4 指令格式 2.5 過(guò)程調(diào)用和尋址能力 2.6 數(shù)據(jù)和指令引用 2.7 分頁(yè)和虛擬內(nèi)存 2.8 Intel 386分段 2.9 嵌入式體系結(jié)構(gòu) 練習(xí)第3章 目標(biāo)文件 3.1 目標(biāo)文件中都有什么? 3.2 空目標(biāo)文件格式:MS-DOS的COM文件 3.3 代碼區(qū)段:UNIX的a.out文件 3.4 重定位:MS—DOS的EXE文件 3.5 符號(hào)和重定位 3.6 可重定位的a.out格式 3.7 UNIX的ELF格式 3.8 IBM 360目標(biāo)格式 3.9 微軟可移植、可執(zhí)行體格式 3.10 Intel/Microsoft的OMF文件格式 3.11 不同目標(biāo)格式的比較 練習(xí) 項(xiàng)目第4章 存儲(chǔ)空間分配 4.1 段和地址 4.2 簡(jiǎn)單的存儲(chǔ)布局 4.3 多種段類型 4.4 段與頁(yè)面的對(duì)齊 4.5 公共塊和其他特殊段 4.6 鏈接器控制腳本 4.7 實(shí)際中的存儲(chǔ)分配 練習(xí) 項(xiàng)目第5章 符號(hào)管理 5.1 綁定和名字解析 5.2 符號(hào)表格式 5.3 名稱修改 5.4 弱外部符號(hào)和其他類型符號(hào) 5.5 維護(hù)調(diào)試信息 練習(xí) 項(xiàng)目第6章 庫(kù) ……第7章 重定位第8章 加載和覆蓋第9章 共享庫(kù)第10章 動(dòng)態(tài)鏈接和加載第11章 高級(jí)技術(shù)參考文獻(xiàn)
章節(jié)摘錄
第1章 鏈接和加載 1.1 鏈接器和加載器做什么? 任何一個(gè)鏈接器和加載器的基本工作都非常簡(jiǎn)單:將更抽象的名字與更底層的名字綁定起來(lái),好讓程序員使用更抽象的名字編寫(xiě)代碼。也就是說(shuō),它可以將程序員編寫(xiě)的一個(gè)諸如get ine的名字綁定到“iosys模塊內(nèi)可執(zhí)行代碼的612字節(jié)處”,或者可以采用諸如“這個(gè)模塊的靜態(tài)數(shù)據(jù)開(kāi)始的第450字節(jié)處”這樣更抽象的數(shù)字地址,并將其綁定到數(shù)字地址上?! ?.2 地址綁定:從歷史的角度 鏈接器和加載器是做什么的?深入理解的方法就是看看它們?cè)谟?jì)算機(jī)編程系統(tǒng)的發(fā)展中充當(dāng)了什么角色?! ∽钤绲挠?jì)算機(jī)完全是用機(jī)器語(yǔ)言進(jìn)行編程的。程序員需要在紙質(zhì)表格上寫(xiě)下符號(hào)化的程序,然后手工將其匯編為機(jī)器碼,通過(guò)開(kāi)關(guān)、紙帶或卡片將其輸入到計(jì)算機(jī)中(真正的高手可以在開(kāi)關(guān)上直接編碼)。如果程序員使用符號(hào)化的地址,那他就得手工完成符號(hào)到地址的綁定。如果后來(lái)發(fā)現(xiàn)需要添加或刪除一條指令,那么整個(gè)程序都必須手工檢查一遍,并將所有被添加或刪除指令影響的地址都進(jìn)行修改?! ∵@個(gè)問(wèn)題就在于名字和地址綁定得過(guò)早了。匯編器通過(guò)讓程序員使用符號(hào)化名字編寫(xiě)程序,然后由程序?qū)⒚纸壎ǖ綑C(jī)器地址的方法解決了這個(gè)問(wèn)題。如果程序被改變了,那么程序員必須重新匯編它,但是地址分配的工作已經(jīng)從程序員轉(zhuǎn)給計(jì)算機(jī)了。
媒體關(guān)注與評(píng)論
“我很享受閱讀這本對(duì)實(shí)現(xiàn)鏈接器和加載器的眾多技術(shù)和挑戰(zhàn)進(jìn)行有效概述的書(shū)。雖然書(shū)中的多數(shù)例子都集中在今天被廣泛使用的三種計(jì)算機(jī)體系結(jié)構(gòu)上,但這本書(shū)也包含了很多描述過(guò)去的一些有趣和古怪的計(jì)算機(jī)體系結(jié)構(gòu)的注解。通過(guò)這些真實(shí)的戰(zhàn)例,我斷定作者本人真正經(jīng)歷了這些事情并存活了下來(lái)給我們講述這個(gè)故事。” ——Guy Steele
編輯推薦
不管你的編程語(yǔ)言是什么,不管你的平臺(tái)是什么,你很可能總是會(huì)涉及鏈接器和加載器的功能。但是你知道如何最大限度地利用它們嗎?只有現(xiàn)在,隨著《鏈接器和加載器》的出版,總算有一本深入完整地徹底揭示編譯時(shí)和運(yùn)行時(shí)過(guò)程的權(quán)威著作了。 《鏈接器和加載器》首先通過(guò)實(shí)例深入淺出地闡述了在不同的編譯器和操作系統(tǒng)中鏈接和加載過(guò)程的差異。在這個(gè)基礎(chǔ)上,作者提出了清晰實(shí)用的忠告,來(lái)幫助你創(chuàng)建更快、更清晰的代碼。你將會(huì)學(xué)習(xí)如何規(guī)避和Windows DLL相關(guān)的陷阱,充分利用UNIX ELF庫(kù)模式等。如果你對(duì)程序設(shè)計(jì)抱有非常認(rèn)真的態(tài)度,那么你可以通過(guò)這本書(shū)充分地理解這個(gè)領(lǐng)域內(nèi)最難懂的主題之一?!舵溄悠骱图虞d器》對(duì)于編譯器和操作系統(tǒng)課程同樣也是一本理想的補(bǔ)充讀物?! 舵溄悠骱图虞d器》特性 ◆覆蓋了Windows,UNIX,Linux,BeOS和其它操作系統(tǒng)的動(dòng)態(tài)鏈接過(guò)程?! 艚忉屃薐ava鏈接模式,以及它是如何應(yīng)用在網(wǎng)絡(luò)小應(yīng)用程序和可擴(kuò)展Java代碼中的?! 魩椭憔帉?xiě)更優(yōu)雅、更高效的代碼,以及構(gòu)建能夠被更加高效地編譯、加裁和運(yùn)行的應(yīng)用程序。 ◆包含了一個(gè)用Perl構(gòu)建鏈接器的練習(xí)項(xiàng)目,項(xiàng)目文件可以從網(wǎng)絡(luò)下載得到。
圖書(shū)封面
圖書(shū)標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載
250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版