CN101231598B - 一种基于汇编程序构造语义流程图的方法 - Google Patents

一种基于汇编程序构造语义流程图的方法 Download PDF

Info

Publication number
CN101231598B
CN101231598B CN2008100596283A CN200810059628A CN101231598B CN 101231598 B CN101231598 B CN 101231598B CN 2008100596283 A CN2008100596283 A CN 2008100596283A CN 200810059628 A CN200810059628 A CN 200810059628A CN 101231598 B CN101231598 B CN 101231598B
Authority
CN
China
Prior art keywords
instruction
assembly
statement
semantic
operand
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN2008100596283A
Other languages
English (en)
Other versions
CN101231598A (zh
Inventor
赵民德
吴朝晖
胡博
黄凯
赵坚
吕攀
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN2008100596283A priority Critical patent/CN101231598B/zh
Publication of CN101231598A publication Critical patent/CN101231598A/zh
Application granted granted Critical
Publication of CN101231598B publication Critical patent/CN101231598B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明属于软件逆向工程技术领域,是一种基于汇编程序构造语义流程图的方法。该方法包括:将所有汇编指令中使用跳转指令的C166语句与跳转目标语句定义为关键流程语句,将其它语句定义为非关键流程语句;提取整个程序的流程图框架时,在关键流程语句处有流程图流向的转出或转入,在非关键流程语句处只有流程的顺序转移;核心语句判定指能够影响C166平台上PSW寄存器,并具有实际计算能力的指令;相邻操作数判定指以核心语句为中心,同时顺序和逆序搜索具有与核心语句相同操作数的非核心语句,直至搜索到有新的核心语句或无相邻的操作数为止,将遍历到的汇编指令聚合成不同的汇编指令块,并生成流程图语义块,然后进行连线,绘制流程图。

Description

一种基于汇编程序构造语义流程图的方法
技术领域
本发明属于软件逆向工程技术领域,主要是实现了一种基于特定硬件平台(C166平台)的,由汇编程序构造语义流程图的方法。
背景技术
软件逆向工程是分析已有的程序,寻求比源代码更高级的抽象表现形式。一般认为,凡是在软件生命周期内的,将软件某种形式的描述转换为更抽象形式的活动都可称为逆向工程。
语义流程图是人们对解决问题的方法、思路或算法的一种描述。由于语义流程图具有符号规划、画法简单、结构清晰、逻辑性强、便于描述及容易理解的特点,它在描述程序流程的方面具有十分广泛的运用。
由于汇编语言依赖底层硬件,功能抽象层次极低导致了其可读性差的特点,通过一定的技术手段将可读性差的汇编代码转化为可读性好的语义流程图,有利于提高开发效率,降低代码维护成本。
目前,市场上占有率较高的反编译工具主要有SHUDepb,jad,Reflactor等。这些反编译工具绝大多数都是针对特定的高级语言,如VB,C#,Delphi,Java等进行反编译。而对于极其灵活的、多用于编写系统级程序的C语言的反编译工作,目前还没有非常成熟的工具。尤其是对于某些特定的处理芯片开发的汇编语言,如C166,HCS12等平台的汇编语言,将其反编译成C语言的难度更大。同时,多数反编译工具的分析结果不以语义流程图形式展示,仍然没有解决可读性较差的问题。
发明内容
本发明要解决现有反编译工具存在的缺陷,提供一种简单,快速的基于C166硬件平台的汇编程序构造语义流程图的方法。
本发明采用的技术方案为:一种基于汇编程序构造语义流程图的方法,该方法包括:
将所有汇编指令中使用跳转指令的C166语句与跳转目标语句定义为关键流程语句,将其它语句定义为非关键流程语句;提取整个程序的流程图框架时,在关键流程语句处有流程图流向的转出或转入,在非关键流程语句处只有流程的顺序转移;
核心语句判定指能够影响C166平台上PSW寄存器,并具有实际计算能力的指令;相邻操作数判定指以核心语句为中心,同时顺序和逆序搜索具有与核心语句相同操作数的非核心语句,直至搜索到有新的核心语句或无相邻的操作数为止,将遍历到的汇编指令聚合成不同的汇编指令块;
由汇编指令块生成流程图语义块;
将流程图语义块进行连线,绘制流程图。
进一步的,所述方法基于C166硬件平台。
进一步的,所述非核心语句包括赋值指令和读取指令。
进一步的,具体包括如下步骤:
1)建立C166跳转、函数调用返回类指令集合J;
2)搜索C166汇编程序,将属于指令集合J的C166指令加入到关键流程指令集合K;
3)根据K中跳转类指令的操作数,计算这些跳转指令的目标地址;
4)读取目标地址的指令,加入关键流程指令集合K;
5)对于K中的每一条跳转类指令C(不包括跳转目标指令),执行以下处理:判断是否为无条件跳转指令(跳转指令的第一操作数为cc_UC),若条件成立,则将指令C加入到已处理指令集合S,并进入7);若条件不成立,则记录决定跳转与否的C166状态寄存器(PSW)的状态,并逆序搜索与C最近的,有能力改变该PSW的核心语句X;
6)记录X的操作数,顺序和逆序遍历具有操作数传递关系的非核心语句,直至遇到新的核心语句,或无相邻操作数,并将所有遍历到的语句加入已处理指令集合S,所述传递关系定义如下:在顺序搜索时,该参数与顺序下一句源操作数相同;逆序搜索时,该参数与逆序上一句目标操作数相同;
7)根据汇编指令块的核心语句确定语义流程图块的语义,生成对应的语义流程图块;
8)对于尚未处理的指令,从目标汇编程序起始位置顺序搜索核心语句X,对于每次遇到的核心指令,重复6的步骤,并将遍历到的汇编指令聚合成汇编指令块,生成语义流程图块;
9)对于余下的指令,每一条汇编指令生成一个语义流程图块;
10)将语义流程图块进行连线,绘制流程图。
下面对本发明作进一步的描述:
本发明所采用的技术方法将所有C166指令分为两种类型:关键流程指令与非关键流程指令。区分的标志在于前者能够影响程序的顺序执行流程(包括被这些指令影响的其它指令),而后者则不能。在默认状态下,执行完一条C166指令后,将继续执行与其相邻的下一条指令,一旦遇到跳转类指令,则将根据跳转类指令的操作数计算目标跳转地址。本发明将使用这类跳转指令的C166语句与跳转目标语句定义为关键流程语句,而将其它语句定义为非关键流程语句。再根据关键流程语句提取整个程序的流程图框架,即在关键流程语句处有流程图流向的转出或转入,而在非关键流程语句处只有流程的顺序转移。
然后,需要对流程图进行语义生成。从高级语言编译生成汇编语言时,同一条高级语言编译后得到的汇编代码是相邻的。同理,在反编译时需要搜索相邻的汇编代码,根据一定原则判断该部分代码是否由一条高级语言编译生成。判定步骤主要包括两步:核心语句判定与相邻操作数判定。核心语句判定指挑选汇编语言中具有实际运算功能的指令(跳转类指令除外),如加、减、乘、移位操作等;相邻操作数判定指以核心语句为中心,同时顺序和逆序搜索具有与核心语句相同操作数的非核心语句,如赋值,读取等,直至搜索到有新的核心语句,或无相邻的操作数为止。然后将搜索到的汇编指令块进行语义聚合,生成流程图语义块。
本发明具有如下优点:
1、本发明把汇编指令分为关键流程指令与非关键流程指令,对应地将流程图的结构划分为跳转执行结构与顺序执行结构,简化了复杂流程图在作图时的难度。
2、本发明通过特定的语义分析方法,将汇编指令聚合成可读性好的语义流程图块,汇编指令的执行顺序也更清楚,提高了阅读汇编代码的效率,尤其在分析大量汇编代码时效率更明显。
附图说明
图1C166指令集划分示意图。
图2相邻操作数判定流程图。
图3相邻操作数判定示例。
图4语义生成模块组成示意图。
图5判断型跳转指令语义生成流程图。
图6判断型跳转指令语义示例。
图7强制跳转指令语义生成流程图。
图8运算类指令语义生成流程图。
具体实施方式
下面结合附图对发明作进一步介绍。
图1指出了本发明将C166平台汇编指令划分为多个集合的情况。首先将C166指令集划分为关键流程语句与非关键流程语句,再将非关键流程语句划分为核心语句与非核心语句。关键流程语句与非关键流程语句划分的标准为:将所有跳转、函数调用返回类指令以及跳转目标指令划入关键流程语句,其余都归入非关键流程语句。
跳转、函数调用返回类指令包括:JB,JNB,JBC,JBNS,JMPA,JMPS,JMPI,JMPR,CALLA,CALLI,CALLR,CALLS,PCALL,TRAP,RET,RETS,RETP,RETI。
其次将非关键语句划分为核心语句与非核心语句,两者划分的标准为:核心语句为能够影响C166平台上PSW寄存器,并具有实际计算能力的指令,其余都归入非核心语句。
C166平台的核心语句包括:计算指令(ADD,ADDB,ADDC,ADDCB,SUB,SUBB,SUBC,SUBCB,MUL,MULU,DIV,DIVL,DIVLU,DIVU,CPL,CPLB,NEG,NEGB,)、逻辑指令(AND,ANDB,OR,ORB,XOR,XORB),布尔位操作指令(BCLR,BSET,BMOV,BMOVN,BAND,BOR,BXOR,BCMP,BFLDH,BFLDL,CMP,CMPB,CMPD1,CMPD2,CMPI1,CMPI2),移位指令(SHL,SHR,ROL,ROR,ASHR)。
C166平台的非核心语句包括:数据移动指令(MOV,MOVB,MOVBS,MOVBZ),系统堆栈指令(POP,PUSH,SCXT),系统控制指令(SRST,IDLE,PWRDN,SRVWDT,DISWDT,EINIT,ATOMIC,EXTR,EXTP,EXTPR,EXTS,EXTSR),和杂项指令(NOP)。
图2指出了相邻操作数判定的流程。针对一条核心语句,以该语句为中心,进行逆序(顺序)遍历,若操作数存在逆序(顺序)链式关系,且未遇到新的核心语句,则遍历继续,直到上述判定条件不成立,由此界定语义生成块的上(下)边界。
图3指出了相邻操作数判定的一个示例。在确定核心语句后,同时顺序和逆序遍历语句。如图3所示:在确定了核心指令382CC之后,同时逆序(由382CE向上),顺序(由382CA向下),搜索相邻的,与核心指令的操作数有交集的,保持操作数逆序(顺序)链式关系的指令。结合图3的例子,具体操作步骤如下:
1、建立操作数集合S,将核心指令的操作数置入有序集合S(放入R12,#1);
2、逆序搜索与S有交集的指令,并判断该指令的操作数是否与S呈链式关系。如对于指令382CA,其操作数为R12,0F900H,与S存在交集R12;
3、判断R12是否存在链式关系,即在逆序搜索时,交集中的操作数必须为待判定指令的目标操作数.指令382CA满足要求,则将382CA的目标操作数,同时也是指令与集合的交集R12从集合中删除,将382CA的源操作数置入集合S中(图3中为0F900H),继续逆向搜索直至满足以下两个终止条件:(a),待判定指令的操作数与S无交集;(b)待判定指令操作数与S有交集,但不呈链式关系;
4、顺序搜索与S有交集的指令(这里的S为未经置换操作的原始集合,即R12,#1),并判断该指令的操作数是否与S呈链式关系。与逆序搜索不同的是,判断链式关系时,有交集时的操作数为待判定指令的源操作数时方满足链式关系,其余步骤同逆系搜索;
5、最终得到经过多次置换过后的集合S’。
图4指出了语义生成的四大模块,包括判断跳转类指令语义生成,强制跳转类指令语义生成,计算类指令语义生成和其它类指令语义生成。
图5指出了判断型跳转指令语义生成的流程,对于判断型跳转指令,逆序搜索汇编代码,并判断该指令是否有能力影响PSW寄存器,若否则继续逆向搜索,若是则通过图2所描述的相邻操作数判定方法确定语义生成边界,并进行语义生成。
图6指出了本发明针对判断型跳转语句生成语义流程图块示例。判断型跳转语句一般由一句条件跳转语句,一句或多句能够影响程序状态寄存器(决定是否跳转的条件寄存器)的汇编指令,以后一句或多句相邻代码组成。具体步骤如下:
1、读取条件跳转语句的第一个操作数,跳转判定条件为当程序状态寄存器中Zero位为1时进行跳转(2DFE0);
2、逆序搜索汇编指令,找到离该跳转语句最近的,并能影响程序状态寄存器Zero位的指令(2DFDC);
3、以2DFDC指令为核心语句,根据相邻操作数判定原则得到的有序集合S’,并结合跳转指令的语义,生成语义流程图块。
图7指出了本发明针对强制跳转语句生成语义流程图块示例。强制跳转语句不需要进行条件判断,当程序执行到该位置时强行跳转,则在生成语义流程图块时,只需将强制跳转语句与其相邻语句分隔即可。
图8指出了本发明针对运算类语句生成语义流程图块示例。运算类语句由一条核心语句和其相邻语句组成,按相邻操作数判定原则,并结合运算类语句的语义,生成语义流程图块。
对于其它类型指令的语义生成,则按照一条C166指令对应一个流程图语义块的结构进行生成。
本发明的具体实施步骤如下:
1、建立C166跳转、函数调用返回类指令集合J;
2、搜索C166汇编程序,将属于指令集合J的C166指令加入到关键流程指令集合K;
3、根据K中跳转类指令的操作数,计算这些跳转指令的目标地址;
4、读取目标地址的指令,加入关键流程指令集合K;
5、对于K中的每一条跳转类指令C(不包括跳转目标指令),执行以下处理:判断是否为无条件跳转指令(跳转指令的第一操作数为cc_UC),若条件成立,则将指令C加入到已处理指令集合S,并进入7;若条件不成立,则记录决定跳转与否的C166状态寄存器(PSW)的状态,并逆序搜索与C最近的,有能力改变该PSW的核心语句X;
6、记录X的操作数,顺序和逆序遍历具有操作数传递关系的非核心语句,直至遇到新的核心语句,或无相邻操作数,并将所有遍历到的语句加入已处理指令集合S,所述传递关系定义如下:在顺序搜索时,该参数与顺序下一句源操作数相同;逆序搜索时,该参数与逆序上一句目标操作数相同;
7、根据汇编指令块的核心语句确定语义流程图块的语义,生成对应的语义流程图块;
8、对于尚未处理的指令,从目标汇编程序起始位置顺序搜索核心语句X,对于每次遇到的核心指令,重复6的步骤,并将遍历到的汇编指令聚合成汇编指令块,生成语义流程图块;
9、对于余下的指令,每一条汇编指令生成一个语义流程图块;
10、将语义流程图块进行连线,绘制流程图。

Claims (4)

1.一种基于汇编程序构造语义流程图的方法,其特征在于:该方法包括:
将所有汇编指令中使用跳转指令的C166语句与跳转目标语句定义为关键流程语句,将其它语句定义为非关键流程语句;提取整个程序的流程图框架时,在关键流程语句处有流程图流向的转出或转入,在非关键流程语句处只有流程的顺序转移;
核心语句判定指能够影响C166平台上PSW寄存器,并具有实际计算能力的指令;相邻操作数判定指以核心语句为中心,同时顺序和逆序搜索具有与核心语句相同操作数的非核心语句,直至搜索到有新的核心语句或无相邻的操作数为止,将遍历到的汇编指令聚合成不同的汇编指令块;
由汇编指令块生成流程图语义块;
将流程图语义块进行连线,绘制流程图。
2.根据权利要求1所述的一种基于汇编程序构造语义流程图的方法,其特征在于:所述方法基于C166硬件平台。
3.根据权利要求1所述的基于汇编程序构造语义流程图的方法,其特征在于:所述非核心语句包括赋值指令和读取指令。
4.根据权利要求1所述的基于汇编程序构造语义流程图的方法,其特征在于:具体包括如下步骤:
1)建立C166跳转、函数调用返回类指令集合J;
2)搜索C166汇编程序,将属于指令集合J的C166指令加入到关键流程指令集合K;
3)根据K中跳转类指令的操作数,计算这些跳转指令的目标地址;
4)读取目标地址的指令,加入关键流程指令集合K;
5)对于K中的每一条跳转类指令C,不包括跳转目标指令,执行以下处理:判断是否为无条件跳转指令,若条件成立,则将指令C加入到已处理指令集合S,并进入7);若条件不成立,则记录决定跳转与否的C166状态PSW寄存器的状态,并逆序搜索与C最近的,有能力改变该PSW的核心语句X;
6)记录X的操作数,顺序和逆序遍历具有操作数传递关系的非核心语句,直至遇到新的核心语句,或无相邻操作数,并将所有遍历到的语句加入已处理指令集合S,所述传递关系定义如下:在顺序搜索时,该参数与顺序下一句源操作数相同;逆序搜索时,该参数与逆序上一句目标操作数相同;
7)根据汇编指令块的核心语句确定语义流程图块的语义,生成对应的语义流程图块;
8)对于尚未处理的指令,从目标汇编程序起始位置顺序搜索核心语句X,对于每次遇到的核心指令,重复6)的步骤,并将遍历到的汇编指令聚合成汇编指令块,生成语义流程图块;
9)对于余下的指令,每一条汇编指令生成一个语义流程图块;
10)将语义流程图块进行连线,绘制流程图。
CN2008100596283A 2008-01-30 2008-01-30 一种基于汇编程序构造语义流程图的方法 Expired - Fee Related CN101231598B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008100596283A CN101231598B (zh) 2008-01-30 2008-01-30 一种基于汇编程序构造语义流程图的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008100596283A CN101231598B (zh) 2008-01-30 2008-01-30 一种基于汇编程序构造语义流程图的方法

