CN117931540A - 预留指令处理方法、装置、电子设备和存储介质 - Google Patents

预留指令处理方法、装置、电子设备和存储介质 Download PDF

Info

Publication number
CN117931540A
CN117931540A CN202311752566.5A CN202311752566A CN117931540A CN 117931540 A CN117931540 A CN 117931540A CN 202311752566 A CN202311752566 A CN 202311752566A CN 117931540 A CN117931540 A CN 117931540A
Authority
CN
China
Prior art keywords
instruction
reserved
instructions
test
determining
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.)
Pending
Application number
CN202311752566.5A
Other languages
English (en)
Inventor
孟丹
朱子元
王光
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN202311752566.5A priority Critical patent/CN117931540A/zh
Publication of CN117931540A publication Critical patent/CN117931540A/zh
Pending legal-status Critical Current

Links

Abstract

本申请涉及计算机技术领域,提供一种预留指令处理方法、装置、电子设备和存储介质,该方法包括:随机生成x86处理器的多个测试指令;确定测试指令中的合法指令,并过滤合法指令,得到预留指令;若预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定预留指令为隐藏指令,并生成隐藏指令的分析报告。本申请基于条件随机生成x86预留指令,节约预留指令的处理时间,从而提高指令测试的效率。

Description

预留指令处理方法、装置、电子设备和存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种预留指令处理方法、装置、电子设备和存储介质。
背景技术
复杂指令集处理器(Complex Instruction Set Computer,CISC)通常也被称为x86处理器。在x86指令集中存在一些未使用的指令编码(即预留指令空间),这些未使用的编码可能是为了将来扩展指令集或其他目的而保留的。预留指令空间中有些指令可能具备某种功能,这种具备功能的指令被称之为隐藏指令。然而,隐藏指令的存在直接影响到了指令集的安全性,以Intel处理器为例,在处理器发展过程中存在的隐藏指令,例如,Pentium处理器中的0xF00F指令能够引起处理器宕机,对外拒绝服务,只有重启才能使计算机系统重新工作。因此,为了防御可能存在的攻击,需要对处理器指令集的预留指令空间进行全面的测试,及时的发现预留指令空间中可能具备功能的预留指令,并做出相应的防御措施。目前,对x86预留指令的处理存在以下问题:
预留指令空间的碎片化分布:预留指令空间在x86指令集中呈现出碎片化的分布,也即,预留指令空间在指令编码中分散并不连续。这给人工查找和整理带来了困难,需要耗费大量的时间和人力。
生成测试指令的时间成本高:在处理器开发过程中,如果通过生成测试指令来覆盖预留指令空间,直接分析x86指令结构并生成测试指令可能需要花费大量的时间和精力,因为x86指令集非常庞大和复杂。
基于此,如何处理x86预留指令,以提高对x86服务器的指令测试效率,成为亟需解决的问题。
发明内容
本申请提供一种预留指令处理方法、装置、电子设备和存储介质,用以解决x86预留指令的处理问题,通过基于条件随机生成x86预留指令,节约预留指令的处理时间,从而提高指令测试的效率。
本申请提供一种预留指令处理方法,包括:
随机生成x86处理器的多个测试指令;
确定所述测试指令中的合法指令,并过滤所述合法指令,得到预留指令;
若所述预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定所述预留指令为隐藏指令,并生成所述隐藏指令的分析报告。
在一个实施例中,所述确定所述测试指令中的合法指令,包括:
若所述测试指令与合法指令库中存储的指令匹配,则确定所述测试指令为合法指令;或者,
基于至少一种反汇编工具将所述测试指令转换为汇编码;
若各汇编码均与其对应的所述反汇编工具的指令集规范匹配,则确定所述测试指令为合法指令。
在一个实施例中,所述随机生成x86处理器的多个测试指令,包括:
采用至少一个初始值初始化随机数生成器,以基于所述随机数生成器,随机生成x86处理器的多个测试指令;或者,
基于真随机数发生器,随机生成x86处理器的多个测试指令。
在一个实施例中,对所述预留指令进行测试,包括:
将所述预留指令存储至设定的内存地址,并设置所述x86处理器处于单步执行模式;
在用户模式下运行测试流程,以对所述设定的内存地址中存储的所述预留指令进行测试。
在一个实施例中,所述若所述预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定所述预留指令为隐藏指令,并生成所述隐藏指令的分析报告之后,还包括:
基于所述隐藏指令的操作码,对所述分析报告中的所述隐藏指令进行分组,以将所述操作码相同的隐藏指令分为一组;
执行每组隐藏指令,以对每组隐藏指令进行功能分析,得到每组隐藏指令的指令功能。
在一个实施例中,所述确定所述测试指令中的合法指令,并过滤所述合法指令,得到预留指令之后,还包括:
确定预留指令空间的预留操作码空间覆盖率和预留功能码空间覆盖率;
基于所述预留操作码空间覆盖率和所述预留功能码空间覆盖率,确定指令测试的测试完成度;
若所述测试完成度达到设定阈值,则结束所述指令测试。
在一个实施例中,所述确定预留指令空间的预留操作码空间覆盖率和预留功能码空间覆盖率,包括:
确定所述预留指令的操作码与所述预留指令空间的第一匹配结果;
若所述第一匹配结果为所述预留指令的操作码与所述预留指令空间匹配,则操作码计数器加一;
若所述第一匹配结果为所述预留指令的操作码与预留指令空间不匹配,则确定所述预留指令的功能码与所述预留指令空间的第二匹配结果;
若所述第二匹配结果为所述预留指令的功能码与所述预留指令空间匹配,则功能码计数器加一;
基于所述操作码计数器的计数值,确定所述预留操作码空间覆盖率;
基于所述功能码计数器的计数值,确定所述预留功能码空间覆盖率。
本申请提供一种预留指令处理装置,包括:
指令生成模块,用于随机生成x86处理器的多个测试指令;
预留指令确定模块,用于确定所述测试指令中的合法指令,并过滤所述合法指令,得到预留指令;
指令测试模块,用于若所述预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定所述预留指令为隐藏指令,并生成所述隐藏指令的分析报告。
本申请还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述预留指令处理方法。
本申请还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述预留指令处理方法。
本申请提供的预留指令处理方法、装置、电子设备和存储介质,通过随机生成x86处理器的多个测试指令;确定测试指令中的合法指令,并过滤合法指令,得到预留指令;若预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定预留指令为隐藏指令,并生成隐藏指令的分析报告。本申请基于条件随机生成x86预留指令,节约预留指令的处理时间,从而提高指令测试的效率。
附图说明
为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请提供的预留指令处理方法的流程示意图;
图2是本申请提供的生成测试指令的流程示意图;
图3是本申请提供的基于合法指令库确定预留指令的流程示意图;
图4是本申请提供的基于反汇编工具确定预留指令的流程示意图;
图5是本申请提供的覆盖率分析的流程示意图;
图6是本申请提供的随机指令生成的处理器隐藏指令测试结构图;
图7是本申请提供的指令注入分析的流程示意图;
图8是本申请提供的指令异常处理的流程示意图;
图9是本申请提供的指令分析的流程示意图;
图10是本申请提供的预留指令处理装置的结构示意图;
图11是本申请提供的电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
下面结合图1-图11描述本申请的预留指令处理方法、装置、电子设备和存储介质。
具体地,本申请提供了一种预留指令处理方法,参照图1,图1是本申请提供的预留指令处理方法的流程示意图。
本申请实施例提供的预留指令处理方法,包括:
步骤100,随机生成x86处理器的多个测试指令;
本申请实施例可以采用两种方案随机生成x86处理器的多个测试指令。其中,第一种方案是基于伪随机数生成的软件级别实现,适合一般的测试目的;而第二种方案是基于硬件的真随机数生成,适合对安全性要求较高的应用场景。
如图2所示,第一种方案:采用至少一个初始值初始化随机数生成器,以基于随机数生成器,随机生成x86处理器的多个测试指令。例如,使用C语言库中的rand()函数来生成伪随机数。伪随机数是通过确定性算法生成的,如果种子不变,每次生成的随机数序列都是固定的。为了解决这个问题,可以通过设置不同的种子来实现不同的随机数序列。例如,使用time()函数返回的当前时间作为种子,然后使用srand()函数对随机数生成器进行初始化,如此可以确保每次运行时都会产生不同的随机数序列,即测试指令。上述方案中,使用时间戳作为种子值,由于每个时间戳都是唯一的,因此每次运行程序时种子值都会不同,从而生成不同的随机数序列。可选地,也可以使用其他随机的或者变化的值作为种子,如系统时间、进程ID、用户输入等。
可以理解的是,在随机数生成中,种子是一个起始值或初始状态,用于确定伪随机数生成的序列。设置不同的种子是指在伪随机数生成过程中,使用不同的初始值来初始化随机数生成器,从而产生不同的随机数序列,增加随机性和多样性。
第二种方案:基于真随机数发生器,随机生成x86处理器的多个测试指令。例如,利用处理器具备的真随机数发生器的硬件模块来生成随机数。如果处理器提供了硬件级别的随机数生成功能,如Intel的Rdrand和Rdseed指令,这些指令能够提供接近真随机的随机数,因为其基于处理器内部的物理随机性来源(例如热噪声),而不是基于确定性算法。
步骤200,确定所述测试指令中的合法指令,并过滤所述合法指令,得到预留指令;
在随机生成测试指令后,通过指令库查找或者反汇编器识别,确定测试指令中的合法指令,并过滤所述合法指令,得到预留指令。其中,预留指令是指在指令集架构中保留的、暂时未被使用的指令,这些指令可能是为了未来的扩展或者为了保留特定的空间而存在的。
在一个实施例中,由于随机生成的测试指令可以同时覆盖合法指令空间和预留指令空间,同时也会造成重复生成一些合法指令或者预留指令,这会延长测试的收敛时间,降低测试效率。因此,需要在产生随机指令的同时加入一些约束,引入指令格式分析,使测试指令尽量不重复,特别是要跳过合法指令中存在的冗余的立即数和偏移量操作数,从而更有效、更有针对性的完成测试预留指令空间的任务。
步骤300,若所述预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定所述预留指令为隐藏指令,并生成所述隐藏指令的分析报告。
需要说明的是,在x86处理器中预留一些未来可能需要的指令空间,其目的是为了满足未来的处理需求,提高指令的执行效率。在预留指令空间中,有些指令可能已经被定义和实现,但由于某些原因(如软件兼容性、硬件设计等),暂时无法启用或正式发布,这些具备功能但尚未公开的指令被称为隐藏指令。
在确定预留指令后,需要对预留指令进行测试,具体地,将预留指令存储至设定的内存地址,并设置x86处理器处于单步执行模式;然后,在用户模式下运行测试流程,以对设定的内存地址中存储的预留指令进行测试。例如,在进行指令注入测试时,为了确保测试的可控性和可观测性,需要将系统中的各个组件设置为已知的初始状态,如将所有通用寄存器、待使用内存和I/O接口设置为已知的初始状态,以确保在测试开始时,处理器的各个组件处于已知的状态。其中,已知的初始状态是指在进行测试之前,了解和记录系统中各个组件的当前状态,包括处理器的寄存器内容、内存中的数据、I/O接口的状态等。基于此,通过了解和记录系统的初始状态,可以更好地控制测试过程中的变化,并且能够准确观察到测试执行过程中系统的响应和变化。
然后,将预留指令放置在设定的内存地址,该预留指令是要测试的目标代码,如此,处理器会从该地址处开始执行这些预留指令。为了使测试过程具有可控性和可观测性,还需要设置处理器的标志位寄存器为预知的状态,该标志位可以影响处理器的行为,例如条件分支的结果或算术运算的溢出标志等。通过设置标志位为特定的值,可以精确地控制指令执行的路径和结果。
最后,将处理器设置为单步执行模式,并在用户模式下运行测试程序。其中,单步执行模式是一种执行模式,允许逐条执行指令,并在每个指令执行后停下来,以便观察处理器的状态和结果。通过将处理器置于单步执行模式,可以对测试过程进行细粒度的调试和观察,以便更好地理解系统的行为和调试潜在问题。用户模式是一种操作系统执行模式,在该模式下,进程只能访问自己的内存空间和有限的系统资源,对于系统的核心功能和敏感资源具有较弱的权限。在进行指令注入测试时,选择在用户模式下运行测试程序可以提供更好的隔离性和安全性,减少对系统的直接影响,并降低测试过程中出现的意外情况。
如果预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定预留指令为隐藏指令,并生成隐藏指令的分析报告。例如,在进行异常处理时,如果预留指令执行导致处理器报SIGILL(非法指令)异常,则说明该预留指令没有隐藏功能,直接返回随机指令生成模块,进行下一条指令的测试周期。如果预留指令执行导致处理器没有报SIGILL(非法指令)异常,例如,报SIGSEGV(段错误)、SIGTRAP(单步执行)、SIGBUS(总线错误)、SIGFPE(缺页)异常,或者没有报异常,且反汇编工具不能识别此条预留指令,则说明该预留指令是一个隐藏指令,需要将其输出到报告文件中。
可选地,异常处理还需要屏蔽会使测试程序发生异常退出的指令,将这些指令列入黑名单列表中。通过屏蔽这些指令,可以保证处理器指令测试的连续性,避免测试程序因为异常退出而中断。
本申请实施例提供的预留指令处理方法,通过随机生成x86处理器的多个测试指令;确定测试指令中的合法指令,并过滤合法指令,得到预留指令;若预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定预留指令为隐藏指令,并生成隐藏指令的分析报告。本申请实施例基于条件随机生成x86预留指令,节约预留指令的处理时间,从而提高指令测试的效率。
基于上述实施例,所述确定所述测试指令中的合法指令,包括:
步骤211,若所述测试指令与合法指令库中存储的指令匹配,则确定所述测试指令为合法指令;或者,
步骤212,基于至少一种反汇编工具将所述测试指令转换为汇编码;
步骤213,若各汇编码均与其对应的所述反汇编工具的指令集规范匹配,则确定所述测试指令为合法指令。
本申请实施例可以采用两种方案确定测试指令中的合法指令,第一种方案是通过指令库查找;第二中方案是通过反汇编器识别。
如图3所示,对于第一种方案:利用处理器厂商提供的合法指令库,通过比对生成的测试指令与合法指令库中的内容来判断测试指令是否为预留指令。其中,合法指令库包含了处理器所支持的全部指令及其规范。如果测试指令在合法指令库中存在,则确定该测试指令为合法指令;否则,确定该测试指令为预留指令。
如图4所示,对于第二种方案:基于至少一种反汇编工具将测试指令转换为汇编码,然后若各汇编码均与其对应的反汇编工具的指令集规范匹配,则确定测试指令为合法指令。例如,使用至少一个反汇编工具将生成的测试指令转换为汇编代码,即汇编码。其中,反汇编工具会将二进制指令转换为可读的汇编语言表示形式。然后,参考处理器的官方文档或指令集手册,查找标准的指令集规范,该文档会提供关于指令操作码、功能和语法的详细说明。进一步,将生成的汇编代码与指令集规范进行匹配,例如,判断汇编代码对应的指令的操作码、操作数、指令功能和语义等信息,是否与指令集规范中描述的指令相匹配。如果生成的汇编代码与指令集规范中的指令一致,则可以判断该测试指令是合法的;如果无法在指令集规范中找到匹配的指令,或者该测试指令是特定处理器未定义的指令,则为预留指令。可选地,如果需要更加精准地测试预留指令空间,可以结合多种反汇编工具共同使用,将不同反汇编工具的结果取“或”处理,以提高测试的准确性和覆盖率,发现更多的问题和潜在错误。例如,如果反汇编工具有多个,基于每个反汇编工具均确定测试指令与其对应的指令集规范匹配,则确定该测试指令为合法指令。
可选地,反汇编工具可以采用开源的反汇编工具,如Capstone,或者采用线性扫描算法的Objdump、WinDbg、SoftICE,采用递归遍历算法的W32dsm、IDApro。
本申请实施例通过指令库查找或反汇编器识别,可以快速确定测试指令中的合法指令,以过滤该合法指令,只针对预留指令进行测试,从而节约指令测试的时间,提高指令测试的效率。
基于上述实施例,所述若所述预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定所述预留指令为隐藏指令,并生成所述隐藏指令的分析报告之后,还包括:
步骤311,基于所述隐藏指令的操作码,对所述分析报告中的所述隐藏指令进行分组,以将所述操作码相同的隐藏指令分为一组;
步骤312,执行每组隐藏指令,以对每组隐藏指令进行功能分析,得到每组隐藏指令的指令功能。
在指令分析过程中,根据隐藏指令的操作码对隐藏指令进行分类,以将操作码相同的隐藏指令分为一组。其中,不同的操作码代表不同的操作类型,例如加载数据、存储数据、算术运算等。通过对隐藏指令进行分类,可以更好地理解隐藏指令的功能和用途。
按照操作码分类后,执行每组隐藏指令,以对每组隐藏指令进行功能分析,得到每组隐藏指令的指令功能。例如,对属于同一指令组的隐藏指令进行功能测试,并执行这些隐藏指令。在执行过程中,记录隐藏指令对寄存器、内存和I/O等方面的变化情况,其中,这些记录可以帮助分析指令的功能和对处理器环境的影响。通过分析记录的指令执行情况和对处理器环境的影响,可以得出每个隐藏指令的功能,图指令的操作类型、对寄存器、内存和I/O的读写操作等信息。
本申请实施例通过对隐藏指令进行分类、重新执行以及功能分析,可以更好地理解每个隐藏指令的功能和行为,并验证其正确性和可靠性,有助于确保隐藏指令在计算系统中的正确使用和预期行为。
基于上述实施例,所述确定所述测试指令中的合法指令,并过滤所述合法指令,得到预留指令之后,还包括:
步骤221,确定预留指令空间的预留操作码空间覆盖率和预留功能码空间覆盖率;
步骤222,基于所述预留操作码空间覆盖率和所述预留功能码空间覆盖率,确定指令测试的测试完成度;
步骤223,若所述测试完成度达到设定阈值,则结束所述指令测试。
覆盖率分析是一种衡量测试的完成度和有效性的方法,用于评估测试过程中已经覆盖到的代码、功能或者其他目标的比例。本申请实施例主要通过分析预留操作码空间覆盖率和预留功能码空间覆盖率,确定指令测试的完成度。
如图5所示,对预留指令进行指令格式分析,确定预留指令的操作码与预留指令空间的第一匹配结果;若第一匹配结果为预留指令的操作码与预留指令空间匹配,则标记库中相应的操作码,同时操作码计数器加一;若第一匹配结果为预留指令的操作码与预留指令空间不匹配,则对预留指令进行功能码分析,即确定预留指令的功能码与预留指令空间的第二匹配结果;若第二匹配结果为预留指令的功能码与预留指令空间匹配,则标记库中相应的功能码,同时功能码计数器加一;基于操作码计数器的计数值,确定预留操作码空间覆盖率;基于功能码计数器的计数值,确定预留功能码空间覆盖率。然后,基于预留操作码空间覆盖率和预留功能码空间覆盖率,确定指令测试的测试完成度,如果测试完成度达到设定阈值,则结束指令测试。
例如,在指令分析过程中,如果预留指令的操作码与预留指令空间匹配,则操作码计数器加1,并且相应的操作码将被标记在库中。这意味着,如果生成的预留指令的操作码属于预留指令空间,则将被计入覆盖率分析的结果中。其次,如果预留指令的操作码不属于预留指令空间,则检查预留指令的其他功能位是否属于预留指令空间。如果存在功能码与预留指令空间匹配,则功能码计数器加1,且计入覆盖率分析的结果中。
本申请实施例指针对生成的预留指令,通过对比预留指令空间中的操作码和功能码,来确定生成的预留指令中有多少属于预留指令空间的指令,基于此,可以评估测试用例对预留指令的覆盖程度,从而确定测试的完整性和有效性。
为了进一步对本申请提出的预留指令处理方法进行解析说明,参考以下实施例。
本申请实施例具体提出一种基于条件随机的x86预留指令生成方法,通过随机指令生成的方法来测试x86处理器中的预留指令空间,其中,随机指令生成的方法不需要过多“专家时间”来分析x86处理器的指令格式。如图6所示,本申请实施例使用随机的方法生成15个字节长度的x86指令,使用指令过滤模块筛除合法指令(指令集手册中定义的指令),将筛选出的预留指令(指令集中未定义的指令)进行测试。在测试指令功能之前,由于单条指令的执行不考虑指令上下文的影响,因此,将寄存器、内存、I/O等设置为已知的初始状态。然后,指令注入模块将预留指令放入内存的预定位置,并引导处理器执行,如果预留指令能够执行且不报非法指令异常,则将预留指令进行输出,写入日志文件。最后,针对日志文件中的指令进行进一步的指令分组和分析,确定指令的功能。覆盖率分析模块会分析指令空间的覆盖率,当覆盖率满足设定的阈值时,测试结束。基于上述方案,基于随机的自动化处理器隐藏指令的测试方法,可以解决手动编写测试用例需要花费大量时间的问题,同时增加覆盖率分析模块,能够解决对预留空间测试不够完整的问题。
根据图6所示的随机指令生成的处理器隐藏指令测试结构图,各模块的功能如下:
指令生成模块:测试的目标是指令长度为15字节的x86处理器。因此,根据所需要的指令长度来随机生成十六进制的数据。指令生成程序的随机数生成有两种方案,第一种方案:使用C语言库中的rand()函数实现,但是所生成的随机数为伪随机数。如果种子固定不变,每次测试生成的随机数序列是固定的,导致生成的指令序列每次测试都一样。因此,测试前通过设置不同的种子来实现不同的随机数序列,例如使用time()函数的值作为随机数生成的种子,利用srand()函数进行初始化。第二种方案:如果处理器具备真随机数发生器的硬件模块,且支持Rdrand和Rdseed指令,使用随机数生成指令进行随机数的生成。
指令过滤模块:指令过滤通过指令库查找的方法或者利用反汇编器识别和筛选出预留指令。如果有现成的指令库(即合法指令库),例如,处理器厂商提供指令库,可通过指令库查找比对的方法判断指令是否是预留指令。对于不能从厂家得到相关指令库的处理器,可以借助反汇编器,因为反汇编器也是遵循x86指令手册而设计的,理想的反汇编器支持所有的x86指令集规范。所以,使用反汇编器来判断所生成的指令是否为预留指令具有更好的便捷性和可扩展性。
指令注入模块:如图7所示,将所有的通用寄存器、待使用内存和I/O接口预置到已知的初始状态,将内存预置一个特定的内存地址位置,然后将要测试的预留指令放入设置的内存地址处。设置处理器的标志位寄存器为预知状态,使处理器处于单步执行模式,然后在用户模式下运行测试程序。
异常处理模块:如图8所示,处理器从预置的内存地址取出生成的预留指令,然后执行,指令执行的过程中触发异常信号时,需要及时的对异常进行处理。异常处理模块需要保证处理器发生异常时,将处理器置于已知的初始状态,保证测试程序不中断运行。如果指令执行导致处理器报SIGILL(非法指令)异常,则指令没有隐藏功能,返回随机指令生成模块,接着进行下一条指令的测试周期。如果指令执行导致处理器没有报SIGILL(非法指令)异常,例如报SIGSEGV(段错误)、SIGTRAP(单步执行)、SIGBUS(总线错误)SIGFPE(缺页)异常,或者没有报异常,且反汇编器不能识别此条预留指令,则指令为隐藏指令,将指令输出到报告文件。
指令输出模块:将发现的隐藏指令写入到报告文件。
指令分析模块:如图9所示,将报告文件中记录的指令,进行重新执行检查,并根据指令的操作码对隐藏指令进行分类。对同一指令类别的隐藏指令进行单独的测试,从而确定隐藏指令的功能。
覆盖率分析模块:采用预留操作码空间覆盖率和预留功能码覆盖率来衡量测试的完成度,当完成度达到一定的指标后,对测试进行收敛,结束测试。随机测试如果没有收敛方法将会一直测试下去,将预留操作码和预留功能码空间作为参考指标,当指令测试充分覆盖所有预留操作码和功能码时,结束测试。
上述方案不需要对复杂的x86指令格式进行详细的分析,适用于对复杂指令集处理器平台,在对x86处理器测试的初期使用此方案,能够快速的展开测试。
本申请实施例采用随机指令生成的方法对x86处理器的预留指令空间进行搜索,不需要深入的研究复杂的x86的指令格式,在测试初期能节省大量的时间。使用反汇编器或者指令库对随机方法生成的指令进行分析,目的是筛选出预留指令。然后,将预留指令在需要测试的x86处理器上执行并观察其结果,如果预留指令可被所测试的处理器正常执行且不报非法指令异常,则此条预留指令为隐藏指令,并将指令记录在测试日志文件中。
通过随机指令生成的方法来测试x86处理器中的预留指令空间,其目的在于快速生成测试指令,并通过反汇编器及时的筛选出需要测试的预留指令,同时通过反汇编器识别x86指令的格式,跳过对冗余的合法指令的生成,提高随机测试的效率,并且整个测试的过程不需要人的干预,实现自动化的测试。
图10是本申请提供的预留指令处理装置的结构示意图,参照图10,本申请的实施例提供了一种预留指令处理装置,包括指令生成模块1001、预留指令确定模块1002和指令测试模块1003。
指令生成模块1001,用于随机生成x86处理器的多个测试指令;
预留指令确定模块1002,用于确定所述测试指令中的合法指令,并过滤所述合法指令,得到预留指令;
指令测试模块1003,用于若所述预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定所述预留指令为隐藏指令,并生成所述隐藏指令的分析报告。
本申请实施例提供的预留指令处理装置,通过随机生成x86处理器的多个测试指令;确定测试指令中的合法指令,并过滤合法指令,得到预留指令;若预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定预留指令为隐藏指令,并生成隐藏指令的分析报告。本申请实施例基于条件随机生成x86预留指令,节约预留指令的处理时间,从而提高指令测试的效率。
在一个实施例中,预留指令确定模块1002,用于:
若所述测试指令与合法指令库中存储的指令匹配,则确定所述测试指令为合法指令;或者,
基于至少一种反汇编工具将所述测试指令转换为汇编码;
若各汇编码均与其对应的所述反汇编工具的指令集规范匹配,则确定所述测试指令为合法指令。
在一个实施例中,指令生成模块1001,用于:
采用至少一个初始值初始化随机数生成器,以基于所述随机数生成器,随机生成x86处理器的多个测试指令;或者,
基于真随机数发生器,随机生成x86处理器的多个测试指令。
在一个实施例中,指令测试模块1003,用于:
将所述预留指令存储至设定的内存地址,并设置所述x86处理器处于单步执行模式;
在用户模式下运行测试流程,以对所述设定的内存地址中存储的所述预留指令进行测试。
在一个实施例中,指令测试模块1003,还用于:
基于所述隐藏指令的操作码,对所述分析报告中的所述隐藏指令进行分组,以将所述操作码相同的隐藏指令分为一组;
执行每组隐藏指令,以对每组隐藏指令进行功能分析,得到每组隐藏指令的指令功能。
在一个实施例中,预留指令确定模块1002,还用于:
确定预留指令空间的预留操作码空间覆盖率和预留功能码空间覆盖率;
基于所述预留操作码空间覆盖率和所述预留功能码空间覆盖率,确定指令测试的测试完成度;
若所述测试完成度达到设定阈值,则结束所述指令测试。
在一个实施例中,预留指令确定模块1002,还用于:
确定所述预留指令的操作码与所述预留指令空间的第一匹配结果;
若所述第一匹配结果为所述预留指令的操作码与所述预留指令空间匹配,则操作码计数器加一;
若所述第一匹配结果为所述预留指令的操作码与预留指令空间不匹配,则确定所述预留指令的功能码与所述预留指令空间的第二匹配结果;
若所述第二匹配结果为所述预留指令的功能码与所述预留指令空间匹配,则功能码计数器加一;
基于所述操作码计数器的计数值,确定所述预留操作码空间覆盖率;
基于所述功能码计数器的计数值,确定所述预留功能码空间覆盖率。
图11示例了一种电子设备的实体结构示意图,如图11所示,该电子设备可以包括:处理器(Processor)1110、通信接口(Communications Interface)1120、存储器(Memory)1130和通信总线1140,其中,处理器1110,通信接口1120,存储器1130通过通信总线1140完成相互间的通信。处理器1110可以调用存储器1130中的逻辑指令,以执行预留指令处理方法,该方法包括:
随机生成x86处理器的多个测试指令;
确定所述测试指令中的合法指令,并过滤所述合法指令,得到预留指令;
若所述预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定所述预留指令为隐藏指令,并生成所述隐藏指令的分析报告。
此外,上述的存储器1130中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本申请还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的预留指令处理方法,该方法包括:
随机生成x86处理器的多个测试指令;
确定所述测试指令中的合法指令,并过滤所述合法指令,得到预留指令;
若所述预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定所述预留指令为隐藏指令,并生成所述隐藏指令的分析报告。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (10)

