本書主要介紹系統(tǒng)軟件的運(yùn)行機(jī)制和原理,涉及在Windows和Linux兩個(gè)系統(tǒng)平臺上,一個(gè)應(yīng)用程序在編譯、鏈接和運(yùn)行時(shí)刻所發(fā)生的各種事項(xiàng),包括:代碼指令是如何保存的,庫文件如何與應(yīng)用程序代碼靜態(tài)鏈接,應(yīng)用程序如何被裝載到內(nèi)存中并開始運(yùn)行,動態(tài)鏈接如何實(shí)現(xiàn),C/C++運(yùn)行庫的工作原理,以及操作系統(tǒng)提供的系統(tǒng)服務(wù)是如何被調(diào)用的。每個(gè)技術(shù)專題都配備了大量圖、表和代碼實(shí)例,力求將復(fù)雜的機(jī)制以簡潔的形式表達(dá)出來。本書還提供了一個(gè)小巧且跨平臺的C/C++運(yùn)行庫MiniCRT,綜合展示了與運(yùn)行庫相關(guān)的各種技術(shù)。
本書對裝載、鏈接和庫進(jìn)行了深入淺出的剖析,并且輔以大量的例子和圖表,可以作為計(jì)算機(jī)軟件專業(yè)和其他相關(guān)專業(yè)大學(xué)本科高年級學(xué)生深入學(xué)習(xí)系統(tǒng)軟件的參考書。同時(shí),還可作為各行業(yè)從事軟件開發(fā)的工程師、研究人員以及其他對系統(tǒng)軟件實(shí)現(xiàn)機(jī)制和技術(shù)感興趣者的自學(xué)教材。
第1部分 簡介
第1章 溫故而知新
1.1 從HELLO WORLD 說起
1.2 萬變不離其宗
1.3 站得高,望得遠(yuǎn)
1.4 操作系統(tǒng)做什么
1.5 內(nèi)存不夠怎么辦
1.6 眾人拾柴火焰高
1.7 本章小結(jié)
第2部分 靜態(tài)鏈接
第2章 編譯和鏈接
2.1 被隱藏了的過程
2.2 編譯器做了什么
2.3 鏈接器年齡比編譯器長
2.4 模塊拼裝——靜態(tài)鏈接
2.5 本章小結(jié)
第3章 目標(biāo)文件里有什么
3.1 目標(biāo)文件的格式
3.2 目標(biāo)文件是什么樣的
3.3 挖掘SIMPLESECTION.O
3.4 ELF 文件結(jié)構(gòu)描述
3.5 鏈接的接口——符號
3.6 調(diào)試信息
3.7 本章小結(jié)
第4章 靜態(tài)鏈接
4.1 空間與地址分配
4.2 符號解析與重定位
4.3 COMMON 塊
4.4 C++相關(guān)問題
4.5 靜態(tài)庫鏈接
4.6 鏈接過程控制
4.7 BFD 庫
4.8 本章小結(jié)
第5章 WINDOWS PE/COFF
5.1 WINDOWS 的二進(jìn)制文件格式PE/COFF 134
5.2 PE 的前身——COFF
5.3 鏈接指示信息
5.4 調(diào)試信息
5.5 大家都有符號表
5.6 WINDOWS 下的ELF——PE
5.7 本章小結(jié)
第3部分 裝載與動態(tài)鏈接
第6章 可執(zhí)行文件的裝載與進(jìn)程
6.1 進(jìn)程虛擬地址空間
6.2 裝載的方式
6.3 從操作系統(tǒng)角度看可執(zhí)行文件的裝載
6.4 進(jìn)程虛存空間分布
6.5 LINUX 內(nèi)核裝載ELF 過程簡介
6.6 WINDOWS PE 的裝載
6.7 本章小結(jié)
第7章 動態(tài)鏈接
7.1 為什么要動態(tài)鏈接
7.2 簡單的動態(tài)鏈接例子
7.3 地址無關(guān)代碼
7.4 延遲綁定(PLT)
7.5 動態(tài)鏈接相關(guān)結(jié)構(gòu)
7.6 動態(tài)鏈接的步驟和實(shí)現(xiàn)
7.7 顯式運(yùn)行時(shí)鏈接
7.8 本章小結(jié)
第8章 LINUX 共享庫的組織
8.1 共享庫版本
8.2 符號版本
8.3 共享庫系統(tǒng)路徑
8.4 共享庫查找過程
8.5 環(huán)境變量
8.6 共享庫的創(chuàng)建和安裝
8.7 本章小結(jié)
第9章 WINDOWS 下的動態(tài)鏈接
9.1 DLL 簡介
9.2 符號導(dǎo)出導(dǎo)入表
9.3 DLL 優(yōu)化
9.4 C++與動態(tài)鏈接
9.5 DLL HELL
9.6 本章小結(jié)
第4部分 庫與運(yùn)行庫
第10章 內(nèi)存
10.1 程序的內(nèi)存布局
10.2 棧與調(diào)用慣例
10.3 堆與內(nèi)存管理
10.4 本章小結(jié)
第11章 運(yùn)行庫
11.1 入口函數(shù)和程序初始化
11.2 C/C++運(yùn)行庫
11.3 運(yùn)行庫與多線程
11.4 C++全局構(gòu)造與析構(gòu)
11.5 FREAD 實(shí)現(xiàn)
11.6 本章小結(jié)
第12章 系統(tǒng)調(diào)用與API
12.1 系統(tǒng)調(diào)用介紹
12.2 系統(tǒng)調(diào)用原理
12.3 WINDOWS API
12.4 本章小結(jié)
第13章 運(yùn)行庫實(shí)現(xiàn)
13.1 C 語言運(yùn)行庫
13.2 如何使用MINI CRT
13.3 C++運(yùn)行庫實(shí)現(xiàn)
13.4 如何使用MINI CRT++
13.5 本章小結(jié)
附錄A
A.1 字節(jié)序(BYTE ORDER)
A.2 ELF 常見段
A.3 常用開發(fā)工具命令行參考
索引
第1部分 簡介
第1章 溫故而知新
1.2 萬變不離其宗
計(jì)算機(jī)是個(gè)非常廣泛的概念,大到占用數(shù)層樓的用于科學(xué)計(jì)算的超級計(jì)算機(jī),小到手機(jī)上的嵌入式芯片都可以被稱為計(jì)算機(jī)。雖然它們的外形、結(jié)構(gòu)和性能都千差萬別,但至少它們都有"計(jì)算"這個(gè)概念。在本書里面,我們將計(jì)算機(jī)的范圍限定在最為流行、使用最廣泛的PC機(jī),更具體地講是采用兼容x86指令集的32位CPU的個(gè)人計(jì)算機(jī)。原因很簡單:因?yàn)楣P者手上目前只有這種類型的計(jì)算機(jī)可供操作和實(shí)驗(yàn),不過相信90%以上的讀者也是,所以在這一點(diǎn)上我們很快能達(dá)成共識。其實(shí)選擇具體哪種平臺并不是最關(guān)鍵的,雖然各種平臺的軟硬件差別很多,但是本質(zhì)上它們的基本概念和工作原理都是一樣的,只要我們能夠掌握一種平臺上的技術(shù),那么其他的平臺都是大同小異的,很輕松地可以舉一反三。所以我們相信,只有你能夠深刻地理解x86平臺下的系統(tǒng)軟件背后的機(jī)理,當(dāng)有24小時(shí)你需要在MIPS指令集的嵌入式平臺上做開發(fā),或者需要為64位的Windows或tinux開發(fā)應(yīng)用程序的時(shí)候,你很快就能找到它們之間的相通之處。
撇開計(jì)算機(jī)硬件中紛繁復(fù)雜的各種設(shè)備、芯片及外圍接口等,站在軟件開發(fā)者的角度看,我們只須抓住硬件的幾個(gè)關(guān)鍵部件。對于系統(tǒng)程序開發(fā)者來說,計(jì)算機(jī)多如牛毛的硬件設(shè)備中,有三個(gè)部件最為關(guān)鍵,它們分別是中央處理器CPU、內(nèi)存和I/O控制芯片,這三個(gè)部件幾乎就是計(jì)算機(jī)的核心了;對于普通應(yīng)用程序開發(fā)者來說,他們似乎除了要關(guān)心CPU以外,其他的硬件細(xì)節(jié)基本不用關(guān)心,對于一些高級平臺的開發(fā)者來說(如Java、.NET或腳本語言開發(fā)者),連CPU都不需要關(guān)心,因?yàn)檫@些平臺為它們提供了一個(gè)通用的抽象的計(jì)算機(jī),他們只要關(guān)心這個(gè)象的計(jì)算機(jī)就可以了。
……
這是一本深人闡述鏈接、裝載和庫等問題的圖書,讀來讓人愉悅,你從巾可以清晰地了解程序的前世今生,徹底理解敲人的代碼如何變成程序任系統(tǒng)中運(yùn)行。通讀本書不管對于開發(fā)還是trouble shootin9都會很有幫助。建議每一位希望從事系統(tǒng)開發(fā)、或希望更實(shí)務(wù)地理解操作系統(tǒng)和編
個(gè)人覺得真正的程序員是應(yīng)該對底層底層的東西有必要的了解的,正所謂本書所強(qiáng)調(diào)的程序員的自我修養(yǎng)。若想了解程序的是怎么加載運(yùn)行的,那么這本書是你所需要的!強(qiáng)烈推薦!
之前一路從匯編到C再到j(luò)ava,感覺底層的東西真的很重要很有用
我是把這本書撕開,每次看幾頁,在地鐵上看完的。當(dāng)然,只是通讀,沒有很認(rèn)真的研究。我覺得對非計(jì)算機(jī)科班出身而從事編程的人而言,這本書值得一看。如果你對計(jì)算機(jī)有興趣,想了解一些在運(yùn)行的程序背后發(fā)生的事情。這本書可以作為一個(gè)入門,引領(lǐng)你去學(xué)習(xí)鉆研更多的內(nèi)容。
快遞是我目前遇到最爛的一次,只有五六十公里的距離,竟然用了五六天,然后打電話通知態(tài)度超爛,還說我是異地卡,超出了他的服務(wù)范圍。不發(fā)短信。,,,,,,,。書還行,。。。趕快換物流吧。。。。。
經(jīng)典的書籍不需要解釋,終于還是買了書,電子書看起來不爽
將鏈接編譯,運(yùn)行庫,可執(zhí)行文件等基礎(chǔ)講的很清楚,真不錯(cuò)。
C到底怎么運(yùn)行、操作系統(tǒng)如何裝載,這本書是從操作系統(tǒng)的角度剖析一段代碼如何運(yùn)行,屬于硬基本功,當(dāng)然啃起來很吃力,但是心里很滿足
以最快的速度看完了這本書,對動態(tài)庫的裝載鏈接原理有了更深的認(rèn)識,尤其是對在工作中碰到的相關(guān)問題處理起來更加得心應(yīng)手。
對于程序編譯、執(zhí)行的內(nèi)部機(jī)理進(jìn)行系統(tǒng)的闡述,這方面的知識,之前也都是遇到各種各樣的問題一點(diǎn)點(diǎn)積攢下了,但從沒有過系統(tǒng)的整理,這書正好補(bǔ)上了這部分的空缺,贊一個(gè)
程序員的自我修養(yǎng)—鏈接、裝載與庫( 網(wǎng)易云風(fēng)力薦:莫到用時(shí)再讀書
講道理,作者的功底真的很厲害,對鏈接的過程很清晰,難得的好書,對得起書名
一本非常不錯(cuò)的經(jīng)典內(nèi)功修練書籍,深入淺出,深奧難懂的知識通常都伴有一個(gè)比喻或類比來幫你加深理解,非常不錯(cuò),值得擁有
對于編譯,鏈接和加載,之前只是一知半解,看了這本書全明白了,由于其中對于動態(tài)庫“全局符號介入”的問題,項(xiàng)目上需要注意啊!
還不錯(cuò),就像弄清楚程序鏈接這類的問題。整本書看起來內(nèi)容挺多,其實(shí)壓縮下沒多少。有些地方也是含糊不清或者就直接說“關(guān)于這類的問題,后面會有詳細(xì)解釋”,看到后面的解釋其實(shí)已經(jīng)跟前面的問題對不上了。不過,總的來說,書還是不錯(cuò)的,最好能邊看邊查!
一直很信賴當(dāng)當(dāng)?shù)牟旁谶@里買的書,送貨的速度很快,書是正品。提兩個(gè)小建議 第一 書的包裝實(shí)在不敢恭維 只有一個(gè)塑料袋。第二現(xiàn)在快遞都是大爺啊 連送上樓都不行?開會呢非得下樓去取?
國內(nèi)經(jīng)典的計(jì)算機(jī)書籍不多,這本可謂是很有深度,尤其是對于那些喜歡鉆研,喜歡了解底層的家伙來說,我閱讀這本書已經(jīng)是第二遍了,從電子書,到從圖書館借來的書,再到自己去買。每次讀都有新的收獲,尤其是邊看代碼,邊讀書。
關(guān)于書的內(nèi)容就不多說了,上次在當(dāng)當(dāng)買書還是上大二,如今畢業(yè)都一年了,體驗(yàn)依舊不錯(cuò),聽說當(dāng)當(dāng)這幾年發(fā)展速度一般,但這不重要,衷心希望當(dāng)當(dāng)能夠一如既往的堅(jiān)持給用戶提供良好的體驗(yàn),做一家經(jīng)得起時(shí)間考驗(yàn)的企業(yè)
不錯(cuò)的專業(yè)書籍,活動的時(shí)候購買價(jià)格也很不錯(cuò)了。系統(tǒng)解釋了程序運(yùn)行的各個(gè)方面的內(nèi)容,把軟件和硬件的連接講的很透徹,對程序的理解也更深了。另外,在這贊一下配送大姐,大姐很盡職,很貼心,讓人心暖暖的~~贊一個(gè)
這本書把晦澀的編譯,鏈接和庫的知識做了一次成功的科普嘗試,雖然是僅以windows和linux環(huán)境作為例子,基本思想是相通的,可以觸類旁通。以前老看電子版,還是買本紙質(zhì)正版,放到馬桶邊,如廁時(shí)回顧:)
大神推薦的書,雖然這本書完全不是小白(或者說剛?cè)腴T的程序猿)能看懂的,但就其內(nèi)容和設(shè)計(jì)各方面感覺還是很棒的,希望不久以后自己能夠從這本書中學(xué)到東西。當(dāng)當(dāng)這次沒有把書弄臟弄破挺好,希望繼續(xù)保持!!!
這是一本深人闡述鏈接、裝載和庫等問題的優(yōu)秀圖書,讀來讓人愉悅,你從巾可以清晰地了解程序的前世今生,徹底理解敲人的代碼如何變成程序任系統(tǒng)中運(yùn)行。通讀本書不管對于開發(fā)還是trouble shootin9都會很有幫助。
我的數(shù)據(jù)庫老師在課上曾經(jīng)推薦過這本書,這本書的作者我也認(rèn)識,現(xiàn)在作者已經(jīng)開了公司,干得還不錯(cuò)。最近重讀這本書,感覺作者對連接這部分講解的不錯(cuò),但是裝載處理的不是很好,可能和這部分細(xì)節(jié)不多吧
買它就是為了理解程序從編譯、連接到裝載運(yùn)行的過程。買這本數(shù)之前也買了大名鼎鼎的《鏈接器和加載器》,但是說的不夠詳細(xì),感覺晦澀難懂。如果想要對程序的運(yùn)行機(jī)理理解的更加深入一些,這本書是不錯(cuò)的選擇,正如書名,主要用來修煉內(nèi)功。
一直沒敢評,過了個(gè)暑假,看完了,覺得沒有想象中的好,主要是不夠深,特別是能看的出來作者很得意的那個(gè)c運(yùn)行時(shí)庫,寫得實(shí)在是太過簡單,大半兒東西感覺熟悉系統(tǒng)編程的人都做過。書里確實(shí)大都是現(xiàn)有的資料,不過有很多資料自己收集整理起來是很麻煩的,看得出作者確是用了心,下了功夫的,再考慮作者的年齡,很可貴了,自比不如啊,呵呵。嗯,本來打算給三星的,發(fā)現(xiàn)當(dāng)當(dāng)?shù)男羌壌淼氖窍矚g與否,不是書的內(nèi)容質(zhì)量評級,就給四星啦,確實(shí)是挺喜歡的,呵呵。
寫得非常不錯(cuò),的確是一本國內(nèi)不多見的優(yōu)秀原創(chuàng)書。大家都抄來抄去,能有這么一本好書不容易,我們要愛護(hù)。我一口氣讀了100多頁,是位年輕的作者。盡管他打著潘愛民的旗號,但是作者的探索精神,“打破砂鍋紋(問)到底”的精神,都超過了潘愛民。該書適合各路人士(新手和老手)。非常希望作者能對這本書的文字和布局再仔細(xì)錘煉一下,不要趕時(shí)髦,僅保留重要的內(nèi)容,以書名闡述的“修養(yǎng)”的嚴(yán)謹(jǐn)態(tài)度,剃除原文中那些“博克”習(xí)氣的文字,文字再精煉些,修正一些編輯性錯(cuò)誤。還有,補(bǔ)充書中各種論點(diǎn)的參考文獻(xiàn)和閱讀書目,提高可信行。那樣,我覺得每位學(xué)習(xí)計(jì)算機(jī)專業(yè)的人都該在案頭備這么一本書,這本書有望成長為一本該領(lǐng)域的圣經(jīng)。各位,先睹為快!