鏈接器和加載器 Linkers and Loaders

John R. Levine

買這商品的人也買了...

商品描述

本書講述構建程序的關鍵工具——鏈接器和加載器,內容包括鏈接和加載、體系結構、
目標文件、存儲分配、符號管理、庫、重定位、加載和覆蓋、共享庫、動態鏈接和加載、
動態鏈接的共享庫,以及著眼於成熟的現代鏈接器所做的一些變化;
並介紹一個持續的實踐項目,即使用Perl語言開發一個可用的小鏈接器。
本書適合高校計算機相關專業的學生、實習程序員、語言設計者和開發人員閱讀參考。

目錄大綱

譯者序
前言
第1章 鏈接和加載 1
1.1 鏈接器和加載器做什麼 1
1.2 從歷史發展的角度分析地址綁定 1
1.3 鏈接與加載 3
1.3.1 兩遍鏈接 4
1.3.2 目標代碼庫 5
1.3.3 重定位和代碼修改 6
1.4 編譯驅動器 7
1.5 鏈接:一個真實的例子 9
1.6 練習 12
第2章 體系結構相關問題 13
2.1 應用程序二進制接口 13
2.2 內存地址 13
2.3 地址構成規則 15
2.4 指令格式 15
2.5 過程調用和可尋址性 16
2.6 數據訪問和指令引用 19
2.6.1 IBM 370 19
2.6.2 SPARC 21
2.6.3 Intel x86 23
2.7 分頁和虛擬內存 24
2.7.1 程序的地址空間 26
2.7.2 文件映射 27
2.7.3 共享庫和程序 28
2.7.4 位置無關代碼 28
2.8 Intel 386分段 29
2.9 嵌入式體系結構 31
2.9.1 怪異的地址空間 31
2.9.2 非統一內存 31
2.9.3 內存對齊 31
2.10 練習 32
第3章 目標文件 35
3.1 目標文件中有什麼 35
3.2 空目標文件格式:MS-DOS的.COM文件 36
3.3 代碼分段:UNIX的a.out文件 36
3.3.1 a.out文件頭 37
3.3.2 與虛擬內存的交互 38
3.4 重定位:MS-DOS的EXE文件 41
3.5 符號和重定位 43
3.6 可重定位的a.out格式 43
3.6.1 重定位項 44
3.6.2 符號和字符串 44
3.6.3 a.out格式小結 45
3.7 UNIX ELF格式 45
3.7.1 可重定位文件 47
3.7.2 ELF可執行文件 51
3.7.3 ELF格式小結 52
3.8 IBM 360目標文件格式 52
3.8.1 ESD記錄 53
3.8.2 TXT記錄 54
3.8.3 RLD記錄 54
3.8.4 END記錄 55
3.8.5 小結 55
3.9 微軟的可移植可執行文件格式 55
3.9.1 PE特有區段 59
3.9.2 運行PE可執行文件 60
3.9.3 PE和COFF 61
3.9.4 PE文件小結 61
3.10 Intel/Microsoft的OMF文件格式 61
3.10.1 OMF記錄 62
3.10.2 OMF文件的細節 63
3.10.3 OMF格式小結 65
3.11 不同目標文件格式的比較 65
3.12 練習 66
3.13 項目 66
第4章 存儲空間管理 69
4.1 段和地址 69
4.2 簡單的存儲佈局 69
4.3 多種類型的段 70
4.4 段與頁面的對齊 72
4.5 公共塊和其他特殊段 72
4.5.1 公共塊 72
4.5.2 C++重複代碼消除 73
4.5.3 初始化和終結 75
4.5.4 IBM偽寄存器 76
4.5.5 專用鏈接表 78
4.5.6 x86的存儲分配策略 78
4.6 鏈接器控制腳本 79
4.7 嵌入式系統的存儲分配 81
4.8 實際使用的存儲分配策略 81
4.8.1 UNIX a.out鏈接器的存儲分配策略 81
4.8.2 ELF文件中的存儲分配策略 82
4.8.3 Windows鏈接器的存儲分配策略 83
4.9 練習 84
4.10 項目 85
第5章 符號管理 87
5.1 符號名綁定和解析 87
5.2 符號表的格式 87
5.2.1 模塊表 89
5.2.2 全局符號表 90
5.2.3 符號解析 91
5.2.4 特殊符號 91
5.3 名稱修改 92
5.3.1 簡單的C和Fortran名稱修改 92
5.3.2 C++類型編碼:類型和範圍 93
5.3.3 鏈接時類型檢查 95
5.4 弱外部符號和其他類型的符號 95
5.5 維護調試信息 96
5.5.1 行號信息 96
5.5.2 符號和變量信息 96
5.5.3 實際的問題 97
5.6 練習 98
5.7 項目 98
第6章 庫 99
6.1 庫的目的 99
6.2 庫的格式 99
6.2.1 使用操作系統 99
6.2.2 UNIX和Windows的歸檔文件 100
6.2.3 擴展到64位 102
6.2.4 Intel OMF庫文件 102
6.3 創建庫文件 103
6.4 搜索庫文件 104
6.5 性能問題 105
6.6 弱外部符號 105
6.7 練習 106
6.8 項目 106
第7章 重定位 109
7.1 硬件和軟件重定位 109
7.2 鏈接時重定位和加載時重定位 110
7.3 符號重定位和段重定位 110
7.4 基本的重定位技術 111
7.4.1 指令重定位 112
7.4.2 ECOFF段重定位 114
7.4.3 ELF重定位 115
7.4.4 OMF重定位 116
7.5 可重鏈接和可重定位的輸出格式 116
7.6 重定位項的其他格式 117
7.6.1 以鍊錶形式組織的引用 117
7.6.2 以位圖形式組織的引用 117
7.6.3 特殊段 117
7.7 特殊情況的重定位 118
7.8 練習 118
7.9 項目 119
第8章 加載和覆蓋 121
8.1 基本的加載過程 121
8.2 帶重定位的基本加載過程 122
8.3 位置無關代碼 122
8.3.1 TSS/360的位置無關代碼 123
8.3.2 為每個例程建立的指針表 123
8.3.3 目錄表 123
8.3.4 ELF的位置無關代碼 124
8.3.5 位置無關代碼的開銷和收益 126
8.4 自舉加載 127
8.5 基於樹狀結構的覆蓋技術 128
8.5.1 定義覆蓋技術 129
8.5.2 覆蓋技術的實現 131
8.5.3 覆蓋技術的其他細節 132
8.5.4 覆蓋技術小結 132
8.6 練習 13