1.一种预留指令处理方法,其特征在于,包括:
随机生成x86处理器的多个测试指令;
确定所述测试指令中的合法指令,并过滤所述合法指令,得到预留指令;
若所述预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定所述预留指令为隐藏指令,并生成所述隐藏指令的分析报告。
2.根据权利要求1所述的预留指令处理方法,其特征在于,所述确定所述测试指令中的合法指令,包括:
若所述测试指令与合法指令库中存储的指令匹配,则确定所述测试指令为合法指令;或者,
基于至少一种反汇编工具将所述测试指令转换为汇编码;
若各汇编码均与其对应的所述反汇编工具的指令集规范匹配,则确定所述测试指令为合法指令。
3.根据权利要求1所述的预留指令处理方法,其特征在于,所述随机生成x86处理器的多个测试指令,包括:
采用至少一个初始值初始化随机数生成器,以基于所述随机数生成器,随机生成x86处理器的多个测试指令;或者,
基于真随机数发生器,随机生成x86处理器的多个测试指令。
4.根据权利要求1所述的预留指令处理方法,其特征在于,对所述预留指令进行测试,包括:
将所述预留指令存储至设定的内存地址,并设置所述x86处理器处于单步执行模式;
在用户模式下运行测试流程,以对所述设定的内存地址中存储的所述预留指令进行测试。
5.根据权利要求1所述的预留指令处理方法,其特征在于,所述若所述预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定所述预留指令为隐藏指令,并生成所述隐藏指令的分析报告之后,还包括:
基于所述隐藏指令的操作码,对所述分析报告中的所述隐藏指令进行分组,以将所述操作码相同的隐藏指令分为一组;
执行每组隐藏指令,以对每组隐藏指令进行功能分析,得到每组隐藏指令的指令功能。
6.根据权利要求1所述的预留指令处理方法,其特征在于,所述确定所述测试指令中的合法指令,并过滤所述合法指令,得到预留指令之后,还包括:
确定预留指令空间的预留操作码空间覆盖率和预留功能码空间覆盖率;
基于所述预留操作码空间覆盖率和所述预留功能码空间覆盖率,确定指令测试的测试完成度;
若所述测试完成度达到设定阈值,则结束所述指令测试。
7.根据权利要求6所述的预留指令处理方法,其特征在于,所述确定预留指令空间的预留操作码空间覆盖率和预留功能码空间覆盖率,包括:
确定所述预留指令的操作码与所述预留指令空间的第一匹配结果;
若所述第一匹配结果为所述预留指令的操作码与所述预留指令空间匹配,则操作码计数器加一;
若所述第一匹配结果为所述预留指令的操作码与预留指令空间不匹配,则确定所述预留指令的功能码与所述预留指令空间的第二匹配结果;
若所述第二匹配结果为所述预留指令的功能码与所述预留指令空间匹配,则功能码计数器加一;
基于所述操作码计数器的计数值,确定所述预留操作码空间覆盖率;
基于所述功能码计数器的计数值,确定所述预留功能码空间覆盖率。
8.一种预留指令处理装置,其特征在于,包括:
指令生成模块,用于随机生成x86处理器的多个测试指令;
预留指令确定模块,用于确定所述测试指令中的合法指令,并过滤所述合法指令,得到预留指令;
指令测试模块,用于若所述预留指令的测试结果为执行成功且未触发非法指令异常的信号,则确定所述预留指令为隐藏指令,并生成所述隐藏指令的分析报告。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7中任一项所述预留指令处理方法。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述预留指令处理方法。
CN202311752566.5A 2023-12-19 2023-12-19 预留指令处理方法、装置、电子设备和存储介质 Pending CN117931540A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311752566.5A CN117931540A (zh) 2023-12-19 2023-12-19 预留指令处理方法、装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311752566.5A CN117931540A (zh) 2023-12-19 2023-12-19 预留指令处理方法、装置、电子设备和存储介质

