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

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

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

定 價:¥89.00

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

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

內(nèi)容簡介

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

作者簡介

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

圖書目錄

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

本目錄推薦

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