高級C/C++編譯技術

高級C/C++編譯技術 pdf epub mobi txt 電子書 下載2025

出版者:機械工業齣版社
作者:Milan Stevanovic
出品人:
頁數:266
译者:盧譽聲
出版時間:2015-4
價格:69.00
裝幀:
isbn號碼:9787111496182
叢書系列:C/C++技術叢書
圖書標籤:
  • C/C++
  • 編譯原理
  • C++
  • 計算機
  • 編程
  • 軟件開發
  • 計算機科學-C/C++
  • 程序設計
  • C++
  • 編譯原理
  • 編譯器
  • 優化
  • 代碼生成
  • 鏈接
  • 加載
  • 調試
  • 性能
  • 底層原理
  • 高級技巧
想要找書就要到 小美書屋
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!

具體描述

米蘭·斯特瓦諾維奇編著的這本《高級CC 編譯技術》從多個角度全麵、係統地講解多任務操作係統中編譯、鏈接、裝載與庫的內幕和技術細節,為深入理解和掌握係統底層技術提供詳實參考和實踐指南。與純粹講解理論與技術細節的書不同。本書一方麵對基本的理論進行瞭闡述,另一方麵則聚焦於C/C 使用靜態庫和動態庫的一些注意事項,並舉例說明如何解決實際的鏈接與裝載問題。此外,本書盡量使用通俗易懂的語言來闡述這些知識,並補充瞭大量示例,避免讓讀者整天糾結於枯燥的理論。

本書共14章,其中第1章至第4章對多任務操作係統、程序生命周期以及代碼重用等重要概念進行介紹,為後續內容做鋪墊;第5章介紹靜態庫的使用方法及其設計技巧;第6章至第11章介紹動態庫的相關概念,包括不同平颱中動態庫的技術細節,比如庫文件定位、引用解析與符號處理等,以及一些動態庫設計的基本方法與原則和不同平颱下應當注意的設計細節;第12章至第14章主要給齣一些實踐方麵的總結,便於讀者快速查找相關的概念,而且還總結瞭一些特定平颱的二進製文件分析工具。

著者簡介

圖書目錄

譯者序
前言
第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 應用程序二進製接口(ABI) 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 裝載時重定位(LTR) 129
8.5.2 位置無關代碼(PIC) 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 基於符號的版本控製方案 169
10.3 Windows動態庫版本控製 190
10.3.1 DLL版本信息 191
10.3.2 指定DLL版本信息 192
10.3.3 查詢並獲取DLL版本信息 193
第11章 動態庫:其他主題 202
11.1 插件 202
11.1.1 導齣規則 203
11.1.2 一些流行的插件架構 204
11.2 提示和技巧 204
11.2.1 使用動態庫的實際意義 204
11.2.2 其他主題 205
第12章 Linux工具集 211
12.1 快速查看工具 211
12.1.1 file實用程序 211
12.1.2 size實用程序 212
12.2 詳細信息分析工具 212
12.2.1 ldd 212
12.2.2 nm 214
12.2.3 objdump 215
12.2.4 readelf 223
12.3 部署階段工具 229
12.3.1 chrpath 229
12.3.2 patchelf 230
12.3.3 strip 231
12.3.4 ldconfig 231
12.4 運行時分析工具 232
12.4.1 strace 232
12.4.2 addr2line 233
12.4.3 gdb(GNU調試器) 233
12.5 靜態庫工具 234
第13章 平颱實踐 238
13.1 鏈接過程調試 238
13.2 確定二進製文件類型 239
13.3 確定二進製文件入口點 240
13.3.1 獲取可執行文件入口點 240
13.3.2 獲取動態庫入口點 240
13.4 列齣符號信息 241
13.5 查看節的信息 242
13.5.1 列齣所有節的信息 242
13.5.2 查看節的信息 242
13.6 查看段的信息 243
13.7 反匯編代碼 244
13.7.1 反匯編二進製文件 244
13.7.2 反匯編正在運行的進程 244
13.8 判斷是否為調試構建 244
13.9 查看加載時依賴項 245
13.10 查看裝載器可以找到的庫文件 245
13.11 查看運行時動態鏈接的庫文件 245
13.11.1 strace實用程序 245
13.11.2 LD_DEBUG環境變量 246
13.11.3 /proc//maps文件 246
13.11.4 lsof實用程序 247
13.11.5 通過編程方式查看 248
13.12 創建和維護靜態庫 251
第14章 Windows工具集 252
14.1 庫管理器(lib.exe) 252
14.1.1 使用lib.exe處理靜態庫 253
14.1.2 使用lib.exe處理動態庫(導入庫生成工具) 257
14.2 dumpbin實用程序 258
14.2.1 確定二進製文件類型 258
14.2.2 查看DLL的導齣符號 258
14.2.3 查看節的信息 259
14.2.4 反匯編代碼 262
14.2.5 確定是否使用瞭調試模式構建 263
14.2.6 查看加載時依賴項 265
14.3 Dependency Walker工具 265
· · · · · · (收起)

讀後感

評分

我只看了三章试读,因为原书略口水,看不下去. 第三章3.1第三段第二行. 译文: 这么做的原因很可能是新进程的内存映射与shell的内存映射完全不同. 其实应该是:因为很可能新进程的存储map和shell的存储map几乎没有什么相同的地方. 42页中间部分涉及到一个kernel里的struct名字,我...

評分

我只看了三章试读,因为原书略口水,看不下去. 第三章3.1第三段第二行. 译文: 这么做的原因很可能是新进程的内存映射与shell的内存映射完全不同. 其实应该是:因为很可能新进程的存储map和shell的存储map几乎没有什么相同的地方. 42页中间部分涉及到一个kernel里的struct名字,我...

評分

我只看了三章试读,因为原书略口水,看不下去. 第三章3.1第三段第二行. 译文: 这么做的原因很可能是新进程的内存映射与shell的内存映射完全不同. 其实应该是:因为很可能新进程的存储map和shell的存储map几乎没有什么相同的地方. 42页中间部分涉及到一个kernel里的struct名字,我...

評分

我只看了三章试读,因为原书略口水,看不下去. 第三章3.1第三段第二行. 译文: 这么做的原因很可能是新进程的内存映射与shell的内存映射完全不同. 其实应该是:因为很可能新进程的存储map和shell的存储map几乎没有什么相同的地方. 42页中间部分涉及到一个kernel里的struct名字,我...

評分

我只看了三章试读,因为原书略口水,看不下去. 第三章3.1第三段第二行. 译文: 这么做的原因很可能是新进程的内存映射与shell的内存映射完全不同. 其实应该是:因为很可能新进程的存储map和shell的存储map几乎没有什么相同的地方. 42页中间部分涉及到一个kernel里的struct名字,我...

用戶評價

评分

書中講得淺顯易懂,是本優秀的書

评分

收益很大,有一部分還是沒明白。 詳細從底層說明瞭程序設計,從最初的設計,一步一步說明如何修改,很好的一本書

评分

信息量還沒國內那本大,錯誤也不少,不過可能是翻譯編輯問題

评分

講真,這種類型的書對於我現在沒有太大意義瞭。頂多就是遇到問題查閱下細節。不如《程序員的自我修養》那本書好。

评分

動態庫鏈接方麵講的比較好

本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.quotespace.org All Rights Reserved. 小美書屋 版权所有