当前位置: 首页 > 专利查询>南京大学专利>正文

一种基于硬件的高级程序动态控制流追踪方法和装置制造方法及图纸

技术编号:28708460 阅读:17 留言:0更新日期:2021-06-05 23:17
本发明专利技术公开了一种基于硬件的高级程序动态控制流追踪方法和装置。该方法对待追踪程序静态分析,生成控制流图、类继承图和调用图,通过虚拟机执行待追踪程序收集字节码指令模版、执行信息和追踪数据。然后按照线程对追踪数据进行解码匹配,对照控制流图生成相应的执行流图,最后判断是否存在执行流数据是否存在缺失,如果是,则尽可能还原出执行流图,恢复其中缺失的部分,最终输出执行流图。本发明专利技术实现了利用硬件追踪模块对高级语言程序的控制流追踪,并且通过执行流数据的补缺分析处理,解决硬件输出追踪数据和磁盘存储速度不一致的问题。题。题。

【技术实现步骤摘要】
一种基于硬件的高级程序动态控制流追踪方法和装置


[0001]本专利技术涉及基于硬件的高级程序执行的动态控制流追踪。

技术介绍

[0002]现代CPU大多配备了硬件追踪模块,比如Intel Processor Trace (PT)和ARM Embedded TraceMacrocell (ETM),这些模块提供了高效率的控制流追踪能力。而控制流追踪技术在广泛的软件工程活动中发挥着重要的作用,包括测试、调试、性能分析等。比如我们获取了某个程序完整的控制流追踪信息,那么各种各样的执行信息如方法和语句覆盖、路径覆盖和调用信息都可以轻而易举的计算出。
[0003]现有的追踪技术主要包括两类:软件追踪和硬件追踪。软件追踪通常会对用户源代码进行插桩,通常依赖于编译器架构并且具有高昂的运行开销。硬件追踪相较于软件追踪,利用硬件追踪模块,具有更小的运行开销和通用性,并且不需要对源代码进行插桩修改。
[0004]到目前为止,基于硬件的追踪仅仅应用于可以直接运行在硬件上的本地程序。这是因为处理器只能处理硬件指令,而对本地程序而言,这些指令可以在源代码编译中产生的编译调试信息的帮助下轻松映射回源代码。但是随着诸如Java,Go和Scala之类的高级语言在现代计算中起到日益重要的作用,迫切地需要对硬件模块进行扩展,使其能够为高级语言提供高效率的控制流追踪。
[0005]利用硬件追踪高级语言程序存在着巨大的挑战,主要是由高级语言运行时的复杂性导致的。例如执行Java程序的Java虚拟机(JVM),它在解释执行和JIT(JustinTime)编译执行之间切换:JVM开始为解释执行,当一段代码或者方法变为热点代码或方法时,切换到JIT编译模式,直接执行编译过的代码。同时,对于这类高级语言,CPU实际执行的指令与用户高级语言代码存在巨大差距,这不仅体现在机器码与字节码上的结构化差异上,还体现在不同编译策略下产生的代码的不同。比如在JVM中解释执行直接利用模版生成代码,而JIT编译会对编译的代码进行多次优化。更麻烦的是运行时可能在代码中插入各种检查代码(比如读写障碍和边界检查),导致开发者所写的代码和实际CPU执行的存在巨大结构差异。

技术实现思路

