编译与反编译技术实战

编译与反编译技术实战 pdf epub mobi txt 电子书 下载 2025

庞建民 等 著
图书标签:
  • 编译原理
  • 反汇编
  • 逆向工程
  • 程序分析
  • 代码安全
  • 调试器
  • 二进制分析
  • 漏洞挖掘
  • 软件破解
  • ARM
  • x86
想要找书就要到 新城书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 机械工业出版社
ISBN:9787111566175
版次:1
商品编码:12203788
品牌:机工出版
包装:平装
丛书名: 信息安全技术丛书
开本:16开
出版时间:2017-05-01
用纸:胶版纸
页数:359

具体描述

内容简介

全书共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月



《代码的秘密:从底层到应用的全景透视》 概述 在这个数字化浪潮席卷一切的时代,软件已经渗透到我们生活的方方面面。从智能手机上的应用程序,到支撑全球经济运转的复杂系统,代码构成了这一切的基石。然而,我们日常使用的软件,往往只是冰山一角。隐藏在这层光鲜界面之下的,是精心设计的逻辑、高效的算法,以及为了实现特定功能而付出的无数努力。 《代码的秘密:从底层到应用的全景透视》并非一本探讨如何破解软件、窃取信息的技术手册,也并非一本专注于特定编程语言的教程。相反,它是一次深入探索软件生命周期的旅程,一次对“代码如何被创造、被执行、以及如何被理解”的系统性梳理。本书旨在为读者揭示那些隐藏在高级编程语言和用户界面之下的核心概念,让我们从一个全新的视角去审视我们每天都在接触的数字世界。 本书将带领读者穿越抽象的编程语言,触及计算机执行代码的物理层面,再回溯到软件设计和开发的宏观视角。我们不关注具体的“如何做”,而是深入探讨“为什么这样做”以及“这样做背后的原理”。这是一次关于理解、关于洞察、关于构建更强大、更可靠软件的探索。 内容详解 第一部分:代码的诞生与执行 1. 从思想的火花到二进制的跳动:编程语言的演进与本质 高级语言的出现与优势: 我们将回顾高级编程语言(如C、Java、Python等)是如何从早期的机器语言和汇编语言演变而来。探讨它们如何通过抽象化,让开发者能够更专注于逻辑而非底层硬件的细节,极大地提高了开发效率和可读性。 编译器与解释器的角色: 详细阐述编译器和解释器这两种核心的程序转换工具。我们将深入理解它们的工作流程:编译器如何将高级语言源代码一次性地翻译成机器码,以及解释器如何逐行读取和执行源代码。对比它们的优缺点,如编译型语言的执行速度优势,和解释型语言的跨平台便利性。 汇编语言与机器码: 尽管我们不深入编写汇编,但理解汇编语言是理解计算机执行的必要步骤。我们将简要介绍汇编语言作为高级语言与机器码之间的桥梁,以及机器码(二进制指令)是如何直接被CPU识别和执行的。这部分将帮助读者建立起“代码最终是如何在硬件上运行”的基本认知。 内存管理与数据表示: 探讨程序在内存中是如何存储和访问数据的。介绍不同数据类型(整数、浮点数、字符等)在内存中的二进制表示方式,以及变量、数组、结构体等数据结构在内存中的布局。理解内存地址、指针(在C/C++等语言中)的概念,对于理解程序的执行过程至关重要。 2. CPU的语言:指令集与执行流程 指令集架构(ISA): 介绍不同CPU架构(如x86、ARM)的指令集架构。理解ISA定义了CPU能够理解和执行的指令集,这是硬件与软件交互的根本接口。 CPU的工作原理: 简要介绍CPU的组成部分(如ALU、寄存器、控制单元),以及指令周期的概念:取指令、解码、执行、写回。通过这个过程,读者将能具象化地理解CPU是如何一步步处理指令的。 栈与堆: 深入讲解程序运行时,栈(Stack)和堆(Heap)这两种重要的内存区域的作用。栈通常用于函数调用、局部变量存储,具有LIFO(后进先出)的特性;堆则用于动态内存分配,灵活性更高但也需要手动管理。理解它们有助于解释函数调用、递归、内存泄漏等现象。 第二部分:软件的设计与构建 1. 构建的蓝图:软件架构与设计模式 软件架构的重要性: 探讨软件架构在大型软件项目中的作用。它不仅仅是技术的堆砌,更是对系统整体结构、模块划分、组件交互方式的宏观规划。介绍常见的架构风格,如分层架构、微服务架构、事件驱动架构等,并分析它们适用的场景。 设计模式的智慧: 介绍面向对象设计中的经典设计模式,如单例模式、工厂模式、观察者模式、策略模式等。这些模式是解决软件开发中常见问题的成熟方案,它们能够提高代码的可复用性、可维护性和可扩展性。本书将侧重于解释这些模式解决的“问题”以及它们带来的“好处”,而非 rote 记忆。 模块化与解耦: 强调将大型系统分解为更小、更易于管理的模块的重要性。探讨如何通过接口、抽象和依赖注入等技术实现模块间的解耦,降低系统复杂度,提高开发效率和团队协作能力。 2. 高质量的保证:测试、调试与性能优化 测试的意义与方法: 详细阐述软件测试在保证软件质量中的不可或缺的作用。介绍不同层次的测试:单元测试、集成测试、系统测试、验收测试。强调自动化测试的重要性,以及测试驱动开发(TDD)等实践。 高效的调试技巧: 讲解如何系统地找出和修复软件中的错误(Bug)。介绍调试器(Debugger)的使用,包括设置断点、单步执行、查看变量值、分析调用栈等。分享一些常见的调试思路和方法,帮助读者在遇到问题时能够更快速地定位根源。 性能的追求: 探讨软件性能优化的基本原则和常用策略。分析性能瓶颈的常见来源,如算法效率低下、不合理的I/O操作、过度的内存分配等。介绍性能分析工具(Profiler)的使用,以及一些优化技巧,如算法改进、数据结构选择、缓存利用、并发处理等。 第三部分:代码的延伸与演进 1. 跨越边界:网络通信与分布式系统 网络协议基础: 介绍互联网通信的基础协议,如TCP/IP协议族,以及HTTP/HTTPS等应用层协议。理解它们如何工作,能够帮助我们理解网络应用的基本原理。 分布式系统的挑战: 探讨在多台计算机上协调运行的分布式系统所面临的挑战,如数据一致性、容错性、可伸缩性。介绍CAP定理等分布式系统理论,以及微服务、消息队列等技术在构建分布式系统中的作用。 API设计与交互: 讲解应用程序接口(API)的作用,以及如何设计清晰、易用的API。理解RESTful API等现代API设计风格,以及客户端与服务器之间的通信过程。 2. 代码的演变:版本控制与持续集成 版本控制系统(VCS): 详细阐述版本控制系统(如Git)的核心概念和重要性。理解分支、合并、提交等操作,以及如何利用VCS进行代码协作、追踪历史变更、回滚错误。 持续集成/持续部署(CI/CD): 介绍CI/CD流程的理念和实践。理解自动化构建、测试和部署如何提高软件交付的速度和质量,以及DevOps文化如何促进开发与运维的协同。 适用读者 《代码的秘密:从底层到应用的全景透视》面向所有对软件运行原理、系统构建和编程思想感兴趣的读者。无论您是初涉编程的爱好者,希望理解代码背后逻辑的学生,还是有一定开发经验的工程师,渴望拓宽技术视野、深化理解,本书都将为您提供宝贵的洞见。 如果您是一名对计算机科学理论感到好奇的学习者,本书将为您搭建一座从概念到实践的桥梁。如果您是一名开发者,希望在解决实际问题的同时,更能理解“为什么”以及“如何做得更好”,本书将助您提升设计和编码的深度。 本书的独特价值 本书最大的特点在于其“全景式”的视角,它不局限于某个特定的技术领域或编程语言,而是从宏观到微观,从理论到实践,勾勒出软件从无到有,从简单到复杂,最终服务于现实世界的完整图景。我们摒弃了对特定工具或框架的片面介绍,转而聚焦于那些支撑起整个软件工程体系的核心原理和普遍适用的思想。通过阅读本书,您将能: 构建更坚实的知识体系: 理解编程语言、操作系统、计算机硬件之间的内在联系。 提升解决问题的能力: 掌握调试和性能优化的系统性方法。 做出更明智的设计决策: 领会架构和设计模式的深远影响。 培养全局观的思维: 从更广阔的视角审视软件开发的全生命周期。 激发对技术的好奇心: 发现代码世界中隐藏的无限可能。 结语 《代码的秘密:从底层到应用的全景透视》是一次对“代码”这一抽象概念的深度挖掘。它不是为了揭秘,而是为了启迪。我们相信,当您理解了代码的生成、执行、组织、优化和演进的整个过程,您将对您手中掌握的工具,以及您所构建的系统,拥有前所未有的深刻认知。这是一场关于理解的旅程,而理解,是创造的起点。