Publications (2)

Publication Number Publication Date
CN101231598A CN101231598A (zh) 2008-07-30
CN101231598B true CN101231598B (zh) 2010-06-23

Family

ID=39898098

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008100596283A Expired - Fee Related CN101231598B (zh) 2008-01-30 2008-01-30 一种基于汇编程序构造语义流程图的方法

Country Status (1)

Country Link
CN (1) CN101231598B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101655782B (zh) * 2009-09-10 2012-07-18 浙江大学 基于基本块的汇编代码得出程序的数据流图的实现方法
CN110837372B (zh) * 2019-11-04 2021-01-26 贵阳动视云科技有限公司 汇编代码清除混淆的方法、装置、介质及设备

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
严代彪, 王树宗.一种源程序到程序流程图的自动生成算法.微计算机信息 7.2003,(7),65,83.
严代彪, 王树宗.一种源程序到程序流程图的自动生成算法.微计算机信息 7.2003,(7),65,83. *
周博,蒋烈辉, 费勤福.汇编子程序流程图绘制算法研究.计算机应用与软件24 1.2007,24(1),160-161,171.
周博,蒋烈辉, 费勤福.汇编子程序流程图绘制算法研究.计算机应用与软件24 1.2007,24(1),160-161,171. *
汪文勇, 王学东,向渝,唐科,刘利枚.汇编嵌入式软件程序流程图自动生成的研究.计算机应用与软件32 2.2005,32(2),173-175,201.
汪文勇, 王学东,向渝,唐科,刘利枚.汇编嵌入式软件程序流程图自动生成的研究.计算机应用与软件32 2.2005,32(2),173-175,201. *

