一种用于轨迹跟踪和覆盖分析的选择性动态二进制插桩方法技术

技术编号:38556649 阅读:15 留言:0更新日期:2023-08-22 21:00
本发明专利技术实施例公开了一种用于轨迹跟踪和覆盖分析的选择性动态二进制插桩方法,用于程序动态分析,该方法属于计算机程序分析领域。本申请设计了一种桩点可选、无用桩点程序自动剔除的动态二进制插桩方法,有效的克服插桩输出结果存储和传输消耗大,目标程序执行速度显著降低等不良影响。著降低等不良影响。

【技术实现步骤摘要】
一种用于轨迹跟踪和覆盖分析的选择性动态二进制插桩方法


[0001]本专利技术涉及计算机软件动态分析
,具体涉及一种用于轨迹跟踪和覆盖分析的选择性动态二进制插桩方法。

技术介绍

[0002]软件插桩是一项十分重要的软件动态分析技术。通过软件插桩技术可有效收集程序执行过程信息,如路径覆盖信息、函数调用关系信息,广泛用于软件性能分析、程序优化、测试覆盖分析、软件缺陷检测与修复,可有效提高复杂嵌入式软件的可靠性。但是,常用的软件插桩方法通常是源代码插桩。源代码插桩需要修改被测软件的源代码并重新编译链接生成目标码,不但过程复杂,而且不可避免的改变被测软件的运行流程,严重影响软件的动态分析的准确性。而基于二进制动态翻译执行的动态二进制分析虽然可以克服上述缺陷,但也带来了新的缺陷:动态二进制插桩的粒度一般在翻译基本块TB(Translation Block)的层次进行。现有翻译基本块的层次的插桩过程则是对每个翻译基本块不加选择的插桩,做得最好的也就是在桩程序内在逻辑中附加执行检测控制数据输出。然而,在实际二进制程序目标码中,大约有50%以上目标码基本块(Basic Block)由编译器生成或来自其它第三方库中。然而,大多数时候用户不需要对编译器库和第三方库中程序分析,仅关心属于自己业务范围内的源程序运行问题。不加选择的对所有的翻译基本块插桩,一方面造成了程序运行轨迹、覆盖信息、函数调用信息中多出了数量庞大而不必要信息,不利于覆盖轨迹信息的传输和存储。另一方面在宿主程序中也生成了众多的桩程序,桩程序的执行也严重影响了宿主程序执行的效率。若能够找到一种方法不插桩编译器生成的、链接的第三方库或用户不关心的程序部分,则能显著提升动态二进制插桩的执行效率,降低传输带宽和存储空间。
[0003]针对上述问题,本文专利技术了一种用于轨迹跟踪和覆盖分析的选择性动态二进制插桩方法,该方法同时采用自动和用户选择两种方法不插桩用户不关注的亚基本块SBB,显著改善插桩对仿真执行效率的不良影响,减少插桩输出数据,从而减少对覆盖和轨迹分析时间,具有很强的实用性。

技术实现思路

[0004]本专利技术实施例的目的在于提供一种用于轨迹跟踪和覆盖分析的选择性动态二进制插桩方法。本专利技术依次包括如下内容:分析待插桩目标二进制码调试信息,自动标记不需要插桩的亚基本块;对不需要分析的文件、函数、语句块或库中需要插桩的亚基本块进行人工标记;目标机指令翻译时,根据人工标记插桩,不插桩未人工标记的亚基本块。
[0005]进一步的,所述分析待插桩目标二进制码调试信息,自动标记不需要插桩的亚基本块包括:读取待插桩程序的调试信息,逐一遍历各编译单元Line_Prog,生成亚基本块信息
八元组,SBBI:{DIR,FILE,FUNC,LINE,COLUMN,PC_L,PC_H,Flag},其中,DIR为该亚基本块对应的目录路径,FILE为该亚基本块对应的文件名,FUNC为该亚基本块对应的函数名,LINE为该亚基本块所在的源文件行号,COLUMN为该亚基本块所在的源文件列号,PC_L和PC_H规定了该亚基本块在目标码中PC(ProgramCount)的范围,FLAG用于标记亚基本块是否需要插桩;若亚基本块信息SBBI中的DIR或FILE为空,则认为该亚基本块无需插桩;若亚基本块信息SBBI中LINE为0,则认为该亚基本块无需插桩;需要插桩的亚基本块SBBIi构成集合SBBIS。
[0006]进一步的,所述对不需要分析的文件、函数、语句块或库中需要插桩的亚基本块进行人工标记包括:根据待插桩程序的调试信息,还原待插桩程序的源代码目录资源树;如若调试信息中的源代码目录或文件在用户本地不存在,用户可指定其他文件夹为源文件目录或文件;用户可通过工具软件选择标记不需要跟踪和统计覆盖信息的目录、文件、函数或语句块,软件根据用户标记,将用户的选择映射为不需要插桩的亚基本块集合NSBBIS,则更新SBBIS:SBBIS=SBBIS