用户评价

评分

这本书的包装设计就足够吸引人,简约而不失专业感,封面上的金属质感线条仿佛诉说着代码的精妙与隐藏的奥秘。我一直对底层技术有着浓厚的兴趣,尤其是在理解软件是如何运行的方面,而“编译与反编译技术实战”这个书名,一下就抓住了我。虽然我还没有真正翻开书页,但光从这个名字,我就能想象到它会带领我深入探索程序从源代码到可执行文件的转换过程,以及如何逆向工程去理解那些“黑箱”式的二进制文件。我期待这本书能为我揭示编译器的内部工作原理,例如词法分析、语法分析、语义分析以及代码生成等关键步骤。更重要的是,反编译部分让我充满了好奇。在很多领域,例如安全研究、软件审计、或是对遗留系统的理解,反编译都是不可或缺的技能。我希望这本书能提供清晰的指导,从基础概念讲起,逐步深入到实际操作,帮助我理解反汇编工具的使用,学习如何分析汇编代码,识别常见的设计模式和算法,甚至可能涉及到一些高级的逆向技巧,比如代码混淆的破解、调试器的运用等。总而言之,这本书给我带来了一种“探险”的期待感,相信它会是我技术道路上的一位得力助手,帮助我解开那些隐藏在代码深处的秘密,提升我对计算机底层运行机制的认知深度。