Also Published As

Publication number Publication date
CN101231598A (zh) 2008-07-30

Similar Documents

Publication Publication Date Title
Tan et al. Making k-object-sensitive pointer analysis more precise with still k-limiting
Engblom Processor pipelines and static worst-case execution time analysis
Bodden et al. Spllift: Statically analyzing software product lines in minutes instead of years
CN102163143B (zh) 一种实现值关联间接跳转预测的方法
Laguna et al. Gpumixer: Performance-driven floating-point tuning for gpu scientific applications
CN101957773B (zh) 用于多轮次动态概要分析的方法及其系统
Kotipalli et al. AMPT-GA: automatic mixed precision floating point tuning for GPU applications
JP2008059279A (ja) 文字列出力処理を最適化する技術
US8250502B2 (en) Automated synthesis apparatus and method
KR102013582B1 (ko) 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
CN102156634B (zh) 一种实现值关联间接跳转预测的方法
CN102289362A (zh) 分段符号执行装置及其工作方法
Yoon et al. Effective and scalable software compatibility testing
Cedersjö et al. Tÿcho: A framework for compiling stream programs
CN102156636B (zh) 一种实现值关联间接跳转预测的装置
WO2001018649A2 (en) Method and system for split-compiling a hybrid language program
CN101231598B (zh) 一种基于汇编程序构造语义流程图的方法
JPWO2004081788A1 (ja) Lyee指向ソフトウェアに関する静的分析方法
CN105164667A (zh) 修改分析流
CN102156635B (zh) 实现值关联间接跳转预测的装置
Sengupta Julia High Performance: Optimizations, distributed computing, multithreading, and GPU programming with Julia 1.0 and beyond
Sengupta Julia High Performance
JPWO2017204139A1 (ja) データ処理装置、データ処理方法、およびプログラム記録媒体
Wolf et al. Automatic analysis of inefficiency patterns in parallel applications
Bodden et al. SPLlift-Transparent and efficient reuse of IFDS-based static program analyses for software product lines

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100623

Termination date: 20180130

CF01 Termination of patent right due to non-payment of annual fee