注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)C/C++及其相關(guān)高級(jí)C/C++編譯技術(shù)(典藏版)

高級(jí)C/C++編譯技術(shù)(典藏版)

高級(jí)C/C++編譯技術(shù)(典藏版)

定 價(jià):¥89.00

作 者: 米蘭·斯特瓦諾維奇(Milan Stevanovic)
出版社: 機(jī)械工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787111717300 出版時(shí)間: 2022-12-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 字?jǐn)?shù):  

內(nèi)容簡介

  學(xué)習(xí)如何編寫C和C++代碼僅僅是個(gè)開始。如果你希望從事系統(tǒng)底層開發(fā)工作,或想深入理解操作系統(tǒng)、編譯器及它們之間內(nèi)在的關(guān)聯(lián),成為編程專家,那么就必須充分了解編譯器生成的二進(jìn)制文件(目標(biāo)文件、靜態(tài)庫、動(dòng)態(tài)庫和可執(zhí)行文件)的作用和結(jié)構(gòu)。開源已經(jīng)在許多方面從根本上改變了軟件的原有面貌,越來越多的系統(tǒng)開始采用或集成開源代碼,因此對(duì)每位開發(fā)人員來說,學(xué)習(xí)和理解這些底層技術(shù)也變得十分重要。本書深入淺出地講解了構(gòu)建過程(編譯、鏈接)中的細(xì)節(jié),從多個(gè)角度展示了程序與庫文件或代碼的集成方法,提出了面向代碼重用和系統(tǒng)集成的軟件架構(gòu)設(shè)計(jì)方法,同時(shí)展示了系統(tǒng)開發(fā)過程中疑難問題的解決方案。另外,本書也是一本C和C++二進(jìn)制文件方面的軟件工程指南,涵蓋中級(jí)和專家級(jí)程序員所需的各方面內(nèi)容和信息。通過閱讀本書,你將學(xué)到:*構(gòu)建過程(編譯和鏈接)與裝載過程的內(nèi)部原理。*靜態(tài)庫、動(dòng)態(tài)庫和可執(zhí)行文件的內(nèi)部工作機(jī)制。*面向代碼重用和系統(tǒng)集成的軟件架構(gòu)設(shè)計(jì)方法。*編譯、鏈接與運(yùn)行時(shí)問題的排查技巧。*在Linux和Windows平臺(tái)下利用二進(jìn)制文件分析工具進(jìn)行分析的方法。

作者簡介

  米蘭·斯特瓦諾維奇( Milan Stevanovic )資深軟件顧問,在多個(gè)學(xué)科的工程領(lǐng)域有著豐富的經(jīng)驗(yàn)。他主要從事Linux和Windows平臺(tái)下的多媒體壓縮格式及多媒體框架設(shè)計(jì)工作。他熱衷于開源,是avxsynth開源項(xiàng)目的主要貢獻(xiàn)者,對(duì)C和C++底層技術(shù)有著深入的研究。

圖書目錄

