新到貨2本75折
高級C/C++編譯技術(典藏版)

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

  • 定價:534
  • 優惠價:87465
  • 運送方式:
  • 臺灣與離島
  • 海外
  • 可配送點:台灣、蘭嶼、綠島、澎湖、金門、馬祖
  • 可取貨點:台灣、蘭嶼、綠島、澎湖、金門、馬祖
載入中...
  • 分享
 

內容簡介

學習如何編寫C和C++代碼僅僅是個開始。如果你希望從事系統底層開發工作,或想深入理解作業系統、編譯器及它們之間內在的關聯,成為程式設計專家,那麼就必須充分瞭解編譯器生成的二進位檔案(目的檔案、靜態程式庫、動態庫和可執行檔)的作用和結構。開源已經在許多方面從根本上改變了軟體的原有面貌,越來越多的系統開始採用或集成開原始程式碼,因此對每位開發人員來說,學習和理解這些底層技術也變得十分重要。

本書深入淺出地講解了構建過程(編譯、連結)中的細節,從多個角度展示了程式與庫檔或代碼的集成方法,提出了面向代碼重用和系統集成的軟體架構設計方法,同時展示了系統開發過程中疑難問題的解決方案。另外,本書也是一本C和C++二進位檔案方面的軟體工程指南,涵蓋中級和專家級程式師所需的各方面內容和資訊。

通過閱讀本書,你將學到:

*構建過程(編譯和連結)與裝載過程的內部原理。
*靜態程式庫、動態庫和可執行檔的內部工作機制。
*面向代碼重用和系統集成的軟體架構設計方法。
*編譯、連結與運行時問題的排查技巧。
*在Linux和Windows平臺下利用二進位檔案分析工具進行分析的方法。

 

作者介紹

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

 

目錄

譯者序
前言
第1章 多工作業系統基礎 1
1.1 一些有用的抽象概念 1
1.2 記憶體層次結構與緩存策略 2
1.3 虛擬記憶體 3
1.4 虛擬位址 5
1.5 進程的記憶體劃分方案 5
1.6 二進位檔案、編譯器、連結器與裝載器的作用 6
1.7 小結 7

第2章 程式生命週期階段基礎 8
2.1 基本假設 8
2.2 編寫代碼 9
2.3 編譯階段 11
2.3.1 基本概念 11
2.3.2 相關概念 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 可執行檔屬性 33
2.5.1 各種節的類型 34
2.5.2 各種符號類型 36

第3章 載入程式執行階段 37
3.1 shell的重要性 37
3.2 內核的作用 39
3.3 裝載器的作用 39
3.3.1 裝載器視角下的二進位檔案(節與段) 39
3.3.2 程式載入階段 40
3.4 程式執行入口點 43
3.4.1 裝載器查找入口點 43
3.4.2 _start()函數的作用 43
3.4.3 __libc_start_main()函數的作用 44
3.4.4 棧和調用慣例 44

第4章 重用概念的作用 46
4.1 靜態程式庫 46
4.2 動態庫 48
4.2.1 動態庫和共用庫 49
4.2.2 動態連結詳解 51
4.2.3 Windows平臺中動態連結的特點 54
4.2.4 動態庫的特點 56
4.2.5 應用程式二進位介面 56
4.3 靜態程式庫和動態庫對比 57
4.3.1 導入選擇條件的差異 57
4.3.2 部署難題 59
4.4 一些有用的類比 61
4.5 結論:二進位重用概念所產生的影響 63

第5章 使用靜態程式庫 64
5.1 創建靜態程式庫 64
5.1.1 創建Linux靜態程式庫 64
5.1.2 創建Windows靜態程式庫 65
5.2 靜態程式庫的使用場合 65
5.3 靜態程式庫設計技巧 66
5.3.1 丟失符號可見性和唯一性的可能性 66
5.3.2 靜態程式庫使用禁忌 67
5.3.3 靜態程式庫連結的具體規則 68
5.3.4 將靜態程式庫轉換成動態庫 68
5.3.5 靜態程式庫在64位Linux平臺上的問題 68

第6章 動態庫的設計:基礎篇 70
6.1 創建動態庫 70
6.1.1 在Linux中創建動態庫 70
6.1.2 在Windows中創建動態庫 72
6.2 設計動態庫 75
6.2.1 設計二進位介面 75
6.2.2 設計應用程式的二進位介面 79
6.2.3 控制動態庫符號的可見性 82
6.2.4 完成連結需要滿足的條件 94
6.3 動態連結模式 94
6.3.1 載入時動態連結 95
6.3.2 運行時動態連結 95
6.3.3 比較兩種動態連結模式 98