评分

刚看到“编译与反编译技术实战”这个书名,我的第一反应就是:这绝对是我一直在寻找的那种深入骨髓的技术指南!在如今这个快速迭代的软件开发世界里,我们往往只关注功能的实现,却忽略了代码是如何一步步变成机器能识别的语言的。这本书听起来就像一把钥匙,可以打开通往代码世界底层的那扇门。我期望它能系统地介绍编译的完整流程,从词法分析、语法分析、语义分析到代码优化和生成,每一个环节都清晰明了。特别想了解代码优化部分,因为这直接关系到程序的性能。而反编译,这门技术在安全领域、软件审计以及理解一些闭源软件的内部机制时,简直是无价之宝。我希望这本书能详细阐述如何使用专业的反编译工具,以及如何分析汇编代码,从而理解程序的行为。例如,如何识别常见的指令模式,如何跟踪程序的执行路径,如何还原数据结构等等。我尤其期待书中能包含一些实际的案例分析,比如对某个经典算法进行反编译,或者分析一个简单的恶意程序,这样能够让我更好地理解理论知识在实际中的应用。这本书对我而言,不仅仅是一本书,更像是一次深入的“技术朝圣”。

评分

“编译与反编译技术实战”这个书名,像一声召唤,激起了我内心深处对技术本质的渴望。在日常的开发工作中,我们常常习惯于站在抽象的层面,使用高级语言编写代码,然后交给编译器处理。但很少有人真正深入去理解这个“魔法”是如何发生的。这本书的名字,承诺了要揭开这层面纱,带领读者走进编译器的“黑箱”内部。我非常期待它能详细讲解编译过程中的各个阶段,比如词法分析如何将源代码分解成一个个标记,语法分析如何构建抽象语法树,语义分析又如何检查代码的含义。而代码生成部分,更是我关注的焦点,它会将中间表示转换成目标机器码,这个过程充满了精巧的设计和优化。反编译的部分,我更是充满好奇。我希望这本书能够提供一套系统的方法论,帮助我理解如何从二进制代码中重建出可读性更高的代码,从而理解程序的运行逻辑,找出潜在的风险,甚至进行性能分析。想象一下,能够像一位“代码考古学家”一样,去挖掘那些被遗忘或隐藏的代码逻辑,这将是多么激动人心的事情。这本书的实战二字,也暗示着它将不仅仅停留在理论层面,而是会通过大量的实践案例,让我们真正掌握这些技术。

