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

一种用于验证CPU指令模拟执行效果一致性的方法技术

技术编号:30318215 阅读:47 留言:0更新日期:2021-10-09 23:21
本发明专利技术公开一种用于验证CPU指令模拟执行效果一致性的方法,该方法首先根据指令规范手册对指令的二进制编码进行解析,识别指令的二进制编码中各个符号的具体类型,通过生成或采样等方式生成指令流测试例;然后初始化真实设备和CPU模拟器,保持两者初始状态一致,然后分别在真实设备和CPU模拟器中执行指令流测试例,得到两者的执行结果;通过比对两者的执行结果,判断指令流测试例在CPU模拟器中的运行结果是否与真实设备一致。本发明专利技术的方法使用无需特殊的硬件支持,可用于修复和改良现有的CPU模拟器,也可应用于识别模拟器环境、反模拟器、反模糊测试等场景。反模糊测试等场景。反模糊测试等场景。

【技术实现步骤摘要】
一种用于验证CPU指令模拟执行效果一致性的方法


[0001]本专利技术属于信息安全
,具体涉及一种用于验证CPU指令模拟执行效果一致性的方法。

技术介绍

[0002]当前,CPU模拟器被广泛应用于软件开发和程序动态分析。尽管很多硬件平台也为这些需求提供了一些基于硬件的程序追踪和调试支持,如Intel PT等,这些硬件特性往往会有一些局限性。例如,ARM ETM只提供了有限大小的追踪缓存(ETB),在Juno开发板上的ETB只有64KB大小。与基于硬件的调试技术相比,CPU模拟器提供了细粒度的程序追踪能力、完整的系统监控能力以及在不同操作系统和架构上运行的可扩展性。因此,研究人员基于CPU模拟器搭建了各种程序动态分析平台,以支持恶意软件分析、开发live patch和分析程序崩溃原因等。
[0003]CPU模拟器等软件模拟技术的广泛应用是建立在这些模拟器能够准确模拟真实硬件上每一条硬件指令的执行效果上的这一被普遍置信的假设上的。然而,这一假设并不总是成立,CPU模拟器可能会因为故障或者实现与真实硬件不一致,导致指令的执行效果与真实设备不一致。为尽可能避免这种情况的发生,需要有一种用于验证CPU指令模拟执行一致性的方法,以找出这样的情况并及时修复。

技术实现思路

