CN109117142A - 一种基于变量关联树的基本类型重构方法 - Google Patents
一种基于变量关联树的基本类型重构方法 Download PDFInfo
- Publication number
- CN109117142A CN109117142A CN201810793986.0A CN201810793986A CN109117142A CN 109117142 A CN109117142 A CN 109117142A CN 201810793986 A CN201810793986 A CN 201810793986A CN 109117142 A CN109117142 A CN 109117142A
- Authority
- CN
- China
- Prior art keywords
- variable
- function
- vrt
- type
- association tree
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于变量关联树的基本类型重构方法,是一种轻量级的基本数据类型重构方法。该方法具体为:将待处理的二进制程序转化为汇编程序后以函数为单元进行如下处理:提取函数单元中汇编指令的操作数,构建变量关联树VRT,并建立对应的变量地址映射表VAM,利用汇编程序中寄存器和汇编指令中的变量类型信息作为第一约束规则,利用VRT中各变量间的运算关系作为第二约束规则,采用第一和第二约束规则分别对VRT中的节点的类型约束信息属性进行更新,采用汇编程序中已知函数的参数和返回值的类型信息在VRT上进行传播,获得最终VRT,以上过程中实时更新VAM中变量的类型约束信息属性。所有函数单元分析完成得到的VAM包含了基本类型重构结果。
Description
技术领域
本发明涉及软件维护和安全技术领域,具体涉及一种基于变量关联树的基本类型重构方法。
背景技术
高速发展的计算机软件技术使各种软件的功能变得越来越复杂,导致计算机软件中的安全问题越来越多,同时巨量的软件导致软件的维护需求也愈来愈高。反编译在软件维护和安全领域扮演着重要的角色,而数据类型重构则是其重要的一环,也是难点所在。许多高级语言中类型相关的信息在编译成二进制程序时未被保留,导致反编译时很难获得变量相关的类型信息,类型重构也因此成为了影响反编译效果的瓶颈之一。
几十年来国内外仍未出现一种统一的、被业界普遍接受的类型重构方案,目前的类型重构方案大多是经反汇编转换成中间语言,并结合数据流和控制流分析,这几乎完成了整个反编译的工作,工作量大且重构过程复杂。
2002年,Mike在dcc和UQBT的基础上首次引入了静态单赋值方法,并研发了新的反编译器Boomerang。它保留了UQBT中的代码解析和语义描述语言,采用数据流分析技术对变量类型进行重构,并将二进制代码反编译成高级程序语言。
2007年,Ilfak Guilfanov发布了反汇编器IDA Pro的一个反编译插件Hex-Rays,这是一款功能强大的商业软件,它能快速地将32位windows可执行程序转换成与源码功能和语义等价的类C代码,但只可用于分析而不能编译。
2010年,Asia Slowinska首次尝试动态分析技术,提出了动态数据结构挖掘方法,它使用QEMU工具对程序运行时的内存使用和访问情况进行跟踪,可以获取数据结构布局信息,能够恢复堆栈上的数据类型,甚至一些复杂结构类型。
2012年,何东、尹青等人提出了基于规则的类型重构系统TyDec,试图结合动静态分析的优点。该方法通过模式匹配的方式按照规则生成一系列的约束,然后对约束集求解。
类型重构属于反编译过程中重要步骤之一,数据类型重构的难度在于许多高级语言中类型相关的信息在编译成二进制程序时未被保留,而导致反编译时很难获得变量相关的类型信息。但是,类型信息在二进制程序中被转化成了存储器信息,通过内存的分配和访问以及相互间的关系体现类型间的依赖关系,从而可以将类型信息重构出来,这也是现阶段对于类型重构研究的重点方向。目前通过模式匹配、控制流分析、数据流分析等技术现已经可以恢复部分类型信息,但类型重构的过程稍微繁琐,需要得到二进制程序的控制流图、数据流图等相关信息。
因此,目前缺少一种轻量级的基本数据类型重构方法。
发明内容
有鉴于此,本发明提供了一种基于变量关联树的基本类型重构方法,能够以二进制程序作为输入,利用现有的工具将二进制文件转换为汇编语言,进一步再将汇编语言转化为本发明提出的变量关联树VRT,基于VRT实现基本类型重构,是一种轻量级的基本数据类型重构方法。
为达到上述目的,本发明的技术方案具体包括如下步骤:
步骤一、采用反汇编工具将待处理的二进制程序转化为汇编程序。
步骤二、扫描汇编程序,以函数为单元进行划分,获得划分好的函数单元;识别汇编程序中的库函数。
步骤三、针对划分好的函数单元,根据函数调用关系生成函数调用图;
步骤四、遍历函数调用图,以函数为单元,采用后序分析确定函数单元的分析顺序。按照分析顺序顺次确定每次分析的当前函数单元。
步骤五、针对当前函数单元,提取其中汇编指令的操作数,根据每个操作数创建对应的变量关联树节点,构建变量关联树VRT。变量关联树VRT的节点即为变量,变量根据其类型分为寄存器变量、临时变量、局部变量、全局变量和函数变量;当前函数单元创建得到一个或多个变量关联树VRT实例,每个变量关联树VRT实例中的节点具有类型约束信息属性,并同时建立变量地址映射表VAM。
所述变量地址映射表VAM中存储有所述变量关联树VRT实例中所有节点对应变量的索引,包括以变量为根节点的变量关联树VRT实例或者子变量关联树VRT实例,还包括变量的类型约束信息属性。
步骤六、利用提取的汇编程序中寄存器和汇编指令中的变量类型信息作为第一约束规则,采用第一约束规则对所创建的变量关联树VRT实例中的节点的类型约束信息属性进行更新,获得初始VRT,同时更新变量地址映射表VAM中变量的类型约束信息属性。
利用变量关联树VRT中各变量间的运算关系作为第二约束规则,采用第二约束规则对初始VRT中的节点的类型约束信息属性进行更新,获得中间VRT,同时更新变量地址映射表VAM中变量的类型约束信息属性。
步骤七、以步骤二中识别的库函数以及当前函数单元中调用的函数作为已知函数,从汇编程序中获取已知函数的参数和返回值,并采用已知函数的参数和返回值的类型信息在中间VRT上进行传播,进一步确定中间VRT上与已知函数关联的变量的类型,获得最终VRT,同时更新变量地址映射表VAM中变量的类型约束信息属性。
步骤八、按照分析顺序判断是否所有函数单元均分析完成,若是,则此时VAM中变量及其类型即为基本类型重构结果;否则按照分析顺序确定下一次分析的当前函数单元,返回步骤五。
进一步地,步骤三中,采用汇编语言中的CALL指令,生成函数调用图。
进一步地,步骤四中,遍历函数调用图,以函数为单元,采用后序分析确定函数单元的分析顺序,具体为:
判断函数调用图是否为无环的函数调用图,若是,则在无环的函数调用图中,针对其中的函数单元,从根节点main函数开始以深度优先的方式按照后序遍历进行排序获得分析顺序。
否则,函数调用图为有环的函数调用图,则对有环的函数调用图进行解环后,针对其中的函数单元,从根节点main函数开始以深度优先的方式按照后序遍历进行排序获得分析顺序。
对有环的函数调用图进行解环具体为:
从根节点main函数开始深度优先遍历有环的函数调用图,遇到已遍历过的节点,将该已遍历过的节点记为环点。
复制环点作为叶子节点与前一节点相连,消除环。
有益效果:
本发明的输入是由C语言编译而得的二进制程序,处理的数据类型是基本数据类型,重点是提出了一个表示汇编程序中各变量之间关联关系的结构——变量关联树,通过变量关联树进行对基本数据类型的重构,并使用依据汇编语言建立的约束规则以及已知函数(库函数和当前函数单元中调用的函数)的参数和返回值类型信息进行基本类型的重构。该基本类型重构方法通过提出的变量关联树,在功能上替代了中间语言和数据流图,并在方案中省去了控制流分析,简化基本数据类型重构过程,是一种轻量级的类型重构方法。
附图说明
图1为本发明所提供的基于变量关联树的基本类型重构方法的流程图;
图2为本发明实施例中所得到的函数调用图示例图;
图3为本发明实施例中所得到的变量关联树VRT实例结构图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
本发明的原理是:采用表示汇编程序中各变量之间关联关系的结构——变量关联树,通过变量关联树进行对基本数据类型的重构,并使用依据汇编语言建立的约束规则以及已知函数(库函数和当前函数单元中调用的函数)的参数和返回值类型信息进行基本类型的重构,并通过变量地址映射表VAM存储基本类型的重构结果。
其中变量关联树VRT能够表示变量之间的关系,是对汇编程序的一种不完全表示方式(并非中间语言),也是简化类型重构方案的核心方法,也是实施类型重构方法的载体。中间语言是对汇编语言功能和语义的完整翻译,是可逆的,而变量关联树只是对汇编语言中变量的关联关系的一种表示,并不是对汇编语言的翻译,是不可逆的。变量地址映射表VAM本质上是变量关联树中变量的一个索引,实时与变量关联树进行交互,其中包含了变量的类型信息,将作为类型重构的最终结果输出。变量关联树简化了类型重构方案,省去了中间语言、数据流图和控制流图等步骤,因此达到了本发明提出的轻量级的目的。
本发明提供了一种基于变量关联树的基本类型重构方法,其流程如图1所示,具体包括如下步骤:
步骤一、采用反汇编工具将待处理的二进制程序转化为汇编程序;常用的反汇编工具都可以实现将二进制程序转化为汇编程序的处理,例如可以使用IDA Pro。
步骤二、扫描汇编程序,以函数为单元进行划分,获得划分好的函数单元。此处对汇编程序的扫描可以是粗粒度的,只要能够识别出其中的函数即可。
汇编程序中的库函数的识别可以采用现有的库函数识别工具,也可以使用反汇编工具中自带的库函数识别功能,例如IDA Pro就可以执行库函数的识别。
步骤三、针对划分好的函数单元,根据函数调用关系生成函数调用图。实际应用中,可以采用相应的工具或者指令进行函数调用图的生成。例如可以采用汇编语言中的CALL指令,生成函数调用图。
步骤四、遍历函数调用图,以函数为单元,采用后序分析确定函数单元的分析顺序。
考虑到现有的类型重构方案是以基本块为单元,则一个完整的变量关联树的创建需要跨越多个基本单元,且一个基本块中的指令数量相对较少,依此创建的变量关联树较为零碎。因此本发明以函数为单元进行变量关联树VRT的生成,能够创建相对独立和完整的VRT,用于类型重构,此处则需要确定以函数为单元的后序分析策略。
本发明实施例给出了一种具体的以函数为单元的后序分析策略用于确定函数单元的分析顺序,具体可以包括如下步骤:
1)针对步骤三中生成的函数调用图,首先判断函数调用图是否为无环的函数调用图。其中函数调用图按照其中是否具有循环调用,可以分为具有循环调用的有环的函数调用图、以及不具有循环调用的无环的函数调用图。
若当前的函数调用图是无环的函数调用图,执行2)。
若当前的函数调用图是有环的函数调用图,执行3)。
2)针对无环的函数调用图中的函数单元,从根节点main函数开始以深度优先的方式按照后序遍历进行排序获得分析顺序;
3)对有环的函数调用图进行解环后,针对其中的函数单元,从根节点main函数开始以深度优先的方式按照后序遍历进行排序获得分析顺序;
对有环的函数调用图进行解环具体为:
从根节点main函数开始深度优先遍历有环的函数调用图,遇到已遍历过的节点,将该已遍历过的节点记为环点,例如图2中所示的函数F_b节点即为环点。
复制环点作为叶子节点与前一节点相连,消除环。如图2中的F_b节点复制为F_b`节点。
可以看出,对于有环的函数调用图,环点被分析了两次,对被复制的环点的分析属于不完全分析(F_b`函数中调用的其他函数尚未被分析,在F_b`函数中创建的VRT不能根据函数类型信息传播进一步精确类型信息)。
若不使用上述策略进行分析,当遇到函数调用时需要存储当前分析状态,分析完调用函数后再恢复之前的分析状态,内存占用大,分析效率比较差。
依据上述后序分析策略获得函数单元的分析顺序之后,按照分析顺序顺次确定每次分析的当前函数单元。
步骤五、针对当前函数单元,提取其中汇编指令的操作数,根据每个操作数创建对应的变量关联树节点,构建变量关联树VRT。变量关联树VRT的节点即为变量,变量根据其类型分为寄存器变量、临时变量、局部变量、全局变量和函数变量;当前函数单元创建得到一个或多个变量关联树VRT实例,每个变量关联树VRT实例中的节点具有类型约束信息等属性,类型约束信息属性为节点对应变量在汇编程序中的类型信息。
同时建立变量地址映射表VAM。
变量地址映射表VAM中存储有变量关联树VRT实例中所有节点对应变量的索引,包括以变量为根节点的变量关联树VRT实例或者子变量关联树VRT实例,还包括变量的类型约束信息属性。
由于汇编指令的操作数一般不超过两个,因此创建的VRT应该是一个二叉树,但函数变量节点是个例外,它的参数个数可以超过两个,所以,除函数变量节点外VRT结构具有二叉树的特性,因此称VRT为类二叉树结构。如图3所示,是一个简单的VRT,该结构能清晰的表示局部变量[ebp+48h]、[ebp+32h]和[ebp+8h]之间的关系,即[ebp+48h]=[ebp+32h]+[ebp+8h]。
步骤六、当前函数单元中的变量关联树VRT实例全部创建完成后,即针对整个当前函数单元,从第一条汇编指令到最后一条汇编指令全部分析完成。
对于基本的C语言程序,其基本类型集合S0={char,unsigned char,short,unsigned short,int,unsigned int,pointer,float,double},该架构下的C语言程序中,int和long均为32位,因此均用int表示,pointer均为无符号变量,float和double均为有符号变量,因此只对整型变量做符号区分。
为方便起见,本发明中采用三元组(core,size,sign)的形式表示类型约束信息属性,其中core包含int、float、pointer,分别用I,F和P表示,size包含1、2、4、8,表示字节数,sign表示符号信息,包含有符号和无符号,分别用s和u表示。如三元组(I,2,s)表示为有符号短整型。
此外,为方便表示汇编中的约束信息,变量或汇编指令中的操作数用v表示,如movv1,v2中v1和v2分别表示mov的两个操作数;用t表示类型,如tcore、tsize等;{t1,t2}表示t1和t2的集合;∈表示包含于,如tcore(v)∈{I,P}表示变量v的core属性为I或P;“||”表示或,“&&”表示且。
利用提取的汇编程序中寄存器和汇编指令中变量类型信息作为第一约束规则,采用第一约束规则对所创建的变量关联树VRT实例中的节点的类型约束信息属性进行更新,获得初始VRT,同时更新变量地址映射表VAM中变量的类型约束信息属性。
本发明实施例中,第一约束规则中的寄存器和汇编指令中隐含类型信息具体包括如下内容:
1、寄存器中隐含类型信息:根据汇编语言的既有规则,在汇编程序中寄存器通常可以约束寄存器中存储的数据的位数,如果寄存器中存储的形式为指针形式,则还可以约束寄存器中存储的数据为指针类型。
一般会产生针对变量类型的第一条约束信息,即约束其大小为1字节、2字节或4字节。i386架构中有8个32位的通用寄存器,他们的低位部分被用作8个16位寄存器。为了支持8位的操作,还进一步把ax、bx、cx、dx四个寄存器再分为8位一组的高位字节和低位字节两部分,作为8个8位寄存器。如表1所示,产生的约束为寄存器中存储的数据类型的约束。
表1寄存器约束规则
寄存器的使用 | 约束信息 |
eax、ebx、ecx、edx | t<sub>size</sub>(v)=4 |
ax、bx、cx、dx | t<sub>size</sub>(v)=2 |
ah、bh、ch、dh、al、bl、cl、dl | t<sub>size</sub>(v)=1 |
[eax]、[eax+C]、[eax+edx]、[eax+edx*C<sub>1</sub>+C<sub>2</sub>] | t<sub>core</sub>(v)=P |
2、汇编指令中隐含类型信息
在汇编语言中,汇编指令主要分为FPU指令和CPU指令。
其中FPU指令主要用于推导数据类型,基本类型中的float和double类型,指令均为字母“f”开头,结合字长信息(dword、qword等)很容易确定float和double类型,根据FPU数据传送指令和算术运算指令制定的约束规则如表2和表3所示。
表2数据传送指令的约束规则
数据传送指令 | 约束信息 |
fld/fst/fstp dword ptr v1 | t<sub>core</sub>(v1)=F,t<sub>size</sub>(v1)=4 |
fld/fst/fstp qword ptr v1 | t<sub>core</sub>(v1)=F,t<sub>size</sub>(v1)=8 |
fild/fist/fistp v1 | t<sub>core</sub>(v1)=I,t<sub>size</sub>(v1)∈{2,4} |
表3算术运算指令的约束规则
算术运算指令 | 约束信息 |
fiadd/fisub/fimul/fidiv/…/fiaddr | t<sub>core</sub>(v1)=I,t<sub>size</sub>(v1)∈{2,4} |
fadd/fsub/fmul/…/faddr dword ptr | t<sub>core</sub>(v1)=F,t<sub>size</sub>(v1)=4 |
fadd/fsub/fmul/…/faddr qword ptr | t<sub>core</sub>(v1)=F,t<sub>size</sub>(v1)=8 |
CPU指令较多,同时也分为很多类,因此只对部分可以约束其操作数的指令进行分析。CPU指令包括如下几种指令:
通用数据传送指令。数据传送指令中最常用的与类型信息相关的有mov、movsx、movzx和lea,相应的约束规则如表4所示。
表4数据传送指令的约束规则
数据传送指令 | 约束信息 |
mov v1,v2 | t(v1)=t(v2) |
movsx v1,v2 | t<sub>sign</sub>(v2)=s |
movzx v1,v2 | t<sub>sign</sub>(v2)=u |
lea v1,v2 | t<sub>core</sub>(v1)=P |
算术运算指令。算术运算指令中也有类型信息存在,相关的指令主要有add、inc、sub、dec、nec、imul、idiv、cbw、cwd、cwde及cdq等,对应的约束规则如表5所示。
表5算术运算指令的约束规则
逻辑运算指令。逻辑运算指令中主要有与、或和异或运算以及移位运算,由于指针类型的变量不会参与逻辑运算,因此逻辑运算指令的操作数均可被约束为整型,对应的约束规则如表6所示。
表6逻辑运算指令的约束规则
以上的寄存器和汇编指令的实例仅为说明第一约束规则的制定方案,其中内容均是按照汇编语言的既有规则,通过寄存器和汇编指令推导变量的类型约束信息从而更新VRT中变量的类型约束信息属性,并不是为了限制本发明的技术方案,在本发明的技术方案中,只要能够从汇编程序的寄存器和汇编指令中提取隐含的变量的类型信息即可作为第一约束规则。
利用变量关联树VRT中各变量间的运算关系作为第二约束规则,采用第二约束规则对初始VRT中的节点的类型约束信息属性进行更新,获得中间VRT,同时更新变量地址映射表VAM中变量的类型约束信息属性。
本发明实施例中,针对VRT中变量间的运算关系制定的类型第二约束规则如表7所示,主要针对整型和指针类型的运算。
表7运算相关的第二约束规则
以上表格中的第二约束规则实例仅为说明第二约束规则的制定方案,其中内容均是通过变量间的运算关系推导变量的类型约束信息从而更新VRT中变量的类型约束信息属性,并不是为了限制本发明的技术方案,在本发明的技术方案中,只要能够从变量间的运算关系中提取隐含的变量的类型信息即可作为第二约束规则。
步骤七、VRT创建完成后,根据第一约束规则和第二约束规则收集约束信息的工作随之完成,可以得到大部分变量的初步类型,若要进一步精确变量类型,需要对上述约束得到的类型信息和通过库函数的参数和返回值得到的类型信息进行传播。
以步骤二中识别的库函数以及当前函数单元中调用的函数作为已知函数,从汇编程序中获取已知函数的参数和返回值,并采用已知函数的参数和返回值的类型信息在中间VRT上进行传播,进一步确定中间VRT上与已知函数关联的变量的类型,获得最终VRT,同时更新变量地址映射表VAM中变量的类型约束信息属性。
步骤八、按照分析顺序判断是否所有函数单元均分析完成,若是,则此时VAM中变量及其类型即为基本类型重构结果;否则按照分析顺序确定下一次分析的当前函数单元,返回步骤五。
本发明提供的基本类型重构方法通过提出的变量关联树,在功能上替代了中间语言和数据流图,并在方案中省去了控制流分析,简化基本数据类型重构过程,是一种轻量级的重构方法。
综上,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.一种基于变量关联树的基本类型重构方法,其特征在于,该方法包括如下步骤:
步骤一、采用反汇编工具将待处理的二进制程序转化为汇编程序;
步骤二、扫描所述汇编程序,以函数为单元进行划分,获得划分好的函数单元;识别所述汇编程序中的库函数;
步骤三、针对划分好的所述函数单元,根据函数调用关系生成函数调用图;
步骤四、遍历所述函数调用图,以函数为单元,采用后序分析确定函数单元的分析顺序;
按照所述分析顺序顺次确定每次分析的当前函数单元;
步骤五、针对当前函数单元,提取其中汇编指令的操作数,根据每个操作数创建对应的变量关联树节点,构建变量关联树VRT,则所述变量关联树VRT的节点即为变量,变量根据其类型分为寄存器变量、临时变量、局部变量、全局变量和函数变量;当前函数单元创建得到一个或多个变量关联树VRT实例,每个变量关联树VRT实例中的节点具有类型约束信息属性,并同时建立变量地址映射表VAM;
所述变量地址映射表VAM中存储有所述变量关联树VRT实例中所有节点对应变量的索引,包括以变量为根节点的变量关联树VRT实例或者子变量关联树VRT实例,还包括变量的类型约束信息属性;
步骤六、利用提取的所述汇编程序中寄存器和汇编指令中的变量类型信息作为第一约束规则,采用所述第一约束规则对所创建的变量关联树VRT实例中的节点的类型约束信息属性进行更新,获得初始VRT,同时更新所述变量地址映射表VAM中变量的类型约束信息属性;
利用变量关联树VRT中各变量间的运算关系作为第二约束规则,采用所述第二约束规则对所述初始VRT中的节点的类型约束信息属性进行更新,获得中间VRT,同时更新所述变量地址映射表VAM中变量的类型约束信息属性;
步骤七、以步骤二中识别的所述库函数以及当前函数单元中调用的函数作为已知函数,从所述汇编程序中获取所述已知函数的参数和返回值,并采用已知函数的参数和返回值的类型信息在所述中间VRT上进行传播,进一步确定所述中间VRT上与所述已知函数关联的变量的类型,获得最终VRT,同时更新所述变量地址映射表VAM中变量的类型约束信息属性;
步骤八、按照所述分析顺序判断是否所有函数单元均分析完成,若是,则此时VAM中变量及其类型即为基本类型重构结果;否则按照所述分析顺序确定下一次分析的当前函数单元,返回步骤五。
2.如权利要求1所述的方法,其特征在于,所述步骤三中,采用汇编语言中的CALL指令,生成函数调用图。
3.如权利要求1所述的方法,其特征在于,所述步骤四中,遍历所述函数调用图,以函数为单元,采用后序分析确定函数单元的分析顺序,具体为:
判断所述函数调用图是否为无环的函数调用图,若是,则在所述无环的函数调用图中,针对其中的函数单元,从根节点main函数开始以深度优先的方式按照后序遍历进行排序获得分析顺序;
否则,所述函数调用图为有环的函数调用图,则对所述有环的函数调用图进行解环后,针对其中的函数单元,从根节点main函数开始以深度优先的方式按照后序遍历进行排序获得分析顺序;
对所述有环的函数调用图进行解环具体为:
从根节点main函数开始深度优先遍历所述有环的函数调用图,遇到已遍历过的节点,将该已遍历过的节点记为环点;
复制所述环点作为叶子节点与前一节点相连,消除环。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810793986.0A CN109117142B (zh) | 2018-07-19 | 2018-07-19 | 一种基于变量关联树的基本类型重构方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810793986.0A CN109117142B (zh) | 2018-07-19 | 2018-07-19 | 一种基于变量关联树的基本类型重构方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109117142A true CN109117142A (zh) | 2019-01-01 |
CN109117142B CN109117142B (zh) | 2020-11-24 |
Family
ID=64862279
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810793986.0A Active CN109117142B (zh) | 2018-07-19 | 2018-07-19 | 一种基于变量关联树的基本类型重构方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109117142B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115052031A (zh) * | 2022-05-24 | 2022-09-13 | 广州大学 | 一种非ros程序与ros程序的交互通信系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000068811A1 (en) * | 1999-04-30 | 2000-11-16 | Network Forensics, Inc. | System and method for capturing network data and identifying network events therefrom |
CN1811712A (zh) * | 2005-01-27 | 2006-08-02 | 微软公司 | 通过运行时类型推断的有效数据访问 |
CN103345416A (zh) * | 2013-07-26 | 2013-10-09 | 深圳市融创天下科技股份有限公司 | 一种获取数组长度的方法及系统 |
US20150301812A1 (en) * | 2014-04-22 | 2015-10-22 | Oracle International Corporation | Metadata-driven Dynamic Specialization |
-
2018
- 2018-07-19 CN CN201810793986.0A patent/CN109117142B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000068811A1 (en) * | 1999-04-30 | 2000-11-16 | Network Forensics, Inc. | System and method for capturing network data and identifying network events therefrom |
CN1811712A (zh) * | 2005-01-27 | 2006-08-02 | 微软公司 | 通过运行时类型推断的有效数据访问 |
CN103345416A (zh) * | 2013-07-26 | 2013-10-09 | 深圳市融创天下科技股份有限公司 | 一种获取数组长度的方法及系统 |
US20150301812A1 (en) * | 2014-04-22 | 2015-10-22 | Oracle International Corporation | Metadata-driven Dynamic Specialization |
Non-Patent Citations (4)
Title |
---|
HEMANT ISHWARAN: ""Variable importance in binary regression trees and forests"", 《ELECTRONIC JOURNAL OF STATISTICS》 * |
何东: "反编译中数据类型自动重构技术研究", 《计算机科学》 * |
周丽娜: "ARM反编译中的类型分析技术研究", 《中国优秀硕士学位论文全文数据库-信息科技辑》 * |
青玉伏案: "代码重构(三):数据重构规则", 《HTTPS://DEVELOPER.ALIYUN.COM/ARTICLE/27623》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115052031A (zh) * | 2022-05-24 | 2022-09-13 | 广州大学 | 一种非ros程序与ros程序的交互通信系统 |
CN115052031B (zh) * | 2022-05-24 | 2023-05-19 | 广州大学 | 一种非ros程序与ros程序的交互通信系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109117142B (zh) | 2020-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112100054B (zh) | 一种面向数据管控的程序静态分析方法和系统 | |
Gupta et al. | Deepfix: Fixing common c language errors by deep learning | |
CN108614960B (zh) | 一种基于前端字节码技术的JavaScript虚拟化保护方法 | |
CN108897572B (zh) | 一种基于变量关联树的复杂类型重构方法 | |
CN110187885A (zh) | 一种量子程序编译的中间代码生成方法及装置 | |
Tu | Automatic array privatization and demand-driven symbolic analysis | |
Aiken et al. | A toolkit for constructing type-and constraint-based program analyses | |
Aho | Compilers: Principles, Techniques and Tools (for VTU) | |
CN106528171A (zh) | 一种异构计算平台子系统间的接口设计方法、装置及系统 | |
CN107515739A (zh) | 提高代码执行性能的方法及装置 | |
Mokhov et al. | Selective applicative functors | |
Walsh et al. | Paragen: a novel technique for the autoparallelisation of sequential programs using gp | |
CN116149670B (zh) | 一种基于图的hdl编译优化方法 | |
CN109117142A (zh) | 一种基于变量关联树的基本类型重构方法 | |
Koskimies et al. | The design of a language processor generator | |
CN116225452A (zh) | 一种基于多层级中介码的图神经网络编译优化方法 | |
Wirsing et al. | Algebraic methods: theory, tools and applications | |
Loidl et al. | Parallelising a large functional program or: Keeping LOLITA busy | |
Vesely et al. | One Step at a Time: A Functional Derivation of Small-Step Evaluators from Big-Step Counterparts | |
Yin et al. | The Implementation of Simple Smart Contract Language and Its Compiler Based on Ethereum Platform | |
Chen et al. | Automatic modeling method for pthread programs based on program dependence net | |
Karjoth | Implementing LOTOS specifications by communicating state machines | |
Sun et al. | Lean implementations of software testing tools using XML representations of source codes | |
Nguyen et al. | HierarchyNet: Learning to Summarize Source Code with Heterogeneous Representations | |
Djordjevic et al. | Evaluation of computer architecture using ISPS |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |