《编译与反编译技术》——第一章 引论 1.1节编译器与解释器


人类之间的交流是通过语言进行的,但语言不是唯一的,不同的语言之间需要翻译,这就导致了翻译行业的建立。人与计算机之间也是通过语言进行交流的,但人类能理解的语言与机器能理解的语言是不同的,也需要翻译,这就导致了系列编译器的诞生。编译技术所讨论的问题,就是如何把符合人类思维方式的意愿(源程序)翻译成计算机能够理解和执行的形式(目标程序)。实现从源程序到目标程序转换的程序,称为编译程序或编译器。反编译技术所讨论的问题,就是如何把计算机能够理解和执行的形式(目标程序)翻译成便于人类理解的形式(高级语言源程序或流程图)。实现从目标程序到便于人类理解的系列文档的转换,称为反编译程序或反编译器。

编译器这个术语是由Grace Murray Hopper在20世纪50年代初期提出的,现代意义上最早的编译器是20世纪50年代后期的Fortran编译器,该编译器验证了经过编译的高级语言的生命力,也为后续高级语言和编译器的大量涌现奠定了基础。

反编译技术起源于20世纪60年代,比编译技术晚10年左右,但反编译技术的成熟度远不如编译技术。在半个世纪的发展过程中,出现了不少实验性的反编译器,其中以Dcc、Boomerang和IDA Pro的反编译插件Hex_rays最为著名。但这些反编译器都有这样或那样的缺陷。例如,Dcc只能识别最简单的数据类型;Boomerang无法识别复杂的数据结构,如C++的类和多维数组;Hex_rays只能产生可读性较低的C伪代码,且同样无法识别复杂的数据结构。因此,反编译技术还有很广阔的研究与发展空间。

本章仅对编译器和编译流程方面的知识进行概要阐述,反编译方面的概要介绍将在第10章给出。

1.1 编译器与解释器

计算机的硬件只能识别和理解由0、1字符串组成的机器指令序列,即目标程序或机器指令程序。在计算机刚刚发明的时期,人们只能向计算机输入机器指令程序来让它进行简单的计算。由于机器指令程序不易被人类理解,用它编写程序既困难又容易出错,于是就引入了代替0、1字符串的由助记符号表示的指令,即汇编指令,汇编指令的集合称为汇编语言,汇编指令序列称为汇编语言程序。但汇编程序实际上与机器语言程序是一一对应的,均要求程序员按照指令工作的方式来思考和解决问题,两者之间并无本质区别。因此,它们被称为面向机器的语言或低级语言。

随着计算机的发展和应用需求的增长,程序员的需求也大幅增长,但能够用机器语言或汇编语言编程的人员数量满足不了这种需求,许多科技工作者也想自己动手编写程序,因此,需要抽象度更高、功能更强的语言来作为程序设计语言,于是产生了面向各类应用的便于人类理解与运用的程序设计语言,即高级语言。尽管人类可以借助高级语言来编写程序,但计算机硬件真正能够识别和理解的语言还是由0、1组成的机器语言,这就需要在高级语言与机器语言之间建立桥梁,使得高级语言能够过渡到机器语言。也就是说,需要若干“翻译”,把各类高级语言翻译成机器语言。语言通常被分成三个层次:高级语言、汇编语言、机器语言。高级语言可以翻译成机器语言,也可以翻译成汇编语言,这两种翻译都称为编译。汇编语言到机器语言的翻译称为汇编。编译和汇编属于正向工程,有时还需要将机器语言翻译成汇编语言或高级语言,这通常称为反汇编或反编译,属于逆向工程。

在编译器工作方式下,源程序的翻译和翻译后程序的运行是两个相互独立的阶段。用户输入源程序,编译器对该源程序进行编译,生成目标程序,这个阶段称为编译阶段。目标程序在适当的输入下执行,最终得到运行结果的过程称为运行阶段。

解释器是另一种形式的翻译器。它把翻译和运行结合在一起进行,边翻译源程序,边执行翻译结果,这种工作方式被称为解释器工作方式。

换句话说,编译器的工作相当于翻译一本原著,原著相当于源程序,译著相当于目标程序,计算机的运行相当于阅读一本译著,这时,原著和翻译人员并不需要在场,译著是主角。解释器的工作相当于现场翻译,外宾和翻译都要在场,翻译边听外宾讲话,边翻译给听众,翻译是主角。解释器与编译器的主要区别是:运行目标程序时的控制权在解释器而不是目标程序。

时间: 2024-09-14 19:42:10

《编译与反编译技术》——第一章 引论 1.1节编译器与解释器的相关文章

《编译与反编译技术》—第2章2.1节词法分析器的需求分析