评分

读到“编译与反编译技术实战”这个书名,我脑海中立刻浮现出那些充满挑战和智慧的场景。作为一名软件开发者,我常常会遇到一些棘手的bug,或者需要理解一些别人编写的、缺乏文档的代码。这时候,如果能够像一位“代码侦探”一样,深入到程序的底层,理解它的执行逻辑,那将是多么有用的能力啊。这本书的书名恰恰给了我这样的希望。我设想它会从最基础的编译原理讲起,比如各种编程语言是如何被翻译成机器码的,这个过程中涉及到哪些关键的转换和优化。然后,它可能会深入到反编译的部分,这部分我尤其期待。我相信,掌握反编译技术,不仅仅是学会使用某个工具,更是要理解反汇编后的汇编代码,学会如何从中提取有用的信息,比如函数调用、数据结构、算法逻辑等等。我希望这本书能够提供丰富的实例,让我能够在实践中学习,一步步地掌握这些高级技能。例如,可能会介绍如何使用IDA Pro、Ghidra等工具,以及如何分析常见的代码结构。更进一步,我期待它能触及到一些安全相关的反编译技术,比如如何分析恶意软件、如何进行软件漏洞挖掘等。这本书对我来说,不仅仅是一本技术书籍,更像是一张通往更深层次技术理解的藏宝图。

评分

“编译与反编译技术实战”这个书名,瞬间点燃了我对软件底层原理的好奇心。作为一名对计算机科学充满热情的研究者,我一直深信,要真正掌握一门技术,就必须理解其最核心的运作机制。编译器的作用,就是将我们人类可读的源代码转化为机器可执行的二进制代码,这个过程本身就充满了智慧和复杂性。这本书的标题预示着它将带领我深入这个过程,从词法分析到语法分析,再到语义分析和代码生成,一步步揭示编译器的奥秘。我希望书中能够详细解释编译器如何处理不同的编程语言特性,以及如何进行各种代码优化,以提升程序的执行效率。而反编译,更像是打开了一个“潘多拉魔盒”,让我能够窥探程序的内部运行逻辑。我期待这本书能够教授我如何使用强大的反编译工具,以及如何分析反汇编后的代码,去理解程序的算法、数据结构,甚至识别出潜在的安全漏洞。我希望通过学习这本书,能够拥有独立分析二进制文件、理解其内在机制的能力,这对于我未来的学术研究或者是在复杂软件环境中进行问题排查,都将具有极其重要的意义。这本书对我来说,是通往更深层次技术理解的阶梯,是一次探究代码本质的精彩旅程。

评分

书收到了,质量很好,外面还有一层热缩膜包着,非常满意,

评分

vggccj

评分

介绍性的读物,技术含量一般

评分

内容一般,买错了 ,后悔,网上买书就有这个问题。

评分

这本书不应该是一个博导带领一帮博士写的书,严重怀疑是在读研究生写的书。1-8章水了8章不说,9-13章以为能看到点干货,结果大失所望,从各个论文里摘些概述和结论,缺少很多过程的描述。14章对应用领域做了一下展望,遮遮掩掩,浮于水面,还没一篇论文来得深入。看这本书,还不如直接阅读Cifuentes C. Reverse Compilation Techniques。严重不建议购买此书。

评分

vggccj

评分

编译提升自己

评分

可以帮助了解一下

评分

编译提升自己

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有