內容簡介
本書首先從正嚮角度介紹編譯係統的一般原理和基本實現技術,主要內容有詞法分析、語法分析、語義分析與處理、符號錶、運行時存儲組織、優化、目標代碼生成和多樣化編譯等;然後從反嚮角度介紹反編譯的相關原理和技術,包括反編譯及其關鍵要素、反編譯器的整體框架、反編譯中的指令解碼和語義描述與映射、反編譯中的恢復技術、編譯優化的反嚮處理、反編譯與信息安全等。 本書可作為計算機及信息安全相關專業高年級本科生的教科書或教學參考書,也可供計算機相關專業研究生和從事編程或者軟件逆嚮分析工作的工程技術人員參考。
目錄
前言
教學建議
第1章 引論 1
1.1 編譯器與解釋器 1
1.2 編譯過程 2
1.3 編譯器結構 2
1.4 編譯器的分類及生成 3
1.5 高級語言及其分類 3
1.6 編譯的前端和後端 4
1.7 C語言程序的編譯流程 4
1.8 UNIX/Linux環境中的make和makefile 7
1.9 本章小結 12
習題 12
第2章 詞法分析的理論與實踐 13
2.1 詞法分析器的需求分析 13
2.1.1 詞法分析器的功能 13
2.1.2 分離詞法分析的原因 14
2.2 詞法分析器的設計 15
2.2.1 輸入及其處理 15
2.2.2 單詞符號的描述:正規文法和正規式 15
2.2.3 單詞符號的識彆:超前搜索 21
2.2.4 狀態轉換圖及其實現 22
2.3 有窮自動機 28
2.3.1 確定的有窮自動機 28
2.3.2 非確定的有窮自動機 29
2.3.3 NFA到DFA的轉化 29
2.3.4 DFA的化簡 31
2.4 正規式和有窮自動機的等價性 33
2.5 詞法分析器的生成器 35
2.6 本章小結 37
習題 37
第3章 語法分析 39
3.1 上下文無關文法 39
3.1.1 上下文無關文法的定義 39
3.1.2 語法樹和推導 40
3.1.3 二義性 43
3.2 語法分析器的功能 45
3.3 自上而下的語法分析 45
3.3.1 LL(1)分析方法 45
3.3.2 預測分析程序 53
3.4 自下而上的語法分析 56
3.4.1 移進與歸約 56
3.4.2 LR分析 57
3.4.3 LR(0)分析 60
3.4.4 SLR(1)分析 66
3.4.5 LR(1)分析 69
3.4.6 LALR(1)分析 72
3.4.7 分析方法比較 76
3.5 語法分析器的生成器 76
3.6 本章小結 78
習題 78
第4章 語義分析與處理 81
4.1 語法製導定義與語法製導翻譯 82
4.2 中間語言 91
4.3 語句的翻譯 95
4.3.1 說明語句的翻譯 95
4.3.2 賦值語句的翻譯 100
4.3.3 控製語句的翻譯 106
4.3.4 過程調用語句的翻譯 120
4.4 本章小結 121
習題 121
第5章 符號錶 124
5.1 符號錶的作用 124
5.2 符號錶的內容 125
5.3 符號錶的組織 127
5.4 符號錶的實現 129
5.5 名字的作用域 132
5.6 本章小結 135
習題 135
第6章 運行時存儲組織 137
6.1 靜態存儲分配 138
6.2 動態存儲分配 138
6.3 棧式動態存儲分配 140
6.3.1 簡單的棧式存儲分配的實現 140
6.3.2 嵌套過程語言的棧式實現 141
6.4 堆式動態存儲分配 145
6.5 存儲分配與安全性 146
6.5.1 緩衝區溢齣原理 146
6.5.2 緩衝區溢齣的防範 147
6.6 本章小結 148
習題 148
第7章 優化 150
7.1 優化技術簡介 150
7.2 局部優化 151
7.3 循環優化 161
7.4 全局優化 172
7.4.1 到達–定值數據流分析 173
7.4.2 活躍變量數據流分析和
定值–引用數據流分析 178
7.4.3 可用錶達式數據流分析 182
7.4.4 復寫傳播數據流分析 186
7.5 本章小結 192
習題 193
第8章 目標代碼生成 196
8.1 代碼生成器設計中的問題 196
8.1.1 代碼生成器的輸入 196
8.1.2 目標程序 196
8.1.3 指令選擇 197
8.1.4 變量存儲空間分配 197
8.2 寄存器分配 197
8.2.1 寄存器分配描述 198
8.2.2 綫性掃描的寄存器分配 199
8.2.3 圖著色的寄存器分配 201
8.3 窺孔優化 202
8.3.1 規則提取 202
8.3.2 掃描匹配和等價語義轉換 203
8.3.3 舉例說明 205
8.4 一個代碼生成器實例 205
8.4.1 待用信息和活躍信息 206
8.4.2 寄存器描述和地址描述 207
8.4.3 代碼生成算法 208
8.5 本章小結 209
習題 209
第9章 多樣化編譯 210
9.1 軟件多樣化需求 210
9.2 多變體執行及其環境 211
9.3 海量軟件多樣性 212
9.4 多樣化編譯技術 213
9.5 多樣化編譯的應用 216
9.6 本章小結 217
習題 217
第10章 反編譯及其關鍵要素 218
10.1 什麼是反編譯 218
10.1.1 反編譯概念 218
10.1.2 編譯與反編譯 219
10.1.3 反編譯器 219
10.2 反編譯的基本過程 219
10.2.1 按照反編譯技術實施的順序劃分 220
10.2.2 按照反編譯實踐中的具體操作劃分 224
10.2.3 按照反編譯器的功能塊劃分 227
10.3 反編譯的前世今生 228
10.3.1 建立——20世紀60年代 228
10.3.2 發展——20世紀70年代 229
10.3.3 瓶頸期——20世紀80年代 231
10.3.4 反編譯的春天來瞭——20世紀90年代 232
10.3.5 持續的研究——進入21世紀 235
10.3.6 身邊的反編譯——我國對反編譯的研究 236
10.4 反編譯的局限、先決條件和評價指標 236
10.4.1 反編譯技術麵臨的宏觀問題 236
10.4.2 反編譯技術麵臨的技術性問題 237
10.4.3 反編譯的先決條件 238
10.4.4 反編譯器的評價指標 238
10.5 反編譯的應用領域和研究重點 239
10.5.1 應用領域 239
10.5.2 研究重點 239
10.6 本章小結 240
習題 240
第11章 反編譯器的整體框架 241
11.1 “I型”反編譯器的框架 241
11.1.1 上下文環境的銜接 241
11.1.2 dcc反編譯器的框架 242
11.2 經典多源反編譯框架簡介 243
11.2.1 UQBT 243
11.2.2 Hex-Rays 247
11.2.3 BAP 247
11.3 具備靜態反編譯能力的二進製翻譯器ITA 248
11.3.1 ITA總體框架 248
11.3.2 二進製文件解碼 249
11.3.3 語義映射 251
11.3.4 過程抽象分析 251
11.3.5 優化代碼消除 251
11.3.6 C代碼産生器 252
11.3.7 從ITA看靜態反編譯存在的普遍問題 252
11.3.8 對ITA靜態反編譯框架的擴展ITA-E 253
11.4 具備動靜結閤反編譯能力的二進製翻譯器UTP-MBC 254
11.4.1 UTP-MBC架構設計需要解決的主要問題 255
11.4.2 UTP-MBC翻譯器的相關研究 256
11.4.3 一體化翻譯架構設計 257
11.5 本章小結 260
習題 261
第12章 反編譯中的指令解碼和語義描述與映射 262
12.1 指令描述和指令解碼 262
12.1.1 相關研究 262
12.1.2 編解碼描述語言SLED 263
12.1.3 基於SLED的x64指令描述和解碼 266
12.1.4 SLED在多源一體解碼體係中的應用 270
12.2 指令的語義映射 275
12.2.1 相關研究 276
12.2.2 語義描述語言SSL 276
12.2.3 中間錶示 282
12.2.4 一個示例——指令原子語義描述語言ASDL 284
12.3 本章小結 288
習題 288
第13章 反編譯中的恢復技術 290
13.1 數據流和數據恢復 290
13.1.1 數據流分析 290
13.1.2 數據恢復方法——以IA-64架構上的反編譯為例 297
13.1.3 小結 310
13.2 高級控製流恢復 310
13.2.1 控製流恢復概述 311
13.2.2 高級控製流恢復分析 315
13.2.3 結構化算法介紹 318
13.2.4 可能的問題與解決辦法 325
13.2.5 小結 325
13.3 過程恢復 325
13.3.1 相關知識簡介 326
13.3.2 庫函數的識彆技術 328
13.3.3 用戶自定義函數的過程恢復 335
13.4 本章小結 349
習題 349
第14章 編譯優化的反嚮處理 350
14.1 常用的編譯優化方法 350
14.1.1 編譯優化的原則 350
14.1.2 優化手段的分類 350
14.2 部分編譯優化的消除——謂詞執行 351
14.2.1 謂詞執行 351
14.2.2 IA-64平颱的謂詞指令 351
14.2.3 謂詞消除 353
14.3 本章小結 358
習題 358
第15章 反編譯與信息安全 359
15.1 基於反編譯的惡意行為識彆 359
15.1.1 惡意代碼檢測背景 359
15.1.2 文件格式異常信息 363
15.1.3 指令序列層行為信息提取 366
15.1.4 函數調用信息提取 369
15.2 反編譯在惡意代碼檢測中的應用 377
15.2.1 係統架構的提齣 377
15.2.2 推理算法研究的基本內容 378
15.2.3 惡意特徵生成 380
15.2.4 推理規則庫的建立 381
15.2.5 多重多維模糊推理算法的研究與實現 385
15.3 本章小結 391
習題 391
參考文獻 392
前言/序言
前言 “編譯原理”是高等院校計算機科學與技術和軟件工程專業的必修專業課之一,是一門理論與實踐相結閤的課程,對大學生科學思維的養成和解決實際問題能力的提高具有重要作用。“編譯技術”是“編譯原理”課程中介紹的關鍵技術,已經被廣大計算機軟件從業者所掌握和熟悉。“反編譯技術”則是近幾年得以迅速發展的新興技術,許多計算機軟件或信息安全從業者非常關心該項技術,但目前這方麵的書籍較少,與“編譯技術”結閤起來講解的更少。本書就是在這種需求以及編者在這兩方麵的科研實踐體會的驅動下誕生的,目的是為計算機軟件和信息安全從業者提供編譯與反編譯技術方麵的知識和技能。 本書的編寫得到瞭中國人民解放軍信息工程大學和機械工業齣版社的支持,在此錶示誠摯的謝意。 本書由龐建民教授確定內容的選取和組織結構,由龐建民、陶紅偉、劉曉楠、嶽峰具體執筆,龐建民編寫第1、9章,陶紅偉編寫第2、3、4、5、7章,劉曉楠編寫第10、11、12、13章,嶽峰編寫第6、8、14、15章,最後由龐建民定稿。趙榮彩教授對本書的編寫提齣瞭許多寶貴的意見和建議,在此錶示衷心的感謝。 本書力圖反映編譯與反編譯及其相關領域的基礎知識和發展方嚮,嘗試用通用的語言講述抽象的原理與技術,由於編者水平有限,書中難免有錯誤與欠妥之處,懇請讀者批評指正。 編者 教學建議 教學內容 教學要點及教學要求 課時安排 計算機及安全專業 非計算機專業 教學內容 教學要點及教學要求 課時安排 計算機及安全專業 非計算機專業 第1章 引論 熟悉編譯器和解釋器的概念,掌握二者的區彆。瞭解編譯的過程,熟悉編譯器的結構、編譯器的分類及其生成方式、高級語言的分類及其特點,理解編譯前端和後端的概念,掌握C語言程序的編譯流程,瞭解UNIX/Linux環境中make和makefile的概念及其應用 2~4 2~3 (選講) 第2章 詞法分析的理論與實踐 瞭解詞法分析器的功能以及輸齣形式,熟悉詞法分析器的結構和超前搜索技術。掌握狀態轉換圖及其實現、正規式與正規文法、NFA與DFA、正規式與有窮自動機的關係以及DFA的最小化。瞭解詞法分析器的自動産生工具及其使用 6~7 5~6 (選講) 第3章 語法分析 掌握上下文無關文法的相關概念,理解自上而下語法分析的概念,掌握LL(1)分析法、左遞歸和迴溯的消除方法,學會構造預測分析程序。理解自下而上語法分析的概念,掌握LR(0)分析、SLR(1)分析、LR(1)分析和LALR(1)分析。學會使用YACC工具 8~10 6~7 (選講) 第4章 語義分析與 處理 理解語法製導定義和語法製導翻譯模式的相關概念,理解語法製導翻譯的基本思想。掌握屬性計算的常用方法,包括基於依賴圖的屬性計算方法、基於樹遍曆的屬性計算方法和基於一遍掃描的屬性計算方法。掌握S-屬性文法的自下而上計算、L-屬性文法的自上而下翻譯。理解中間語言的基本概念,掌握錶達式的逆波蘭錶示法、DAG錶示法、三地址代碼。掌握說明語句的翻譯、賦值語句的翻譯、布爾錶達式的翻譯、控製語句的翻譯和過程調用的處理 7~8 4~6 (選講) 第5章 符號錶 瞭解符號錶的作用、內容、組織和實現等 1~2 1~2 (選講) 第6章 運行時 存儲組織 熟悉程序運行時的存儲區域劃分,掌握靜態存儲分配、動態存儲分配的思想。充分理解棧式動態存儲分配中簡單的棧式存儲分配的實現和嵌套過程語言的棧式實現,能夠分析程序運行時的棧的變化情況。瞭解堆式動態存儲分配的兩種途徑:定長塊管理、變長塊管理。熟悉並掌握存儲分配存在的安全性問題,充分理解緩衝區溢齣的原理,瞭解相關的防範方法 3~4 2~4 (選講) 第7章 優化 理解優化和基本塊的基本概念。掌握將三地址語句序列劃分為基本塊的算法和以基本塊為結點的控製流圖構造方法。掌握常用的局部優化技術,包括刪除公共子錶達式、復寫傳播、刪除無用代碼、閤並已知量、常數傳播等。掌握基於基本塊的DAG的局部優化 掌握如何利用程序的控製流程圖來定義和查找循環,掌握常用的循環優化技術,包括循環展開、代碼外提、強度削弱和刪除歸納變量 瞭解進行數據流分析的幾種常用方法,包括到達–定值數據流分析、活躍變量數據流分析和可用錶達式數據流分析等,瞭解如何利用上述數據流分析結果進行全局範圍內常數傳播、閤並已知量、刪除公共子錶達式和復寫傳播 6~8 4~6 (選講) 第8章 目標代碼生成 熟悉並掌握代碼生成器設計中的問題,掌握綫性掃描的寄存器分配方法的思想,並充分理解綫性掃描寄存器分配算法。瞭解圖著色的寄存器分配算法的思想及典型的實現過程,熟悉並掌握窺孔優化的三種典型方法,能夠分析簡單的代碼生成過程 5~6 3~4 (選講) 第9章 多樣化編譯 瞭解軟件多樣化的需求,特彆是安全方麵的需求;掌握多變體代碼的特點、執行環境。理解海量軟件多樣性的概念及其目的,掌握多樣化編譯所涉及的多項技術,瞭解多樣化編譯技術的實現和應用範圍 2~4 1~2 (選講) 第10章 反編譯及其關鍵要素 熟悉並掌握反編譯的概念,其與編譯的關係,以及反編譯器的構成。熟悉反編譯的基本過程,瞭解反編譯技術的發展曆程。熟悉反編譯技術的局限、先決條件和評價指標,瞭解反編譯的應用領域和研究重點 4~5 2~4 (選講) 第11章 反編譯器的整體框架 熟悉並掌握經典的、純粹的反編譯器的框架設計,瞭解經典多源反編譯框架的基本構成。瞭解兩款以反編譯器為核心的二進製翻譯係統的框架構造,熟悉從單一功能的反編譯器到支持多源平颱的反編譯器,乃至利用反編譯技術實現的靜態二進製翻譯器的設計思路、基本技術、軟件係統的構造和主要功能 3~4 2~3 第12章 反編譯中的指令解碼和語義描述與映射 熟悉並掌握二進製0/1代碼嚮匯編碼轉換過程中的主要知識:指令描述和解碼。熟悉並掌握匯編級代碼嚮中間錶示轉換過程中的基本知識:指令的語義映射 3~4 1~3 (選講) 第13章 反編譯中的恢復技術 熟悉數據流(或數據)恢復的過程,掌握高級控製流恢復的基本方法。掌握從低級代碼中識彆並還原成高級語言中的過程和函數的主要方法 3~4 2~3 (選講) 第14章 編譯優化的反嚮處理 瞭解常用的編譯優化方法,熟悉並掌握謂詞執行的概念,掌握謂詞消除的方法 3~4 2~3 (選講) 第15章 反編譯與信息安全 瞭解惡意代碼檢測的背景,熟悉並掌握反編譯技術在三種層次上的行為提取方法。瞭解基於推理的程序惡意性分析係統及功能模塊 4~6 3~4 教學總學時建議 60~80 40~60 說明: 1. 計算機或信息安全專業本科教學使用本教材時,建議課堂授課學時數為60 ~ 80(包含習題課、課堂討論等必要的課堂教學環節,實驗另行安排學時),不同學校可以根據各自的教學要求和計劃學時數酌情對教材內容進行取捨。 2. 非計算機專業的師生使用本教材時可適當降低教學要求。若授課學時數少於60,建議主要學習第1章、第2章、第3章、第4章、第6章、第7章、第8章、第10章、第11章、第12章,第13章、第15章的內容可以適當簡化,第5章、第9章、第14章可以不做要求。
編譯與反編譯技術 下載 mobi epub pdf txt 電子書 格式