本节书摘来自华章出版社<编译与反编译技术>一书中的第2章,第2.1节词法分析器的需求分析,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问"华章计算机"公众号查看. 第2章 词法分析的理论与实践 词法分析是编译过程的第一步,也是编译过程必不可少的步骤.编译过程中执行词法分析的程序称为词法分析器.本章主要介绍词法分析器的手动构造和自动构造的原理. 2.1 词法分析器的需求分析 本节首先介绍词法分析器的功能及其输出的单词符号的表示方式,然后研究将词法分析独立出来的原因.

《编译与反编译技术》—第1章1.8节UNIX/Linux环境中的make和makefile

本节书摘来自华章出版社<编译与反编译技术>一书中的第1章,第1.8节UNIX/Linux环境中的make和makefile ,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问"华章计算机"公众号查看. 1.8 UNIX/Linux环境中的make和makefile 在UNIX或Linux环境中,make是一个非常重要和经常使用的编译工具.无论是自己进行项目开发还是安装应用软件,都会经常用到make或make install.使用make工具,可以将大型的开发项目分解成

《编译与反编译技术》—第2章2.2词法分析器的设计

本节书摘来自华章出版社<编译与反编译技术>一书中的第2章,第2.2节词法分析器的设计,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问"华章计算机"公众号查看. 2.2 词法分析器的设计 下面将词法分析器作为一个独立的子程序来考虑其设计.本节主要探讨实现词法分析器的关键技术和词法分析器的手工实现. 2.2.1 输入及其处理 词法分析器的结构如图2-3所示.词法分析器首先将源程序文本输入一个缓冲区中,该缓冲区称为输入缓冲区,单词符号的识别可以直接在输入缓冲区中进行.但在

《编译与反编译技术》—第2章2.3节有穷自动机

本节书摘来自华章出版社<编译与反编译技术>一书中的第2章,第2.3节有穷自动机,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问"华章计算机"公众号查看. 2.3 有穷自动机 前面在介绍词法分析程序的手工实现时引入了状态转换图,为了讨论词法分析器的自动生成,需要将上述状态图的概念形式化,即引入有穷自动机.有穷自动机分为确定的有穷自动机和非确定的有穷自动机. 2.3.1 确定的有穷自动机 定义2.9(确定的有穷自动机(Deterministic Finite Autom

《编译与反编译技术》—第1章1.7节C语言程序的编译流程

本节书摘来自华章出版社<编译与反编译技术>一书中的第1章,第1.7节C语言程序的编译流程,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问"华章计算机"公众号查看. 1.7 C语言程序的编译流程 本节以C语言程序的编译流程为例,介绍实际的C语言编译器是如何运作的.通常把整个代码的编译流程分为编译过程和链接过程. 1.编译过程 编译过程可分为编译预处理.编译与优化.汇编等阶段. (1)编译预处理 编译预处理即读取C源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处

《编译与反编译技术》—第1章1.5节高级语言及其分类

本节书摘来自华章出版社<编译与反编译技术>一书中的第1章,第1.5节高级语言及其分类,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问"华章计算机"公众号查看. 1.5 高级语言及其分类 根据应用类型的不同,涌现了多种多样的面向人类的高级语言,其中典型的有如下几类形式. 1.过程式语言 过程式语言也称为强制式语言(Imperative Language).这类语言的特点是面向语句,命令驱动.一个用过程式语言编写的程序由一系列语句组成,语句的执行会引起若干存储单元中的值

《编译与反编译技术实战》——第1章 实践的环境与工具 1.1 实践环境概述

第1章 实践的环境与工具 本书致力于通过实践及案例,从正反向两个角度介绍编译系统的一般构造原理和基本实现技术,本章首先对书中内容涉及的环境与工具进行简单介绍,这些工具都是编译与反编译过程中常用的工具. 1.1 实践环境概述 在编译过程中所涉及的环境主要是编译环境及工具链,常用的工具有词法分析生成器.语法分析生成器.编译器.汇编器.链接器等.在反编译过程中主要涉及反汇编器.静态或动态的调试与分析工具.下面对近年来流行的编译与反编译工具逐一进行简单介绍.

《编译与反编译技术实战 》一 第1章 实践的环境与工具

第1章 实践的环境与工具 本书致力于通过实践及案例,从正反向两个角度介绍编译系统的一般构造原理和基本实现技术,本章首先对书中内容涉及的环境与工具进行简单介绍,这些工具都是编译与反编译过程中常用的工具. 1.1 实践环境概述 在编译过程中所涉及的环境主要是编译环境及工具链,常用的工具有词法分析生成器.语法分析生成器.编译器.汇编器.链接器等.在反编译过程中主要涉及反汇编器.静态或动态的调试与分析工具.下面对近年来流行的编译与反编译工具逐一进行简单介绍.

《编译与反编译技术实战》——第1章实践的环境与工具

第1章实践的环境与工具本书致力于通过实践及案例,从正反向两个角度介绍编译系统的一般构造原理和基本实现技术,本章首先对书中内容涉及的环境与工具进行简单介绍,这些工具都是编译与反编译过程中常用的工具.