程序員的自我修養—鏈接、裝載與庫( 網易云風力薦:莫到用時再讀書!)

>>>  文章華國詩禮傳家—精彩書評選  >>> 簡體     傳統

內容推薦

本書主要介紹系統軟件的運行機制和原理,涉及在Windows和Linux兩個系統平臺上,一個應用程序在編譯、鏈接和運行時刻所發生的各種事項,包括:代碼指令是如何保存的,庫文件如何與應用程序代碼靜態鏈接,應用程序如何被裝載到內存中并開始運行,動態鏈接如何實現,C/C++運行庫的工作原理,以及操作系統提供的系統服務是如何被調用的。每個技術專題都配備了大量圖、表和代碼實例,力求將復雜的機制以簡潔的形式表達出來。本書最后還提供了一個小巧且跨平臺的C/C++運行庫MiniCRT,綜合展示了與運行庫相關的各種技術。
  本書對裝載、鏈接和庫進行了深入淺出的剖析,并且輔以大量的例子和圖表,可以作為計算機軟件專業和其他相關專業大學本科高年級學生深入學習系統軟件的參考書。同時,還可作為各行業從事軟件開發的工程師、研究人員以及其他對系統軟件實現機制和技術感興趣者的自學教材。


cdbf6c81800a19d83de9987a31fa828ba71e46e2.jpg


目錄

第1部分 簡介 
 第1章 溫故而知新 
  1.1 從HELLO WORLD 說起 
  1.2 萬變不離其宗 
  1.3 站得高,望得遠 
  1.4 操作系統做什么 
  1.5 內存不夠怎么辦 
  1.6 眾人拾柴火焰高 
  1.7 本章小結 
第2部分 靜態鏈接 
 第2章 編譯和鏈接 
  2.1 被隱藏了的過程 
  2.2 編譯器做了什么 
  2.3 鏈接器年齡比編譯器長 
  2.4 模塊拼裝——靜態鏈接 
  2.5 本章小結 
 第3章 目標文件里有什么 
  3.1 目標文件的格式 
  3.2 目標文件是什么樣的 
  3.3 挖掘SIMPLESECTION.O 
  3.4 ELF 文件結構描述
  3.5 鏈接的接口——符號 
  3.6 調試信息 
  3.7 本章小結 
 第4章 靜態鏈接 
  4.1 空間與地址分配 
  4.2 符號解析與重定位 
  4.3 COMMON 塊 
  4.4 C++相關問題 
  4.5 靜態庫鏈接 
  4.6 鏈接過程控制 
  4.7 BFD 庫 
  4.8 本章小結 
 第5章 WINDOWS PE/COFF 
  5.1 WINDOWS 的二進制文件格式PE/COFF 134 
  5.2 PE 的前身——COFF 
  5.3 鏈接指示信息 
  5.4 調試信息 
  5.5 大家都有符號表 
  5.6 WINDOWS 下的ELF——PE 
  5.7 本章小結 
第3部分 裝載與動態鏈接 
 第6章 可執行文件的裝載與進程 
  6.1 進程虛擬地址空間 
  6.2 裝載的方式 
  6.3 從操作系統角度看可執行文件的裝載 
  6.4 進程虛存空間分布 
  6.5 LINUX 內核裝載ELF 過程簡介 
  6.6 WINDOWS PE 的裝載 
  6.7 本章小結 
 第7章 動態鏈接 
  7.1 為什么要動態鏈接 
  7.2 簡單的動態鏈接例子 
  7.3 地址無關代碼 
  7.4 延遲綁定(PLT) 
  7.5 動態鏈接相關結構 
  7.6 動態鏈接的步驟和實現 
  7.7 顯式運行時鏈接 
  7.8 本章小結 
 第8章 LINUX 共享庫的組織 
  8.1 共享庫版本 
  8.2 符號版本 
  8.3 共享庫系統路徑 
  8.4 共享庫查找過程 
  8.5 環境變量 
  8.6 共享庫的創建和安裝 
  8.7 本章小結 
 第9章 WINDOWS 下的動態鏈接 
  9.1 DLL 簡介 
  9.2 符號導出導入表 
  9.3 DLL 優化 
  9.4 C++與動態鏈接 
  9.5 DLL HELL 
  9.6 本章小結 
第4部分 庫與運行庫 
 第10章 內存 
  10.1 程序的內存布局 
  10.2 棧與調用慣例 
  10.3 堆與內存管理 
  10.4 本章小結 
 第11章 運行庫 
  11.1 入口函數和程序初始化 
  11.2 C/C++運行庫 
  11.3 運行庫與多線程 
  11.4 C++全局構造與析構 
  11.5 FREAD 實現 
  11.6 本章小結 
 第12章 系統調用與API
  12.1 系統調用介紹 
  12.2 系統調用原理 
  12.3 WINDOWS API 
  12.4 本章小結 
 第13章 運行庫實現 
  13.1 C 語言運行庫 
  13.2 如何使用MINI CRT 
  13.3 C++運行庫實現 
  13.4 如何使用MINI CRT++ 
  13.5 本章小結 