Publications (1)

Publication Number Publication Date
CN117931540A true CN117931540A (zh) 2024-04-26

Family

ID=90756379

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311752566.5A Pending CN117931540A (zh) 2023-12-19 2023-12-19 预留指令处理方法、装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN117931540A (zh)

Similar Documents

Publication Publication Date Title
US8386851B2 (en) Functional coverage using combinatorial test design
US10296447B2 (en) Automated software program repair
US6430741B1 (en) System and method for data coverage analysis of a computer program
Wang et al. Automated path generation for software fault localization
CN113497809B (zh) 基于控制流和数据流分析的mips架构漏洞挖掘方法
US20110055777A1 (en) Verification of Soft Error Resilience
Li et al. A novel approach for software vulnerability classification
US10936474B2 (en) Software test program generation
EP3264274B1 (en) Input discovery for unknown program binaries
CN112925524A (zh) 一种检测驱动程序中不安全直接存储器访问的方法及装置
CN110287700B (zh) 一种iOS应用安全分析方法及装置
US11237943B2 (en) Generating inputs for computer-program testing
CN114741700B (zh) 基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置
CN116522345A (zh) 漏洞挖掘方法、装置、设备及可读存储介质
CN117931540A (zh) 预留指令处理方法、装置、电子设备和存储介质
CN115657981A (zh) 验证环境中的打印信息的打印等级的设置方法及验证方法
CN116166535A (zh) 一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法
CN115168131A (zh) 一种故障注入的cpu异常功能验证方法
CN114660437A (zh) 一种波形文件生成方法及装置
CN110096888B (zh) 一种加快验证及分析smm安全隐患的方法及系统
US7689399B1 (en) Automatic extraction of design properties
WO2020136880A1 (ja) テスト実行装置、テスト実行方法及びテスト実行プログラム
CN116414722B (zh) 模糊测试处理方法、装置、模糊测试系统及存储介质
CN111310172B (zh) 通过反汇编验证处理器执行轨迹的方法及控制部件
CN111274133B (zh) 一种静态扫描方法、装置及计算机可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication