新書推薦:
《
虚拟资本:金融怎样挪用我们的未来
》
售價:HK$
77.3
《
刻意练习不生气
》
售價:HK$
39.2
《
大宋理财:青苗法与王安石的金融帝国(全彩插图本)
》
售價:HK$
109.8
《
安全感是内心长出的盔甲
》
售價:HK$
67.0
《
快人一步:系统性能提高之道
》
售價:HK$
110.9
《
算法图解(第2版)
》
售價:HK$
78.2
《
科学的奇幻之旅
》
售價:HK$
77.3
《
画艺循谱:晚明的画谱与消闲
》
售價:HK$
143.4
|
內容簡介: |
全书共14章,第1章简要介绍了本书所基于的环境与工具;第2~6章针对编译的不同阶段,展开实践方面的相关阐述,并结合GCC和LLVM这两款具体的编译器进行论述;第7章介绍了多样化编译方面的实践;第8~13章从反编译的不同阶段介绍与反编译相关的可执行程序格式、程序解码和反汇编、中间表示生成、数据类型和控制流的恢复、过程定义恢复等内容;第14章简要介绍了反编译在信息安全方面的应用。
|
目錄:
|
目录?Contents
前言
第1章 实践的环境与工具1
1.1 实践环境概述1
1.2 词法分析生成器LEX1
1.3 语法分析生成器YACC3
1.4 编译器GCC4
1.5 编译器LLVM5
1.6 反汇编工具IDA6
1.7 反汇编工具OllyICE6
1.8 仿真与分析工具QEMU6
1.9 动态分析工具TEMU7
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
|
內容試閱:
|
Preface?前言“编译技术”是从事软件开发和信息安全相关工作的技术人员必须掌握的基础性技术,也是高等院校计算机科学与技术和软件专业的一门必修专业课,这是理论与实践结合非常强的领域,对提升开发人员的技术水平和大学生科学思维的养成、解决实际问题能力具有重要作用。“反编译技术”则是近几年发展起来的新兴技术,许多计算机软件或信息安全从业者非常关心该技术的发展,但目前这方面的书籍较少,与“编译技术”结合起来讲解的书也很少,从实践角度来剖析的更是少见。本书就是在这种需求以及作者在这两方面的科研实践的驱动下诞生的,目的是为计算机软件和信息安全从业者提供编译与反编译技术方面的知识和实战技巧。
本书的编写得到了解放军信息工程大学和机械工业出版社的大力支持,在此表示诚挚的谢意。本书中的一些材料来自本书主编主持的国家自然科学基金(项目编号:61472447)、国家“863”(项目编号:2006AA01Z408)、国家重大专项某子课题等项目的研究成果,在此对这些课题的支持表示衷心的感谢!
本书是机械工业出版社2016年4月出版的《编译与反编译技术》(ISBN 978-7-111-53412-9)一书的姊妹篇,配合学习和使用效果更佳。在本书中,作者着力阐述编译与反编译技术及实战方面的相关知识和实战技巧,力图使用通用的语言讲述抽象的原理、技术和实战技能,但限于作者水平,书中难免有错误与欠妥之处,恳请读者批评指正。
作者2017年3月
|
|