针对二进制反汇编工具的间接跳转表求解过程的测试方法
未命名
07-15
阅读:133
评论:0
1.本发明涉及一种自动化测试方法,具体是一种针对二进制反汇编工具的间接跳转表求解过程的测试方法,属于软件质量与安全技术领域:
:。
背景技术:
::2.随着信息化在社会各行各业的广泛推进,软件质量与安全受到越来越多人的关注。二进制反汇编是将机器读取的二进制代码转化为方便人类理解的汇编代码的过程,是许多安全工作的基础,如二进制代码的安全加固、二进制代码的相似度检测、针对二进制代码打补丁以及二进制级别的漏洞挖掘等。3.由于编译器的过度优化引入了间接跳转表等复杂结构,而间接控制流目标又难以通过静态方法确定,现有的二进制反汇编工具采用了许多算法求解间接控制流目标,包括基于专家知识总结模式进行推断的启发式算法与利用程序分析进行求解的可靠性算法,以正确地反汇编二进制代码。然而,由于算法的细节未被展示,间接跳转表求解的性能无法评估,其求解的结果是否准确或完备也不得而知。这就给使用反汇编工具的二进制安全研究人员造成困扰。4.目前,对间接跳转表求解算法评估的讨论集中在如何建立测试集上。现有技术包括:(1)人工构建测试集,缺点是难以大规模开展;(2)重用已有反汇编工具,缺点是测试集不准确和不全面;(3)基于编译器的中间输入,缺点是难将跳转表信息与间接跳转对应起来;(4)基于编译过程的调试信息,缺点是测试集存在误报;(5)跟踪编译过程,缺点是构建效率低。综上,难以使用现有技术建立实用、准确、高效的间接跳转表求解算法的自动化测试框架。5.因此,出于对二进制反汇编工具的功能性评估,需要设计一种基于间接跳转表求解算法的二进制反汇编工具的测试方法。技术实现要素:6.发明目的:针对现有技术中存在的问题与不足,本发明提供一种针对二进制反汇编工具的间接跳转表求解过程的测试方法。7.技术方案:一种针对二进制反汇编工具的间接跳转表求解过程的测试方法,包括如下步骤:8.(1)构建c文件数据集。数据集中的每个c文件在编译后能够生成间接跳转表;9.(2)利用编译器跟踪c文件编译过程以自动化地收集间接跳转表信息构建不同优化等级下的二进制测试集;10.(3)基于二进制测试集,验证反汇编工具求解间接跳转表的结果,实现对间接跳转表求解过程的测试,获得反汇编工具的性能评估。11.可以将步骤(3)中的性能评估结合人工分析,进一步发现反汇编工具的缺陷,改进反汇编工具的性能。12.所述步骤(1)中,使用scsmith工具自动化、高效率、有效地构建可以生成跳转表的大型c文件数据集。13.所述步骤(2)中,利用oraclegt编译器跟踪c文件编译过程以自动化地收集间接跳转表信息构建不同优化等级下的二进制测试集。14.scsmith工具介绍如下:scsmith是csmith-2.3.0工具的扩展,负责自动化编写可以生成跳转表的c文件。其可以在c文件中生成switch-case语句。由于csmith定义了自上而下的生成规则,根据规则,csmith可以生成若干函数,每个函数包含若干局部变量与语句。15.使用scsmith工具生成c文件数据集,具体执行步骤如下:16.步骤10:使用csmith自动化生成随机内容的c文件。对于c文件中的每个函数,通过规则101-104来生成switch-case语句,使c文件中存在switch-case语句。17.规则101:假设当前函数中包含t个语句,随机地在第i个语句前找到一个插入点插入switch语句,且0≤i<t。18.规则102:随机地选取当前可用的局部或全局数值类型变量,包括char、short、int、long或enum,作为switch语句的表达式。此时当前switch可包含的语句个数为m=t-i。19.规则103:随机确定当前“跳转表”的大小为n。n决定了case语句中常量表达式的上限。为了使switch-case语句更有机会被编译器编译成跳转表,scsmith定义n的范围为2≤n《2*m。20.规则104:在第i条到第t条(不包括第t条)语句之间随机插入c个case语句。为了保证每个case至少包含一个语句,c满足2≤c<min(n,m)。为了保证语义正确,sccsmith还需保证case之间的常量表达式互不相同,且有一个常量表达式为n-1,这决定了编译出的跳转表的大小为n。21.步骤11:重复步骤10,直到设定时间。22.最终,得到一个c文件数据集。数据集中的每个c文件存在switch-case语句。23.oraclegt编译器介绍如下:oraclegt负责跟踪主流编译器的编译过程,自动化地收集间接跳转表信息至二进制文件。所述步骤(2)中,利用oraclegt编译器跟踪c文件编译过程以自动化地收集间接跳转表信息构建不同优化等级下的二进制测试集;具体执行步骤如下(以gcc编译器为例):24.步骤20:将scsmith生成的c文件数据集输入编译器。25.步骤21:编译器将处理后的文件交给汇编器。26.步骤22:汇编器将处理后的文件交给链接器。27.步骤23:链接器将处理后的文件交给关联器。28.经过以上步骤20-23获取的跳转表测试集只能与跳转表的交叉引用对应,并不能对应到最终的间接跳转指令。因此,利用oraclegt将跳转表信息与相应的间接跳转进行关联。对于跳转表测试集中的每个测试用例,oraclegt在编译过程中生成控制流图,将控制流图的每个指令处跟踪并更新寄存器与栈内存的污点信息,以找到跳转表与测试用例对应的间接跳转。29.所述步骤20,编译器编译scsmith生成的c文件数据集。对于每一个c文件,在编译器端执行如下步骤:30.步骤201:选择编译器参数及优化等级,将c文件作为输入交给编译器。31.步骤202:gcc编译器的rtlpass(registertransferlanguagepass)将c文件中的switch-case语句转为rtl中间语言。在这里,gimpile_switch结构将记录跳转表大小以及跳转表中每个表项的目标地址。32.步骤203:gcc后端遍历步骤202中生成每一条rtl中间语言指令及数据,对于其中的rtx_jmp_table_data数据结构(对应着汇编语言中的跳转表信息),oraclegt定义额外的汇编伪指令加以标记。33.步骤204:gcc将遍历的rtl中间语言及数据转换为汇编语言,生成汇编文件。34.所述步骤21,编译器将处理后的文件交给汇编器,汇编器执行如下步骤:35.步骤211:gas(gnuassembler)汇编器线性地解析步骤204所生成的汇编文件中的汇编指令。每当遇到.bbinfo_jmptbl伪指令时执行步骤212,当解析完成最后一条指令时执行步骤22,否则执行211。36.步骤212:在此处收集当前跳转表的信息。37.步骤213:记录下一个标签的位置。这将作为跳转表的基地址。38.步骤214:将步骤212中得到的当前跳转表信息与步骤213中得到的基地址的引用相关联,记录基地址引用在目标文件中的偏移,执行步骤211。39.所述步骤22,汇编器将处理后的文件交给链接器;链接器合并不同的目标文件以生成最终的二进制文件,在该过程中会更新跳转表在最终二进制文件中的偏移。40.所述步骤23:链接器将处理后的文件交给关联器,关联器执行如下步骤:41.步骤231:从指向跳转表基地址的引用开始进行污点分析。42.步骤232:对包含跳转表交叉引用的指令进行污点信息的初始化,将该指令的所有被用来写入的寄存器和栈内存染色。43.步骤233:根据控制流信息来更新下一条指令中寄存器与栈内存的污点信息。遍历所有源操作数中的寄存器与栈内存,以判断该指令的源操作数是否被染色。44.步骤234:如果源操作数被染色,需要将目标操作数中的寄存器与栈内存染色;否则,清除目标操作数中寄存器与栈内存的染色信息。然后,执行步骤235。45.步骤235:如果当前指令是间接跳转并且源操作数中寄存器或栈内存被染色,则找到了相应地的间接跳转指令,否则执行步骤233。将间接跳转的目标地址更新到控制流图上,以方便其它跳转表交叉引用污点分析的执行。46.反汇编工具测试的具体执行步骤如下:47.步骤300:将oraclegt生成的测试集输入反汇编工具。48.步骤301:收集反汇编工具结果。49.步骤302:对比正确结果,记录相关数据。50.步骤303:计算准确率与召回率及f1结果。51.有益效果:与现有技术相比,本发明使用scsmith自动化、高效率、有效地构建可以生成跳转表的大型c文件数据集,通过oraclegt编译器跟踪编译过程进一步构建不同优化等级下的二进制测试集,在测试集的基础上验证反汇编工具求解间接跳转表的结果,可以实现对反汇编工具的间接跳转表求解算法的性能评估。同时由于测试用例与间接跳转相对应,很容易指出错误发生的位置。经过实验证明,本发明所构建的测试集含有有效跳转表的个数更多、密度更大,且可以自动化构建,极大提高了测试效率。本发明可以用于反汇编工具的性能评估,也可以帮助反汇编工具发现缺陷和改进性能,具有广泛的应用前景。附图说明52.图1为本发明实施例的方法原理示意图。具体实施方式53.下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本技术所附权利要求所限定的范围。54.针对二进制反汇编工具的间接跳转表求解过程的测试方法,使用scsmith自动化、高效率、有效地构建可以生成跳转表的大型c文件数据集,通过oraclegt编译器跟踪编译过程进一步构建不同优化等级下的二进制测试集,通过对比反汇编工具求解间接跳转表的结果与正确结果,对反汇编工具的间接跳转表求解算法进行性能评估,并指出错误发生的位置。55.如图1所示,针对二进制反汇编工具的间接跳转表求解过程的测试方法,包括如下步骤:56.步骤1:首先,使用scsmith工具自动化、高效率、有效地构建可以生成跳转表的大型c文件数据集。57.步骤2:然后,oraclegt编译器跟踪c文件编译过程以自动化地收集间接跳转表信息构建不同优化等级下的二进制测试集,具体地,要经过编译器、汇编器、链接器和关联器。58.步骤3:其次,使用自动机脚本对比被测试的反汇编工具对二进制测试集求解间接跳转表的结果与正确结果,实现对间接跳转表求解过程的测试,获得性能评估。59.步骤4:最后,可以将性能评估结合人工分析,进一步发现反汇编工具的缺陷,改进反汇编工具的性能。60.使用scsmith工具生成跳转表的c文件数据集,具体执行步骤如下:61.步骤10:对每个函数,通过规则101-104来生成switch-case语句。62.规则101:假设当前函数中包含t个语句,随机地在第i个语句前找到一个插入点插入switch语句,且0≤i<t。63.规则102:随机地选取当前可用的局部或全局数值类型变量,包括char、short、int、long或enum,作为switch语句的表达式。此时当前switch可包含的语句个数为m=t-i。64.规则103:随机确定当前“跳转表”的大小为n。n决定了case语句中常量表达式的上限。为了使switch-case语句更有机会被编译器编译成跳转表,scsmith定义n的范围为2≤n《2*m。65.规则104:在第i条到第t条(不包括第t条)语句之间随机插入c个case语句。为了保证每个case至少包含一个语句,c满足2≤c<min(n,m)。为了保证语义正确,sccsmith还需保证case之间的常量表达式互不相同,且有一个常量表达式为n-1,这决定了编译出的跳转表的大小为n。66.步骤11:重复步骤10,直到设定时间。67.(1)csmith生成的函数:[0068][0069][0070]csmith生成函数,在该函数开始处,会首先进行局部变量的初始化(如代码行“inta=1,b=2,c=3,i=0;”所示)。接下来的几行是对已初始化的局部变量或函数参数进行引用的语句(需要说明的是for循环及里面的操作也被scsmith视作一个语句)。scsmith插入switch/case后的程序展示的是scsmith修改后的函数,其中用加粗标识的语句是由scsmith插入的。具体来说,scsmith会首先选择一个插入点(在该例子中插入点是csmith生成函数中的代码行“*p+=a;”),然后搜索在插入点处可用的数值类型的变量(比如a,b,c,i与*p,在该例子中选择了*p),将选中的变量(*p)作为switch语句的表达式(如scsmith插入switch/case后的程序中的代码行“switch(*p)”所示)。此时,scsmith可以计算出该switch可以包含的语句个数为4(csmith生成函数中代码行“*p+=a;”至代码行最后的语句,其中整个for循环被视作1个语句)。接着,scsmith随机确定了跳转表的大小为n=6。最后,scsmith在接下来的语句中随机插入4个case语句,并在每个case下面随机确定是否添加break语句。需要说明的是,由于新增的switch/case语句包含的语句只会涉及到对变量的引用,并没有定义新的变量,也就不存在变量的生命周期的变化。因此,scsmith不会引入新的编译错误。[0071]利用oraclegt编译器跟踪c文件编译过程以自动化地收集间接跳转表信息构建不同优化等级下的二进制测试集;具体执行步骤如下(以gcc为例):[0072]步骤20:将scsmith生成的c文件数据集输入编译器。[0073]步骤21:编译器将处理后的文件交给汇编器。[0074]步骤22:汇编器将处理后的文件交给链接器。[0075]步骤23:链接器将处理后的文件交给关联器。[0076]经过以上步骤20-23获取的跳转表测试集只能与跳转表的交叉引用对应,并不能对应到最终的间接跳转指令。因此,利用oraclegt将跳转表信息与相应的间接跳转进行关联,在控制流图的每个指令处跟踪并更新寄存器与栈内存的污点信息,以找到与测试用例对应的间接跳转。[0077]步骤20,将scsmith生成的c文件数据集输入编译器,编译器执行如下步骤:[0078]步骤201:选择编译器参数及优化等级,将c文件作为输入交给编译器。[0079]步骤202:通过gcc编译器的rtlpass(registertransferlanguagepass)将c文件中的switch-case语句转为rtl中间语言,在这里,gimpile_switch结构将记录跳转表大小以及跳转表中每个表项的目标地址。[0080]步骤203:gcc后端将rtl中间语言转换为汇编语言,具体来说,遍历每一条指令及数据将rtl表示的指令数据生成到汇编文件。在这里,oraclegt会劫持gcc将rtx_jmp_table_data转为汇编代码中跳转表的过程。[0081]步骤204:oraclegt定义额外的汇编伪指令来标记步骤203中所述汇编文件中的跳转表信息。[0082]所述步骤21,编译器将处理后的文件交给汇编器,汇编器执行如下步骤:[0083]步骤211:gas(gnuassembler)汇编器线性地解析汇编文件中的所有汇编指令,每当遇到.bbinfo_jmptbl伪指令时执行步骤212,当解析完成最后一条指令时执行步骤22,否则执行211。[0084]步骤212:收集当前跳转表的信息。[0085]步骤213:记录下一个标签为的位置作为跳转表的基地址。[0086]步骤214:将当前跳转表信息与基地址的引用相关联,记录基地址引用在目标文件中的偏移,执行步骤211。[0087]步骤22,汇编器将处理后的文件交给链接器;链接器合并不同的目标文件以生成最终的二进制文件,在该过程中会更新跳转表在最终二进制文件中的偏移。[0088][0089]上述代码是oraclegt编译器在汇编代码标记跳转表信息实例示意图。oraclegt编译器的执行顺序是,将scsmith生成的c文件作为输入,经过编译器、汇编器、链接器的执行,将产生内容类似上述代码的文件(但是以二进制文件的形式),其中第3行的.l1001是对跳转表基地址的引用。但为了对反汇编工具进行更精确的评估以及方便研究人员分析跳转表错误。oraclegt还要将跳转表信息与相应的间接跳转进行关联,即关联器。最终,跳转表基地址将直接对应第4行的间接跳转。[0090]下面说明本发明所述的间接跳转目标查找算法。算法如下:[0091][0092][0093]输入输出如下:[0094]输入:假设输入jtr是识别出的间接跳转表对应的交叉引用数组,jtr_i是数组中的元素,代表交叉引用,其中i从1到n,n是数组个数。假设cfg是控制流图。[0095]输出:假设输出m是间接跳转表对应的交叉引用与跳转表映射数组,(jtr_i,ij_i)是数组中的元素,其中ij_i代表找到的间接跳转,其中i从1到n,n是数组个数。[0096]这样,查找间接跳转目标的流程为:[0097]步骤1:从指向跳转表基地址的引用开始进行污点分析。[0098]步骤2:对包含跳转表交叉引用的指令进行污点信息的初始化,将该指令的所有被用来写入的寄存器和栈内存染色。[0099]步骤3:根据控制流信息来更新下一条指令中寄存器与栈内存的污点信息。遍历所有源操作数中的寄存器与栈内存,以判断该指令的源操作数是否被染色。[0100]步骤4:如果源操作数被染色,需要将目标操作数中的寄存器与栈内存染色;否则,清除目标操作数中寄存器与栈内存的染色信息。然后,执行步骤5。[0101]步骤5:如果当前指令是间接跳转并且源操作数中寄存器或栈内存被染色,则找到了相应地的间接跳转指令,否则执行步骤3。将间接跳转的目标地址更新到控制流图上,以方便其它跳转表交叉引用污点分析的执行。[0102]步骤6,计算过程结束。[0103]综上所述,本发明可以应用于反汇编工具评估、反汇编工具改进、软件质量分析、软件错误分析等诸多方面。例如,在反汇编工具改进方面,可进行跨反汇编工具自动化测试,找到反汇编工具之间的结果差异,以此发现相关反汇编工具可能存在问题,借助错误位置查找原因,加以修复和改进。因此,本发明可以用于反汇编工具的性能评估,也可以帮助反汇编工具发现缺陷和改进性能,具有广泛的应用前景。由于使用的测试集可以自动化、持续性生成,测试也可以自动化、持续性展开,且构建的测试集含有有效跳转表的个数更多、密度更大,极大提高了测试效率。因此,本技术具有很高的实用价值。[0104]本发明可以在gcc或clang/llvm编译器的不同优化等级下对c语言文件进行自动化测试。以上所述仅是本发明在特定环境下的实现,也可以继续扩展到其他语言和编译器。应当指出,对于本
技术领域:
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部份均可用现有技术加以实现。当前第1页12当前第1页12
技术特征:
1.一种针对二进制反汇编工具的间接跳转表求解过程的测试方法,其特征在于,包括如下步骤:(1)构建c文件数据集,数据集中的每个c文件在编译后能够生成间接跳转表;(2)利用编译器跟踪c文件编译过程以自动化地收集间接跳转表信息构建不同优化等级下的二进制测试集;(3)基于二进制测试集,验证反汇编工具求解间接跳转表的结果,实现对间接跳转表求解过程的测试,获得反汇编工具的性能评估。2.根据权利要求1所述的针对二进制反汇编工具的间接跳转表求解过程的测试方法,其特征在于,将步骤(3)中的性能评估结合人工分析,进一步发现反汇编工具的缺陷,改进反汇编工具的性能。3.根据权利要求1所述的针对二进制反汇编工具的间接跳转表求解过程的测试方法,其特征在于,所述步骤(1)中,使用scsmith工具构建能生成跳转表的c文件数据集。4.根据权利要求1所述的针对二进制反汇编工具的间接跳转表求解过程的测试方法,其特征在于,所述步骤(2)中,利用oraclegt编译器跟踪c文件编译过程以自动化地收集间接跳转表信息构建不同优化等级下的二进制测试集。5.根据权利要求1或3所述的针对二进制反汇编工具的间接跳转表求解过程的测试方法,其特征在于,使用scsmith工具生成c文件数据集,具体执行步骤如下:步骤10:使用csmith自动化生成随机内容的c文件;对于c文件中的每个函数,通过规则101-104来生成switch-case语句,使c文件中存在switch-case语句;规则101:假设当前函数中包含t个语句,随机地在第i个语句前找到一个插入点插入switch语句,且0≤i<t;规则102:随机地选取当前可用的局部或全局数值类型变量,作为switch语句的表达式;此时当前switch可包含的语句个数为m=t-i;规则103:随机确定当前“跳转表”的大小为n;n决定了case语句中常量表达式的上限;为了使switch-case语句更有机会被编译器编译成跳转表,scsmith定义n的范围为2≤n<2*m;规则104:在第i条到第t条(不包括第t条)语句之间随机插入c个case语句;为了保证每个case至少包含一个语句,c满足2≤c<min(n,m);为了保证语义正确,sccsmith还需保证case之间的常量表达式互不相同,且有一个常量表达式为n-1,这决定了编译出的跳转表的大小为n;步骤11:重复步骤10,直到设定时间;最终,得到一个c文件数据集,数据集中的每个c文件存在switch-case语句。6.根据权利要求1或4所述的针对二进制反汇编工具的间接跳转表求解过程的测试方法,其特征在于,所述步骤(2)中,利用oraclegt编译器跟踪c文件编译过程以自动化地收集间接跳转表信息构建不同优化等级下的二进制测试集;具体执行步骤如下:步骤20:将scsmith生成的c文件数据集输入编译器;步骤21:编译器将处理后的文件交给汇编器;步骤22:汇编器将处理后的文件交给链接器;步骤23:链接器将处理后的文件交给关联器;
利用oraclegt将跳转表信息与相应的间接跳转进行关联;对于跳转表测试集中的每个测试用例,oraclegt在编译过程中生成控制流图,将控制流图的每个指令处跟踪并更新寄存器与栈内存的污点信息,以找到跳转表与测试用例对应的间接跳转。7.根据权利要求6所述的针对二进制反汇编工具的间接跳转表求解过程的测试方法,其特征在于,所述步骤20,编译器编译scsmith生成的c文件数据集,对于每一个c文件,在编译器端执行如下步骤:步骤201:选择编译器参数及优化等级,将c文件作为输入交给编译器;步骤202:gcc 编译器的rtl pas将c文件中的switch-case语句转为rtl中间语言; gimpile_switch结构将记录跳转表大小以及跳转表中每个表项的目标地址;步骤203:gcc后端遍历步骤202中生成每一条rtl中间语言指令及数据,对于其中的rtx_jmp_table_data数据结构,oraclegt定义额外的汇编伪指令加以标记;步骤204:gcc将遍历的rtl中间语言及数据转换为汇编语言,生成汇编文件。8.根据权利要求7所述的针对二进制反汇编工具的间接跳转表求解过程的测试方法,其特征在于,所述步骤21,编译器将处理后的文件交给汇编器,汇编器执行如下步骤:步骤211:gas汇编器线性地解析步骤204所生成的汇编文件中的汇编指令;每当遇到.bbinfo_jmptbl伪指令时执行步骤212,当解析完成最后一条指令时执行步骤22,否则执行211;步骤212:在此处收集当前跳转表的信息;步骤213:记录下一个标签的位置作为跳转表的基地址;步骤214:将步骤212中得到的当前跳转表信息与步骤213中得到的基地址的引用相关联,记录基地址引用在目标文件中的偏移,执行步骤211。9.根据权利要求6所述的针对二进制反汇编工具的间接跳转表求解过程的测试方法,其特征在于,所述步骤22,汇编器将处理后的文件交给链接器;链接器合并不同的目标文件以生成最终的二进制文件,在该过程中会更新跳转表在最终二进制文件中的偏移。10.根据权利要求6所述的针对二进制反汇编工具的间接跳转表求解过程的测试方法,其特征在于,所述步骤23:链接器将处理后的文件交给关联器,关联器执行如下步骤:步骤231:从指向跳转表基地址的引用开始进行污点分析;步骤232:对包含跳转表交叉引用的指令进行污点信息的初始化,将该指令的所有被用来写入的寄存器和栈内存染色;步骤233:根据控制流信息来更新下一条指令中寄存器与栈内存的污点信息;遍历所有源操作数中的寄存器与栈内存,以判断该指令的源操作数是否被染色;步骤234:如果源操作数被染色,需要将目标操作数中的寄存器与栈内存染色;否则,清除目标操作数中寄存器与栈内存的染色信息;然后,执行步骤235;步骤235:如果当前指令是间接跳转并且源操作数中寄存器或栈内存被染色,则找到了相应地的间接跳转指令,否则执行步骤233;将间接跳转的目标地址更新到控制流图上,以方便其它跳转表交叉引用污点分析的执行。
技术总结
本发明公开一种针对二进制反汇编工具的间接跳转表求解过程的测试方法,使用SCsmith自动化、高效率、有效地构建可以生成跳转表的大型C文件数据集,通过OracleGT编译器跟踪编译过程进一步构建不同优化等级下的二进制测试集,通过对比反汇编工具求解间接跳转表的结果与正确结果,对反汇编工具的间接跳转表求解算法进行性能评估,并指出错误发生的位置。同时由于测试用例与间接跳转相对应,很容易指出错误发生的位置。本发明所构建的测试集含有有效跳转表的个数更多、密度更大,且可以自动化构建,极大提高了测试效率。本发明可以用于反汇编工具的性能评估,也可以帮助反汇编工具发现缺陷和改进性能,具有广泛的应用前景。具有广泛的应用前景。具有广泛的应用前景。
技术研发人员:徐雪兰 庞成宾 张天泰 茅兵
受保护的技术使用者:南京大学
技术研发日:2023.03.21
技术公布日:2023/7/12
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