譯者序
前言
第1章 多任務(wù)操作系統(tǒng)基礎(chǔ) 1
1.1 一些有用的抽象概念 1
1.2 存儲(chǔ)器層次結(jié)構(gòu)與緩存策略 2
1.3 虛擬內(nèi)存 3
1.4 虛擬地址 5
1.5 進(jìn)程的內(nèi)存劃分方案 5
1.6 二進(jìn)制文件、編譯器、鏈接器與裝載器的作用 6
1.7 小結(jié) 7
第2章 程序生命周期階段基礎(chǔ) 8
2.1 基本假設(shè) 8
2.2 編寫代碼 9
2.3 編譯階段 11
2.3.1 基本概念 11
2.3.2 相關(guān)概念 11
2.3.3 編譯的各個(gè)階段 12
2.3.4 目標(biāo)文件屬性 23
2.3.5 編譯過程的局限性 24
2.4 鏈接 26
2.4.1 鏈接階段 26
2.4.2 鏈接器視角 31
2.5 可執(zhí)行文件屬性 33
2.5.1 各種節(jié)的類型 34
2.5.2 各種符號(hào)類型 36
第3章 加載程序執(zhí)行階段 37
3.1 shell的重要性 37
3.2 內(nèi)核的作用 39
3.3 裝載器的作用 39
3.3.1 裝載器視角下的二進(jìn)制文件(節(jié)與段) 39
3.3.2 程序加載階段 40
3.4 程序執(zhí)行入口點(diǎn) 43
3.4.1 裝載器查找入口點(diǎn) 43
3.4.2 _start()函數(shù)的作用 43
3.4.3 __libc_start_main()函數(shù)的作用 44
3.4.4 棧和調(diào)用慣例 44
第4章 重用概念的作用 46
4.1 靜態(tài)庫 46
4.2 動(dòng)態(tài)庫 48
4.2.1 動(dòng)態(tài)庫和共享庫 49
4.2.2 動(dòng)態(tài)鏈接詳解 51
4.2.3 Windows平臺(tái)中動(dòng)態(tài)鏈接的特點(diǎn) 54
4.2.4 動(dòng)態(tài)庫的特點(diǎn) 56
4.2.5 應(yīng)用程序二進(jìn)制接口 56
4.3 靜態(tài)庫和動(dòng)態(tài)庫對(duì)比 57
4.3.1 導(dǎo)入選擇條件的差異 57
4.3.2 部署難題 59
4.4 一些有用的類比 61
4.5 結(jié)論:二進(jìn)制重用概念所產(chǎn)生的影響 63
第5章 使用靜態(tài)庫 64
5.1 創(chuàng)建靜態(tài)庫 64
5.1.1 創(chuàng)建Linux靜態(tài)庫 64
5.1.2 創(chuàng)建Windows靜態(tài)庫 65
5.2 靜態(tài)庫的使用場合 65
5.3 靜態(tài)庫設(shè)計(jì)技巧 66
5.3.1 丟失符號(hào)可見性和唯一性的可能性 66
5.3.2 靜態(tài)庫使用禁忌 67
5.3.3 靜態(tài)庫鏈接的具體規(guī)則 68
5.3.4 將靜態(tài)庫轉(zhuǎn)換成動(dòng)態(tài)庫 68
5.3.5 靜態(tài)庫在64位Linux平臺(tái)上的問題 68
第6章 動(dòng)態(tài)庫的設(shè)計(jì):基礎(chǔ)篇 70
6.1 創(chuàng)建動(dòng)態(tài)庫 70
6.1.1 在Linux中創(chuàng)建動(dòng)態(tài)庫 70
6.1.2 在Windows中創(chuàng)建動(dòng)態(tài)庫 72
6.2 設(shè)計(jì)動(dòng)態(tài)庫 75
6.2.1 設(shè)計(jì)二進(jìn)制接口 75
6.2.2 設(shè)計(jì)應(yīng)用程序的二進(jìn)制接口 79
6.2.3 控制動(dòng)態(tài)庫符號(hào)的可見性 82
6.2.4 完成鏈接需要滿足的條件 94
6.3 動(dòng)態(tài)鏈接模式 94
6.3.1 加載時(shí)動(dòng)態(tài)鏈接 95
6.3.2 運(yùn)行時(shí)動(dòng)態(tài)鏈接 95
6.3.3 比較兩種動(dòng)態(tài)鏈接模式 98
第7章 定位庫文件 99
7.1 典型用例場景 99
7.1.1 開發(fā)用例場景 99
7.1.2 用戶運(yùn)行時(shí)用例場景 100
7.2 構(gòu)建過程中庫文件的定位規(guī)則 101
7.2.1 Linux構(gòu)建過程中的庫文件定位規(guī)則 101
7.2.2 Windows構(gòu)建過程中的庫文件定位規(guī)則 105
7.3 運(yùn)行時(shí)動(dòng)態(tài)庫文件的定位規(guī)則 109
7.3.1 Linux運(yùn)行時(shí)動(dòng)態(tài)庫文件的定位規(guī)則 110
7.3.2 Windows運(yùn)行時(shí)動(dòng)態(tài)庫文件的定位規(guī)則 114
7.4 示例:Linux構(gòu)建時(shí)與運(yùn)行時(shí)的庫文件定位 115
第8章 動(dòng)態(tài)庫的設(shè)計(jì):進(jìn)階篇 119
8.1 解析內(nèi)存地址的必要性 119
8.2 引用解析中的常見問題 120
8.3 地址轉(zhuǎn)換引發(fā)的問題 122
8.3.1 情景1:客戶二進(jìn)制文件需要知道動(dòng)態(tài)庫符號(hào)地址 122
8.3.2 情景2:被裝載的庫不需要知道其自身符號(hào)地址 123
8.4 鏈接器-裝載器協(xié)作 124
8.4.1 總體策略 125
8.4.2 具體技術(shù) 126
8.4.3 鏈接器重定位提示概述 127
8.5 鏈接器-裝載器協(xié)作實(shí)現(xiàn)技術(shù) 128
8.5.1 裝載時(shí)重定位 129
8.5.2 位置無關(guān)代碼 129
第9章 動(dòng)態(tài)鏈接時(shí)的重復(fù)符號(hào)處理 134
9.1 重復(fù)符號(hào)的定義 134
9.2 重復(fù)符號(hào)的默認(rèn)處理 137
9.3 在動(dòng)態(tài)庫鏈接過程中處理重復(fù)符號(hào) 140
9.3.1 處理重復(fù)符號(hào)問題的一般策略 142
9.3.2 鏈接器解析動(dòng)態(tài)庫重復(fù)符號(hào)的模糊算法準(zhǔn)則 143
9.4 特定重復(fù)名稱案例分析 144
9.4.1 案例1:客戶二進(jìn)制文件符號(hào)與動(dòng)態(tài)庫ABI函數(shù)沖突 144
9.4.2 案例2:不同動(dòng)態(tài)庫的ABI符號(hào)沖突 147
9.4.3 案例3:動(dòng)態(tài)庫ABI符號(hào)和另一個(gè)動(dòng)態(tài)庫局部符號(hào)沖突 151
9.4.4 案例4:兩個(gè)未導(dǎo)出的動(dòng)態(tài)庫符號(hào)沖突 153
9.5 小提示:鏈接并不提供任何類型的命名空間繼承 161
第10章 動(dòng)態(tài)庫的版本控制 162
10.1 主次版本號(hào)與向后兼容性 162
10.1.1 主版本號(hào)變更 162
10.1.2 次版本號(hào)變更 163
10.1.3 修訂版本號(hào) 163
10.2 Linux動(dòng)態(tài)庫版本控制方案 163
10.2.1 基于soname的版本控制方案 163
10.2.2 基于

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) www.dappsexplained.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)