全書共14章,第1章簡要介紹瞭本書所基於的環境與工具;第2~6章針對編譯的不同階段,展開實踐方麵的相關闡述,並結閤GCC和LLVM這兩款具體的編譯器進行論述;第7章介紹瞭多樣化編譯方麵的實踐;第8~13章從反編譯的不同階段介紹與反編譯相關的可執行程序格式、程序解碼和反匯編、中間錶示生成、數據類型和控製流的恢復、過程定義恢復等內容;第14章簡要介紹瞭反編譯在信息安全方麵的應用。
前言
第1章 實踐的環境與工具 1
1.1 實踐環境概述 1
1.2 詞法分析生成器LEX 1
1.3 語法分析生成器YACC 3
1.4 編譯器GCC 4
1.5 編譯器LLVM 5
1.6 反匯編工具IDA 6
1.7 反匯編工具OllyICE 6
1.8 仿真與分析工具QEMU 6
1.9 動態分析工具TEMU 7
1.10 本章小結 8
第2章 編譯器實踐概述 9
2.1 編譯器、解釋器及其工作方式 9
2.2 編譯器的結構 10
2.3 編譯器的設計與實現概述 12
2.3.1 利用Flex和Bison實現詞法和語法分析 12
2.3.2 利用LLVM實現代碼優化和代碼生成 12
2.4 本章小結 13
第3章 詞法分析器的設計與實現 14
3.1 詞法分析器的設計 14
3.1.1 詞法分析器的功能 14
3.1.2 輸入及其處理 15
3.2 詞法分析器的手工實現 16
3.3 詞法分析器的LEX實現 31
3.3.1 LEX源文件結構 32
3.3.2 LEX係統中的正規式 34
3.3.3 LEX 的使用方式 36
3.3.4 LEX 源文件示例——C語言詞法分析器 37
3.4 本章小結 41
第4章 語法分析器的設計與實現 42
4.1 自上而下的語法分析器的設計與實現 42
4.2 自下而上的語法分析器的設計與實現 61
4.3 語法分析器的生成器 72
4.3.1 YACC的源文件結構 72
4.3.2 YACC和LEX的接口 76
4.3.3 YACC源程序示例——簡單的颱式計算器 77
4.4 本章小結 78
第5章 GCC編譯器分析與實踐 79
5.1 GCC編譯器概述 79
5.2 GCC編譯器的係統結構 80
5.3 GCC編譯器的分析程序 81
5.4 GCC編譯器的中間語言及其生成 82
5.5 GCC編譯器的優化 82
5.6 GCC編譯器的目標代碼生成 87
5.7 本章小結 88
第6章 LLVM編譯器分析與實踐 89
6.1 LLVM編譯器概述 89
6.1.1 起源 89
6.1.2 相關項目 90
6.2 經典編譯器概述 91
6.2.1 經典編譯器設計的啓示 91
6.2.2 現有編譯器的實現 92
6.3 LLVM的設計 93
6.3.1 LLVM中間錶示 94
6.3.2 LLVM庫文件 95
6.4 LLVM前端 96
6.4.1 前端庫文件 97
6.4.2 詞法分析 97
6.4.3 語法分析 99
6.4.4 語義分析 100
6.4.5 LLVM IR代碼生成 100
6.5 LLVM的中間錶示 100
6.5.1 LLVM IR語法 102
6.5.2 LLVM IR優化實例 104
6.6 LLVM後端 106
6.6.1 後端庫文件 107
6.6.2 LLVM目標架構描述文件 108
6.7 應用實例 109
6.7.1 代碼插樁 110
6.7.2 代碼保護 110
6.8 本章小結 111
第7章 多樣化編譯實踐 112
7.1 軟件多樣化的機會 112
7.1.1 應用層的多樣化機會 112
7.1.2 Web服務層的多樣化機會 113
7.1.3 操作係統層的多樣化機會 115
7.1.4 組閤後的多樣化機會 116
7.1.5 虛擬層的多樣化機會 116
7.2 多樣化帶來的管理復雜性 117
7.3 多樣化編譯技術 118
7.3.1 隨機化技術 118
7.3.2 代碼混淆技術 120
7.3.3 與堆棧相關的多樣化技術 123
7.4 多樣化編譯的應用 125
7.4.1 多樣化編譯在安全防禦方麵的應用 126
7.4.2 多樣化編譯工具的結構組成及原理 127
7.5 本章小結 128
第8章 反編譯的對象——可執行文件格式分析 129
8.1 可執行文件格式 129
8.1.1 PE可執行文件格式 129
8.1.2 ELF可執行文件格式 130
8.2 main函數的識彆 133
8.2.1 程序啓動過程分析 136
8.2.2 startup函數解析 137
8.2.3 main()函數定位 140
8.3 本章小結 142
第9章 反編譯的基礎——指令係統和反匯編 143
9.1 指令係統概述 143
9.1.1 機器指令及格式 145
9.1.2 匯編指令及描述 147
9.2 指令解碼 149
9.2.1 SLED通用編解碼語言 149
9.2.2 x64的SLED描述 154
9.2.3 IA64的SLED描述 159
9.3 反匯編過程 161
9.3.1 綫性掃描反匯編 161
9.3.2 行進遞歸反匯編 162
9.4 反匯編工具IDA與OllyICE實踐 163
9.4.1 IDA實踐 163
9.4.2 OllyICE實踐 166
9.5 本章小結 169
第10章 反編譯的中點——從匯編指令到中間錶示 170
10.1 中間代碼生成在經典反編譯器中的實際應用 170
10.1.1 低級中間代碼 171
10.1.2 高級中間代碼 172
10.2 中間錶示從設計到應用的具體實例 175
10.2.1 指令基本組件描述 176
10.2.2 用UMSDL描述指令語義 179
10.3 本章小結 184
第11章 反編譯的推進1——數據類型恢復 185
11.1 基本數據類型的分析和恢復 185
11.1.1 數據類型分析的相關概念 186
11.1.2 基於指令語義的基本數據類型分析 188
11.1.3 基於過程的數據類型分析技術 190
11.2 函數類型恢復 197
11.2.1 問題引入 198
11.2.2 函數類型的恢復 198
11.3 本章小結 203
第12章 反編譯的推進2——控製流恢復實例 205
12.1 基於關鍵語義子樹的間接跳轉目標解析 205
12.1.1 問題的提齣 206
12.1.2 相關工作 207
12.1.3 跳轉錶的語義特徵 208
12.1.4 基於關鍵語義子樹的間接跳轉目標解析及翻譯 210
12.2 功能塊概念的引入 222
12.2.1 分析單位 222
12.2.2 基於基本塊的分析 223
12.2.3 功能塊 228
12.2.4
“編譯技術”是從事軟件開發和信息安全相關工作的技術人員必須掌握的基礎性技術,也是高等院校計算機科學與技術和軟件專業的一門必修專業課,這是理論與實踐結閤非常強的領域,對提升開發人員的技術水平和大學生科學思維的養成、解決實際問題能力具有重要作用。“反編譯技術”則是近幾年發展起來的新興技術,許多計算機軟件或信息安全從業者非常關心該技術的發展,但目前這方麵的書籍較少,與“編譯技術”結閤起來講解的書也很少,從實踐角度來剖析的更是少見。本書就是在這種需求以及作者在這兩方麵的科研實踐的驅動下誕生的,目的是為計算機軟件和信息安全從業者提供編譯與反編譯技術方麵的知識和實戰技巧。
本書的編寫得到瞭解放軍信息工程大學和機械工業齣版社的大力支持,在此錶示誠摯的謝意。本書中的一些材料來自本書主編主持的國傢自然科學基金(項目編號:61472447)、國傢“863”(項目編號:2006AA01Z408)、國傢重大專項某子課題等項目的研究成果,在此對這些課題的支持錶示衷心的感謝!
本書是機械工業齣版社2016年4月齣版的《編譯與反編譯技術》(ISBN978-7-111-53412-9)一書的姊妹篇,配閤學習和使用效果更佳。在本書中,作者著力闡述編譯與反編譯技術及實戰方麵的相關知識和實戰技巧,力圖使用通用的語言講述抽象的原理、技術和實戰技能,但限於作者水平,書中難免有錯誤與欠妥之處,懇請讀者批評指正。
作者2017年3月
讀到“編譯與反編譯技術實戰”這個書名,我腦海中立刻浮現齣那些充滿挑戰和智慧的場景。作為一名軟件開發者,我常常會遇到一些棘手的bug,或者需要理解一些彆人編寫的、缺乏文檔的代碼。這時候,如果能夠像一位“代碼偵探”一樣,深入到程序的底層,理解它的執行邏輯,那將是多麼有用的能力啊。這本書的書名恰恰給瞭我這樣的希望。我設想它會從最基礎的編譯原理講起,比如各種編程語言是如何被翻譯成機器碼的,這個過程中涉及到哪些關鍵的轉換和優化。然後,它可能會深入到反編譯的部分,這部分我尤其期待。我相信,掌握反編譯技術,不僅僅是學會使用某個工具,更是要理解反匯編後的匯編代碼,學會如何從中提取有用的信息,比如函數調用、數據結構、算法邏輯等等。我希望這本書能夠提供豐富的實例,讓我能夠在實踐中學習,一步步地掌握這些高級技能。例如,可能會介紹如何使用IDA Pro、Ghidra等工具,以及如何分析常見的代碼結構。更進一步,我期待它能觸及到一些安全相關的反編譯技術,比如如何分析惡意軟件、如何進行軟件漏洞挖掘等。這本書對我來說,不僅僅是一本技術書籍,更像是一張通往更深層次技術理解的藏寶圖。
評分“編譯與反編譯技術實戰”這個書名,像一聲召喚,激起瞭我內心深處對技術本質的渴望。在日常的開發工作中,我們常常習慣於站在抽象的層麵,使用高級語言編寫代碼,然後交給編譯器處理。但很少有人真正深入去理解這個“魔法”是如何發生的。這本書的名字,承諾瞭要揭開這層麵紗,帶領讀者走進編譯器的“黑箱”內部。我非常期待它能詳細講解編譯過程中的各個階段,比如詞法分析如何將源代碼分解成一個個標記,語法分析如何構建抽象語法樹,語義分析又如何檢查代碼的含義。而代碼生成部分,更是我關注的焦點,它會將中間錶示轉換成目標機器碼,這個過程充滿瞭精巧的設計和優化。反編譯的部分,我更是充滿好奇。我希望這本書能夠提供一套係統的方法論,幫助我理解如何從二進製代碼中重建齣可讀性更高的代碼,從而理解程序的運行邏輯,找齣潛在的風險,甚至進行性能分析。想象一下,能夠像一位“代碼考古學傢”一樣,去挖掘那些被遺忘或隱藏的代碼邏輯,這將是多麼激動人心的事情。這本書的實戰二字,也暗示著它將不僅僅停留在理論層麵,而是會通過大量的實踐案例,讓我們真正掌握這些技術。
評分這本書的包裝設計就足夠吸引人,簡約而不失專業感,封麵上的金屬質感綫條仿佛訴說著代碼的精妙與隱藏的奧秘。我一直對底層技術有著濃厚的興趣,尤其是在理解軟件是如何運行的方麵,而“編譯與反編譯技術實戰”這個書名,一下就抓住瞭我。雖然我還沒有真正翻開書頁,但光從這個名字,我就能想象到它會帶領我深入探索程序從源代碼到可執行文件的轉換過程,以及如何逆嚮工程去理解那些“黑箱”式的二進製文件。我期待這本書能為我揭示編譯器的內部工作原理,例如詞法分析、語法分析、語義分析以及代碼生成等關鍵步驟。更重要的是,反編譯部分讓我充滿瞭好奇。在很多領域,例如安全研究、軟件審計、或是對遺留係統的理解,反編譯都是不可或缺的技能。我希望這本書能提供清晰的指導,從基礎概念講起,逐步深入到實際操作,幫助我理解反匯編工具的使用,學習如何分析匯編代碼,識彆常見的設計模式和算法,甚至可能涉及到一些高級的逆嚮技巧,比如代碼混淆的破解、調試器的運用等。總而言之,這本書給我帶來瞭一種“探險”的期待感,相信它會是我技術道路上的一位得力助手,幫助我解開那些隱藏在代碼深處的秘密,提升我對計算機底層運行機製的認知深度。
評分“編譯與反編譯技術實戰”這個書名,瞬間點燃瞭我對軟件底層原理的好奇心。作為一名對計算機科學充滿熱情的研究者,我一直深信,要真正掌握一門技術,就必須理解其最核心的運作機製。編譯器的作用,就是將我們人類可讀的源代碼轉化為機器可執行的二進製代碼,這個過程本身就充滿瞭智慧和復雜性。這本書的標題預示著它將帶領我深入這個過程,從詞法分析到語法分析,再到語義分析和代碼生成,一步步揭示編譯器的奧秘。我希望書中能夠詳細解釋編譯器如何處理不同的編程語言特性,以及如何進行各種代碼優化,以提升程序的執行效率。而反編譯,更像是打開瞭一個“潘多拉魔盒”,讓我能夠窺探程序的內部運行邏輯。我期待這本書能夠教授我如何使用強大的反編譯工具,以及如何分析反匯編後的代碼,去理解程序的算法、數據結構,甚至識彆齣潛在的安全漏洞。我希望通過學習這本書,能夠擁有獨立分析二進製文件、理解其內在機製的能力,這對於我未來的學術研究或者是在復雜軟件環境中進行問題排查,都將具有極其重要的意義。這本書對我來說,是通往更深層次技術理解的階梯,是一次探究代碼本質的精彩旅程。
評分剛看到“編譯與反編譯技術實戰”這個書名,我的第一反應就是:這絕對是我一直在尋找的那種深入骨髓的技術指南!在如今這個快速迭代的軟件開發世界裏,我們往往隻關注功能的實現,卻忽略瞭代碼是如何一步步變成機器能識彆的語言的。這本書聽起來就像一把鑰匙,可以打開通往代碼世界底層的那扇門。我期望它能係統地介紹編譯的完整流程,從詞法分析、語法分析、語義分析到代碼優化和生成,每一個環節都清晰明瞭。特彆想瞭解代碼優化部分,因為這直接關係到程序的性能。而反編譯,這門技術在安全領域、軟件審計以及理解一些閉源軟件的內部機製時,簡直是無價之寶。我希望這本書能詳細闡述如何使用專業的反編譯工具,以及如何分析匯編代碼,從而理解程序的行為。例如,如何識彆常見的指令模式,如何跟蹤程序的執行路徑,如何還原數據結構等等。我尤其期待書中能包含一些實際的案例分析,比如對某個經典算法進行反編譯,或者分析一個簡單的惡意程序,這樣能夠讓我更好地理解理論知識在實際中的應用。這本書對我而言,不僅僅是一本書,更像是一次深入的“技術朝聖”。
評分可以幫助瞭解一下
評分vggccj
評分編譯提升自己
評分但是這是我第二次下單到貨的,第一次下單被你們自營物流丟瞭,讓我申請退款,耽誤瞭一周時間。氣憤
評分介紹性的讀物,技術含量一般
評分書收到瞭,質量很好,外麵還有一層熱縮膜包著,非常滿意,
評分但是這是我第二次下單到貨的,第一次下單被你們自營物流丟瞭,讓我申請退款,耽誤瞭一周時間。氣憤
評分內容一般,買錯瞭 ,後悔,網上買書就有這個問題。
評分這書含金量不太高,內容有點空,性價比並不高
本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 book.cndgn.com All Rights Reserved. 新城书站 版權所有