NSBBIS。
[0007]进一步的,所述目标机指令翻译时,根据人工标记插桩,不插桩未人工标记的亚基本块包括:目标机程序动态执行翻译成宿主机程序时,通过当前翻译基本块包含的范围选取集合SBBIS中的亚基本块构成子集SBBISsub;如果SBBISsub不为空,则插桩;否则,不插桩;插桩的内容为桩程序;桩程序的主要功能为:如果仅进行覆盖分析,则遍历SBBISsub,标记SBBISsub的中的亚基本块为已执行;如果进行轨迹跟踪,则记录RangeTB;如果进行故障注入或程序变量监视,将桩程序设计为脚本解释器,脚本解释器提供读写寄存器和存储器。
[0008]附图说明
[0009]为了更清楚地说明本专利技术的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还根据提供的附图引伸获得其它的实施附图。
[0010]本说明书所绘示的结构、比例、大小,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本专利技术可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本专利技术所能产生的功效及所能达成的目的下,均应仍落在本专利技术所揭示的
技术实现思路
得能涵盖的范围内。
[0011]图1为本专利技术实施例提供的选择性动态二进制插桩执行流程图。
[0012]图2为本专利技术实施例提供的程序源代码和基本块对应关系示意图。
[0013]图3为本专利技术实施例提供的BB、TB和SBB关系示意图。
[0014]图4为本专利技术实施例提供的现有技术的动态二进制插桩执行流程框图。
[0015]图5为本专利技术实施例提供的选择性动态二进制插桩执行流程框图。
[0016]具体实施方式
[0017]以下由特定的具体实施例说明本专利技术的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本专利技术的其他优点及功效,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0018]实施例1为使本专利技术的上述目的、特征和优点能够更加简明易懂,下面结合附图和具体实施方式对本专利技术进行进一步的说明。
[0019]为了说明本
技术实现思路
,我们先简要介绍动态二进制插桩。动态二进制插桩是在宿主程序中采用指令翻译技术执行寄宿程序,并在翻译过程中插入宿主程序指令序列(桩程序)获取寄宿程序执行信息的一种方法,如图4所示。该翻译的过程一般以基本块(BB)为单位进行翻译和缓存。所谓基本块是指以控制流转移指令为结束标志的指令序列。而在实践中,通常以翻译基本块(TB)为单位进行翻译和缓存。所谓翻译基本块是指为了满足翻译需要,或程序跟踪执行、调试需要,把基本块进一步划分为更小的粒度,以便插桩获取寄宿程序相关信息。这是因为,桩程序只能获取翻本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种用于轨迹跟踪和覆盖分析的选择性动态二进制插桩方法,其特征在于,包括:分析待插桩目标二进制码调试信息,自动标记不需要插桩的亚基本块;对不需要分析的文件、函数、语句块或库中需要插桩的亚基本块进行人工标记;目标机指令翻译时,根据人工标记插桩,不插桩未人工标记的亚基本块。2.如权利要求1所述的方法,其特征在于,所述分析待插桩目标二进制码调试信息,自动标记不需要插桩的亚基本块包括:读取待插桩程序的调试信息,逐一遍历各编译单元Line_Prog,生成亚基本块信息八元组,SBBI:{DIR,FILE,FUNC,LINE,COLUMN,PC_L,PC_H,Flag},其中,DIR为该亚基本块对应的目录路径,FILE为该亚基本块对应的文件名,FUNC为该亚基本块对应的函数名,LINE为该亚基本块所在的源文件行号,COLUMN为该亚基本块所在的源文件列号,PC_L和PC_H规定了该亚基本块在目标码中指令指针的范围,FLAG用于标记亚基本块是否需要插桩;若亚基本块信息SBBI中的DIR或FILE为空,则认为该亚基本块无需插桩;若亚基本块信息SBBI中LINE为0,则认为该亚基本块无需插桩;需要插桩的亚基本块SBBIi构成集合SBBIS。3.如权利要求1...

【专利技术属性】
技术研发人员:邹伟李春雷邓霏胡驰马思友杨万生仵林博尚小虎张浩
申请(专利权)人:中国工程物理研究院计算机应用研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1