第7章 定位庫文件 99
7.1 典型用例場景 99
7.1.1 開發用例場景 99
7.1.2 用戶運行時用例場景 100
7.2 構建過程中庫檔的定位規則 101
7.2.1 Linux構建過程中的庫檔定位規則 101
7.2.2 Windows構建過程中的庫檔定位規則 105
7.3 運行時動態庫檔的定位規則 109
7.3.1 Linux運行時動態庫檔的定位規則 110
7.3.2 Windows運行時動態庫檔的定位規則 114
7.4 示例:Linux構建時與運行時的庫檔定位 115

第8章 動態庫的設計:進階篇 119
8.1 解析記憶體位址的必要性 119
8.2 引用解析中的常見問題 120
8.3 位址轉換引發的問題 122
8.3.1 情景1:客戶二進位檔案需要知道動態庫符號位址 122
8.3.2 情景2:被裝載的庫不需要知道其自身符號位址 123
8.4 連結器-裝載器協作 124
8.4.1 總體策略 125
8.4.2 具體技術 126
8.4.3 連結器重定位提示概述 127
8.5 連結器-裝載器協作實現技術 128
8.5.1 裝載時重定位 129
8.5.2 位置無關代碼 129

第9章 動態連結時的重複符號處理 134
9.1 重複符號的定義 134
9.2 重複符號的預設處理 137
9.3 在動態庫連結過程中處理重複符號 140
9.3.1 處理重複符號問題的一般策略 142
9.3.2 連結器解析動態庫重複符號的模糊演算法準則 143
9.4 特定重複名稱案例分析 144
9.4.1 案例1:客戶二進位檔案符號與動態庫ABI函數衝突 144
9.4.2 案例2:不同動態庫的ABI符號衝突 147
9.4.3 案例3:動態庫ABI符號和另一個動態庫局部符號衝突 151
9.4.4 案例4:兩個未匯出的動態庫符號衝突 153
9.5 小提示:連結並不提供任何類型的命名空間繼承 161

第10章 動態庫的版本控制 162
10.1 主次版本號與向後相容性 162
10.1.1 主版本號變更 162
10.1.2 次版本號變更 163
10.1.3 修訂版本號 163
10.2 Linux動態庫版本控制方案 163
10.2.1 基於soname的版本控制方案 163
10.2.2 ………..
 

詳細資料

  • ISBN:9787111717300
  • 規格:平裝 / 266頁 / 16k / 19 x 26 x 1.33 cm / 普通級 / 單色印刷 / 1-1
  • 出版地:中國

最近瀏覽商品

 

相關活動

  • 【科普、飲食、電腦】高寶電子書暢銷書展:人生就是選擇的總和,全展75折起
 

購物說明

溫馨提醒您:若您訂單中有購買簡體館無庫存/預售書或庫存於海外廠商的書籍,建議與其他商品分開下單,以避免等待時間過長,謝謝。

大陸出版品書況:因裝幀品質及貨運條件未臻完善,書況與台灣出版品落差甚大,封面老舊、出現磨痕、凹痕等均屬常態,故簡體字館除封面破損、內頁脫落...等較嚴重的狀態外,其餘所有商品將正常出貨。 

 

請注意,部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

調貨時間:若您購買海外庫存之商品,於您完成訂購後,商品原則上約45個工作天內抵台(若有將延遲另行告知)。為了縮短等待的時間,建議您將簡體書與其它商品分開訂購,以利一般商品快速出貨。 

若您具有法人身份為常態性且大量購書者,或有特殊作業需求,建議您可洽詢「企業採購」。 

退換貨說明 

會員所購買的商品均享有到貨十天的猶豫期(含例假日)。退回之商品必須於猶豫期內寄回。 

辦理退換貨時,商品必須是全新狀態與完整包裝(請注意保持商品本體、配件、贈品、保證書、原廠包裝及所有附隨文件或資料的完整性,切勿缺漏任何配件或損毀原廠外盒)。退回商品無法回復原狀者,恐將影響退貨權益或需負擔部分費用。 

訂購本商品前請務必詳閱商品退換貨原則

  • 翦商作者新作79折
  • 針灸匠張寶旬
  • 浪漫小說精選3本72折