[0004]针对现有技术的不足,本专利技术提供一种用于验证CPU指令模拟执行一致性的方法,以帮助提高CPU模拟器模拟指令的准确性。具体技术方案如下:
[0005]一种用于验证CPU指令模拟执行效果一致性的方法,该方法包括如下步骤:
[0006]S1:生成用于测试指令执行效果一致性的指令流测试例;
[0007]根据指令规范手册对指令的二进制编码进行解析,识别指令的二进制编码中各个符号的具体类型,通过生成或采样等方式生成指令流测试例;
[0008]S2:对真实设备和CPU模拟器进行差分测试;
[0009]初始化真实设备和CPU模拟器,保持两者初始状态一致,然后分别在真实设备和CPU模拟器中执行指令流测试例,得到两者的执行结果;通过比对两者的执行结果,判断指令流测试例在CPU模拟器中的运行结果是否与真实设备一致。
[0010]进一步地,采用生成方式得到指令流测试例的方法具体如下:
[0011](1)按照各个符号的具体类型,为每个类型的符号生成一系列初始值;
[0012](2)根据指令规范手册获得各个符号的取值约束,并通过约束求解为各个符号获取尽可能多的有效值;
[0013](3)对指令各个符号的初始值集和约束求解得到的值集求并集,得到各个符号的有效值集合;
[0014](4)对各个符号的有效值集合进行笛卡尔乘积计算,并生成指令流测试例。
[0015]进一步地,所述S2通过如下方式实现:
[0016]S2.1:为指令流测试例添加前置代码和后续代码,生成测试程序;
[0017]S2.2:在真实设备与CPU模拟器中分别运行所述测试程序;所述测试程序执行如下步骤:
[0018](1)为可能被触发的各个信号注册信号处理函数;
[0019](2)初始化寄存器状态;
[0020](3)运行指令流测试例;
[0021](4)输出当前状态信息,输出的信息包括PC寄存器值、指令操作的寄存器值、指令操作的内存、状态寄存器值及触发的信号;
[0022](5)退出程序;
[0023]S2.3:通过比对两者的执行结果,判断指令流测试例在CPU模拟器中的运行结果是否与真实设备一致;当且仅当以下的情况,差分测试引擎判定该指令的模拟是不一致的:
[0024](a)在真实设备和CPU模拟器均未捕捉到信号,但二者的寄存器状态、内存读写情况有差异;
[0025](b)在真实设备和CPU模拟器捕捉到不同的信号;
[0026](c)在真实设备和CPU模拟器捕捉到相同的信号,但二者的寄存器状态有差异。
[0027]本专利技术的有益效果如下:
[0028]本专利技术的方法使用无需特殊的硬件支持,可用于修复和改良现有的CPU模拟器,也可应用于识别模拟器环境、反模拟器、反模糊测试等场景。
附图说明
[0029]图1是本专利技术的验证真实设备与CPU模拟器指令执行效果一致性的流程示意图;
[0030]图2是本专利技术的测试例生成器为指令编码中的各个符号生成有效值集合的示意图;
[0031]图3是本专利技术的差分测试引擎为指令流生成的测试程序示意图。
具体实施方式
[0032]下面根据附图和优选实施例详细描述本专利技术,本专利技术的目的和效果将变得更加明白,应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。
[0033]如图1所示,本专利技术用于验证CPU指令模拟执行一致性的方法,该方法包括生成用于测试指令执行效果一致性的指令流测试例和对真实设备和CPU模拟器进行差分测试两个步骤。
[0034]一、生成指令流测试例
[0035]其中,生成指令流测试例为根据指令规范手册对指令的二进制编码进行解析,识别指令的二进制编码中各个符号的具体类型,包括常量符号及代表寄存器、直接数等类型的变量符号,然后通过生成或采样等方式生成指令流测试例。具体如下:
[0036]1.根据各个符号的具体类型,如寄存器、立即数等,为每个类型的符号生成一系列初始值。如图2所示,作为其中一种实施方式,图2显示了AArch32指令集中VLD4指令的编码及根据指令规范手册得出的该指令中各个符号的类型。
[0037]2.根据指令规范手册获得各个符号的取值约束,并通过约束求解为各个符号获取尽可能多的有效值。
[0038]为了生成有代表性的指令流,生成的指令流测试例应该覆盖尽可能多的执行路径。根据指令规范手册,可以获取到一条指令中各个符号之间的约束关系。通过使用SMT求解器进行求解,测试例生成器为各个编码符号生成更多的有效值。
[0039]3.对指令各个符号的初始值集和约束求解得到的值集求并集,得到各个符号的有效值集合。
[0040]4.对各个符号的有效值集合进行笛卡尔乘积计算,并生成指令流测试例。
[0041]指令流测试例的生成除了通过上述的过程之外,还可以通过在真实的程序中采样出符合条件的指令流作为指令流测试例。例如,以对STR类型的指令流作测试为例,可以通过从实际软件的可执行文件中识别并提取出所有STR类型的指令流作为指令流测试例。
[0042]二、差分测试
[0043]初始化真实设备和CPU模拟器,保持两者初始状态一致,然后分别在真实设备和CPU模拟器中执行指令流测试例,得到两者的执行结果;通过比对两者的执行结果,判断指令流测试例在CPU模拟器中的运行结果是否与真实设备一致。具体如下:
[0044]1.为指令流测试例添加前置代码和后续代码,生成测试程序。
[0045]为了获得测试程序的前置代码和后续代码,首先为空指令编写一个测试程序,并生成可执本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种用于验证CPU指令模拟执行效果一致性的方法,其特征在于,该方法包括如下步骤:S1:生成用于测试指令执行效果一致性的指令流测试例;根据指令规范手册对指令的二进制编码进行解析,识别指令的二进制编码中各个符号的具体类型,通过生成或采样等方式生成指令流测试例;S2:对真实设备和CPU模拟器进行差分测试;初始化真实设备和CPU模拟器,保持两者初始状态一致,然后分别在真实设备和CPU模拟器中执行指令流测试例,得到两者的执行结果;通过比对两者的执行结果,判断指令流测试例在CPU模拟器中的运行结果是否与真实设备一致。2.根据权利要求1所述的用于验证CPU指令模拟执行效果一致性的方法,其特征在于,采用生成方式得到指令流测试例的方法具体如下:(1)按照各个符号的具体类型,为每个类型的符号生成一系列初始值;(2)根据指令规范手册获得各个符号的取值约束,并通过约束求解为各个符号获取尽可能多的有效值;(3)对指令各个符号的初始值集和约束求解得到的值集求并集,得到各个符号的有效值集合;(4)对各个符号的有效...

【专利技术属性】
技术研发人员:周亚金吴华茂姜木慧罗夏朴任奎
申请(专利权)人:浙江大学
类型:发明
国别省市:

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

1