[0006]本专利技术所要解决的问题:对基于解释执行的高级语言程序实现硬件追踪。
[0007]为解决上述问题,本专利技术采用的方案如下:根据本专利技术的一种基于硬件的高级程序动态控制流追踪方法,包括如下步骤:S1:获取待追踪的程序;S2:对所述待追踪的程序进行静态分析,生成控制流图、类继承图和调用关系图;S3:收集通过虚拟机执行所述待追踪的程序时的字节码指令模版、执行信息和追踪数据;
S4:根据所生成的控制流图和所收集的字节码指令模版、追踪数据和执行信息,生成执行流图;S5:输出所述的执行流图;其中,所述步骤S3包括如下步骤:S31:启动虚拟机,然后对所启动的虚拟机进程进行处理器硬件追踪的初始化,使得处理器硬件追踪虚拟机进程得到的处理器控制流的追踪数据能够输至指定的追踪数据缓冲区,并由追踪数据转存模块将所述追踪数据缓冲区中的追踪数据转存至磁盘中;S32:当虚拟机进程对待追踪的程序初始化时,导出字节码指令模版;S33:当所述虚拟机对待追踪的程序初始化后,对所述虚拟机进程进行执行信息初始化,使得所述虚拟机进程执行程序生成机器码指令时,将字节码指令与机器码指令之间的映射信息输至指定的执行信息缓冲区,并由执行信息转存模块将所述执行信息缓冲区中的执行信息转存至磁盘中;所述执行信息为字节码指令与机器码指令之间的映射信息;S34:通过所述虚拟机进程执行所述待追踪的程序并开启处理器硬件追踪,通过所述追踪数据转存模块和所述执行信息缓存模块将所述待追踪的程序执行过程中的追踪数据和执行信息存入磁盘中;所述步骤S4包括如下步骤:S41:根据所述追踪数据的线程切换信息和时间戳信息,提取出属于待追踪的程序的追踪数据;S42:根据按内存地址信息确定所提取的追踪数据为解释执行数据还是实时执行数据;对于解释执行数据,根据所述字节码指令模版找到对应的字节码指令;对于实时执行数据,则对其进行解码,然后根据所述的字节码指令与机器码指令之间的映射信息,得到对应的字节码指令;S43:将字节码指令拼接成字节码指令流,然后字节码指令流在所述控制流图中找到相应的节点,并记录执行流数据生成执行流图节点;所述执行流数据包括执行次序标号和执行的时间戳。
[0008]进一步,根据本专利技术的基于硬件的高级程序动态控制流追踪方法,所述步骤S5中,输出所述的执行流图前,对所述执行流图判断是否存在执行流数据缺失的情形,若存在执行流数据缺失的情形则尽可能地补齐,包括如下步骤:S51:根据所述追踪数据的线程切换信息和时间戳信息,对所述的执行流图中的节点分线程按执行流数据的时间戳信息进行排序;S52:判断每个线程所排序的节点在时间戳上是否连续,若不连续,则标记为缺失点;S53:判断缺失点的前后连续节点是否存在执行流数据,若与缺失点其前后连续节点中有节点存在执行流数据,则将该执行流数据补入该缺失点。
[0009]根据本专利技术的一种基于硬件的高级程序动态控制流追踪装置,包括如下模块:M1,用于:获取待追踪的程序;M2,用于:对所述待追踪的程序进行静态分析,生成控制流图、类继承图和调用关系图;M3,用于:收集通过虚拟机执行所述待追踪的程序时的字节码指令模版、执行信息
和追踪数据;M4,用于:根据所生成的控制流图和所收集的字节码指令模版、追踪数据和执行信息,生成执行流图;M5,用于:输出所述的执行流图;其中,所述模块M3包括如下模块:M31,用于:启动虚拟机,然后对所启动的虚拟机进程进行处理器硬件追踪的初始化,使得处理器硬件追踪虚拟机进程得到的处理器控制流的追踪数据能够输至指定的追踪数据缓冲区,并由追踪数据转存模块将所述追踪数据缓冲区中的追踪数据转存至磁盘中;M32,用于:当虚拟机进程对待追踪的程序初始化时,导出字节码指令模版;M33,用于:当所述虚拟机对待追踪的程序初始化后,对所述虚拟机进程进行执行信息初始化,使得所述虚拟机进程执行程序生成机器码指令时,将字节码指令与机器码指令之间的映射信息输至指定的执行信息缓冲区,并由执行信息转存模块将所述执行信息缓冲区中的执行信息转存至磁盘中;所述执行信息为字节码指令与机器码指令之间的映射信息;M34,用于:通过所述虚拟机进程执行所述待追踪的程序并开启处理器硬件追踪,通过所述追踪数据转存模块和所述执行信息缓存模块将所述待追踪的程序执行过程中的追踪数据和执行信息存入磁盘中;所述模块M4包括如下模块:M41,用于:根据所述追踪数据的线程切换信息和时间戳信息,提取出属于待追踪的程序的追踪数据;M42,用于:根据按内存地址信息确定所提取的追踪数据为解释执行数据还是实时执行数据;对于解释执行数据,根据所述字节码指令模版找到对应的字节码指令;对于实时执行数据,则对其进行解码,然后根据所述的字节码指令与机器码指令之间的映射信息,得到对应的字节码指令;M43,用于:将字节码指令拼接成字节码指令流,然后字节码指令流在所述控制流图中找到相本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于硬件的高级程序动态控制流追踪方法,其特征在于,包括如下步骤:S1:获取待追踪的程序;S2:对所述待追踪的程序进行静态分析,生成控制流图、类继承图和调用关系图;S3:收集通过虚拟机执行所述待追踪的程序时的字节码指令模版、执行信息和追踪数据;S4:根据所生成的控制流图和所收集的字节码指令模版、追踪数据和执行信息,生成执行流图;S5:输出所述的执行流图;其中,所述步骤S3包括如下步骤:S31:启动虚拟机,然后对所启动的虚拟机进程进行处理器硬件追踪的初始化,使得处理器硬件模块追踪虚拟机进程得到的处理器控制流的追踪数据能够输至指定的追踪数据缓冲区,并由追踪数据转存模块将所述追踪数据缓冲区中的追踪数据转存至磁盘中;S32:当虚拟机进程对待追踪的程序初始化时,导出字节码指令模版;S33:当所述虚拟机对待追踪的程序初始化后,对所述虚拟机进程进行执行信息初始化,使得所述虚拟机进程执行程序生成机器码指令时,将字节码指令与机器码指令之间的映射信息输至指定的执行信息缓冲区,并由执行信息转存模块将所述执行信息缓冲区中的执行信息转存至磁盘中;所述执行信息为字节码指令与机器码指令之间的映射信息;S34:通过所述虚拟机进程执行所述待追踪的程序并开启处理器硬件追踪,通过所述追踪数据转存模块和所述执行信息缓存模块将所述待追踪的程序执行过程中的追踪数据和执行信息存入磁盘中;所述步骤S4包括如下步骤:S41:根据所述追踪数据的线程切换信息和时间戳信息,提取出属于待追踪的程序的追踪数据;S42:根据按内存地址信息确定所提取的追踪数据为解释执行数据还是实时执行数据;对于解释执行数据,根据所述字节码指令模版找到对应的字节码指令;对于实时执行数据,则对其进行解码,然后根据所述的字节码指令与机器码指令之间的映射信息,得到对应的字节码指令;S43:将字节码指令拼接成字节码指令流,然后字节码指令流在所述控制流图中找到相应的节点,并记录执行流数据生成执行流图节点;所述执行流数据包括执行次序标号和执行的时间戳。2.如权利要求1所述的基于硬件的高级程序动态控制流追踪方法,其特征在于,所述步骤S5中,输出所述的执行流图前,对所述执行流图判断是否存在执行流数据缺失的情形,若存在执行流数据缺失的情形则尽可能地补齐,包括如下步骤:S51:根据所述追踪数据的线程切换信息和时间戳信息,对所述的执行流图中的节点分线程按执行流数据的时间戳信息进行排序;S52:判断每个线程所排序的节点在时间戳上是否连续,若不连续,则标记为缺失点;S53:判断缺失点的前后连续节点是否存在执行流数据,若与缺失点其前后连续节点中有节点存在执行流数据,则将该执行流数据补入该缺失点。3.一种基于硬件的高级程序动态控制流追踪装置,其特征在于...

【专利技术属性】
技术研发人员:左志强吉凯王乙飞陶威王林章李宣东
申请(专利权)人:南京大学
类型:发明
国别省市:

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

1