鏈接器和加載器

出版時(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)分、閱讀與下載


    鏈接器和加載器 PDF格式下載


用戶評(píng)論 (總計(jì)40條)

 
 

  •   鏈接加載入門書(shū),內(nèi)容很全面,總體還不錯(cuò)。
  •   好書(shū),鏈接加載入門書(shū)之一。
  •   內(nèi)容詳盡充實(shí),非常有助于理解程序的編譯和加載!
  •   武林絕學(xué),卻缺少關(guān)注,程序是怎么來(lái)的?為什么要經(jīng)過(guò)鏈接,為什么對(duì)每個(gè)模塊的匯編中部分地址需要重定位?為什么?為什么?為什么這些都沒(méi)有文檔支持,讀讀本書(shū)吧,他能告訴你答案
  •   如果想深入理解程序怎么從代碼到二進(jìn)制文件,值得一讀
  •   適合想深入了解程序結(jié)構(gòu)構(gòu)造的技術(shù)人員,書(shū)很薄但是內(nèi)容很豐富
  •   需要較強(qiáng)的計(jì)算機(jī)基礎(chǔ)才能看懂。計(jì)算機(jī)專人只應(yīng)必修,尤其是系統(tǒng)底層開(kāi)發(fā)人員。
  •   對(duì)中級(jí)和高級(jí)程序員來(lái)說(shuō),很有幫助
  •   經(jīng)典書(shū)籍,如果對(duì)這方面有興趣的話建議購(gòu)買,的確寫(xiě)的不錯(cuò)~
  •   收藏了這本書(shū)很久了,發(fā)現(xiàn)當(dāng)當(dāng)搞活動(dòng),終于下單了,快遞很快,第二天就到了。不錯(cuò)。
  •   非常喜歡這本書(shū),很和我的口味啊
  •   學(xué)習(xí)了!
  •   好書(shū) 能學(xué)習(xí)到很多東西!~
  •   好書(shū),讀了之后有豁然開(kāi)朗的感覺(jué)。
  •   提高內(nèi)力。
  •   翻譯得不錯(cuò),是一本不錯(cuò)的書(shū).
  •   好書(shū),推薦一下,有希望了解底層?xùn)|西的同志們值得一看
  •   沖這個(gè)唯一性也要買來(lái)讀一讀,收藏先
  •   總之不是給初學(xué)的人看的~
  •   書(shū)不錯(cuò),是介紹鏈接加載器的不錯(cuò)的書(shū)籍,內(nèi)容很全面,就是不夠詳細(xì),總體來(lái)說(shuō)還不錯(cuò)
  •   花了2個(gè)星期時(shí)間,已經(jīng)看完前面6章。書(shū)不錯(cuò),但寫(xiě)的太籠統(tǒng),而且講的太泛。比如說(shuō)我只對(duì)ELF格式文件鏈接和加載有興趣,但這本書(shū)基本老的新的,各種架構(gòu)的都介紹,但每種又稍微點(diǎn)到為止。要深刻理解加載和鏈接過(guò)程,還是得另找資料才行。這本書(shū)可以看做一個(gè)原理性介紹,在看此書(shū)前先確保自己對(duì)內(nèi)存管理和目標(biāo)文件有些基本的認(rèn)識(shí)。
  •   起碼得學(xué)過(guò)編譯原理再看,不然太累……
  •   詳細(xì)講解了link和load的過(guò)程,很好
  •   這本書(shū)不錯(cuò),有點(diǎn)難度,正在閱讀中
  •   這種讀物比較少見(jiàn),讀一下,可以系統(tǒng)化自己的知識(shí)。
  •   粗略瀏覽了一下,很薄的一本書(shū),但是要真正完全理解本書(shū)不容易。
  •   翻譯的還不錯(cuò),不過(guò)若是能夠結(jié)合英文原版效果會(huì)更好
  •   幫同事購(gòu)買的,同事說(shuō)內(nèi)容還可以
  •   貨剛到,還沒(méi)有讀,送貨速度比較快,書(shū)也比較干凈。
  •   不錯(cuò)的入門
  •   原書(shū)是好書(shū)。翻譯得還行。
  •   這本書(shū) 久聞其名,
    看完以后,稍覺(jué)名不副實(shí),可能是圖書(shū)市場(chǎng)上寫(xiě)關(guān)于庫(kù)
    這個(gè)話題的書(shū)少之又少,凸顯出這本書(shū)的地位。

    作者好像是個(gè)懷舊的人,對(duì)一些,我們這個(gè)年代
    業(yè)已淘汰的技術(shù)或產(chǎn)品念念不忘。本來(lái)就薄薄的一冊(cè),
    還在這些上過(guò)時(shí)的東西浪費(fèi)筆墨,好在在書(shū)的末尾看
    到了一些精華的知識(shí)。

    實(shí)際上對(duì)于想了解這部分內(nèi)容的技術(shù)人員來(lái)說(shuō),我推薦
    更好的一本書(shū)《鏈接 加載 與庫(kù)》。
  •   對(duì)我來(lái)說(shuō)內(nèi)容有點(diǎn)難,還需要其它一些背景資料補(bǔ)充
  •   盼了一個(gè)多禮拜,終于收到貨了,雖然時(shí)間長(zhǎng)了些,但是在我的期待中終究是收到貨了!真不容易呀!
  •   感覺(jué)這本書(shū)學(xué)不到什么東西
  •   講到的基本上其它書(shū)上都講了!并且比這個(gè)詳細(xì),不知道中國(guó)人寫(xiě)類似書(shū)的時(shí)候都把它涵蓋進(jìn)去了,還是.....你懂的??!

    再看看有沒(méi)有什么特別的地方再說(shuō)教吧!!
  •   內(nèi)容和性價(jià)比不高 完全可以打印電子版看就成了
  •   書(shū)de 翻譯有些亂。
  •   很好,好書(shū)一本
  •   學(xué)習(xí)用的啊
 

250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7