附錄A 
 A.1 字節序(BYTE ORDER) 
 A.2 ELF 常見段 
 A.3 常用開發工具命令行參考 
索引

媒體評論

這是一本深人闡述鏈接、裝載和庫等問題的優秀圖書,讀來讓人愉悅,你從巾可以清晰地了解程序的前世今生,徹底理解敲人的代碼如何變成程序任系統中運行。通讀本書不管對于開發還是trouble shootin9都會很有幫助。建議每一位希望從事系統開發、或希望更實務地理解操作系統和編

在線試讀部分章節

第1部分 簡介 
  第1章 溫故而知新 
  1.2 萬變不離其宗
計算機是個非常廣泛的概念,大到占用數層樓的用于科學計算的超級計算機,小到手機上的嵌入式芯片都可以被稱為計算機。雖然它們的外形、結構和性能都千差萬別,但至少它們都有“計算”這個概念。在本書里面,我們將計算機的范圍限定在最為流行、使用最廣泛的PC機,更具體地講是采用兼容x86指令集的32位CPU的個人計算機。原因很簡單:因為筆者手上目前只有這種類型的計算機可供操作和實驗,不過相信90%以上的讀者也是,所以在這一點上我們很快能達成共識。其實選擇具體哪種平臺并不是最關鍵的,雖然各種平臺的軟硬件差別很多,但是本質上它們的基本概念和工作原理都是一樣的,只要我們能夠掌握一種平臺上的技術,那么其他的平臺都是大同小異的,很輕松地可以舉一反三。所以我們相信,只有你能夠深刻地理解x86平臺下的系統軟件背后的機理,當有一天你需要在MIPS指令集的嵌入式平臺上做開發,或者需要為64位的Windows或tinux開發應用程序的時候,你很快就能找到它們之間的相通之處。
撇開計算機硬件中紛繁復雜的各種設備、芯片及外圍接口等,站在軟件開發者的角度看,我們只須抓住硬件的幾個關鍵部件。對于系統程序開發者來說,計算機多如牛毛的硬件設備中,有三個部件最為關鍵,它們分別是中央處理器CPU、內存和I/O控制芯片,這三個部件幾乎就是計算機的核心了;對于普通應用程序開發者來說,他們似乎除了要關心CPU以外,其他的硬件細節基本不用關心,對于一些高級平臺的開發者來說(如Java、.NET或腳本語言開發者),連CPU都不需要關心,因為這些平臺為它們提供了一個通用的抽象的計算機,他們只要關心這個象的計算機就可以了。
  ……


這本書寫得非常好。現在編程IDE的發展已經屏蔽了程序之所以為可執行文件的過程:編譯、鏈接、裝載。它分析了Unix/Linux和Windows下的不同之處,比如說so和dll的不同。我覺得難能可貴的是,它在書的最后幾章重點討論了運行庫、系統調用、包裝API等在Unix/Linux下和在Windows下的原理和原理的不同之處。最后一章還演示了一個自己實現的Mini CRT 示例,看了以后覺得作者功底確實很深厚,不得不推薦一下這本書。 

另外,三位作者的語言使用很得當,解釋枯燥的原理時經常會有幽默性的語句出現,插圖比喻也顯得很生活化。從這點來看,我能在一個星期內讀完這本書,幾位作者對文字的駕馭也起到了很大的作用。 

讀完后關閉書卷,作者們為我剖析的操作系統、運行庫、鏈接、裝載、運行庫 等一系列概念如一副副立體畫一樣,展現在眼前。雖然在大學的時候計算機類教材很枯燥,幸虧工作后能遇到這種好書,為我等程序員們歸納知識提供了很大的便利。<程序員的自我修養>這個標題名至實歸。


這是一本深人闡述鏈接、裝載和庫等問題的優秀圖書,讀來讓人愉悅,你從巾可以清晰地了解程序的前世今生,徹底理解敲人的代碼如何變成程序任系統中運行。通讀本書不管對于開發還是trouble shootin9都會很有幫助。建議每一位希望從事系統開發、或希望更實務地理解操作系統和編譯器、或不滿足于只寫代碼的優秀程序員都擁有這樣一本書。

——鄒飛,趨勢科技(中國)研發中心資深軟件要程師

本書從大處著眼,小處著手,以通俗易懂的語言,深入淺出地對系統軟件的底層形成機制進行條分縷析,正合藥山禪師所謂“高高山頂立,深深海底行”。循著作者的思緒一路走來,有如醍醐灌頂。暢快淋漓。非常高興有預覽此書初稿的寶貴機會,我在瀏覽書稿和查核相關資料的過程中,學到了很多以前未知或知之不深的內容。

——馮亮,阿里巴巴(中國)網絡技術有限公司運維部系統架構師




網載 2015-09-06 23:24:05

[新一篇] 希臘神話故事 情節曲折引人入勝 人物形象豐滿鮮明

[舊一篇] 暗時間(平凡和優秀的距離,來自暗時間)
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表