指令重组方法及装置制造方法

文档序号:6488600阅读:182来源:国知局
指令重组方法及装置制造方法
【专利摘要】本发明提供一种运行时指令重组方法,包括:步骤1、缓存指令运行环境;步骤2、获取栈中保存的跳转指令的地址和参数,计算下一条即将运行的指令地址,该地址为第一地址;步骤3、根据第一地址获取待调度机器指令片段;其中,待调度机器指令片段的最后一条指令为第一跳转指令;步骤4、替换第一跳转指令为压栈指令,在压栈指令中记录第一跳转指令的地址和操作数;步骤5、在压栈指令之后加入第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向指令重组平台的入口地址;和步骤6、恢复所述指令运行环境,并跳转到第二地址继续执行。
【专利说明】指令重组方法及装置
【技术领域】
[0001]本发明涉及计算机安全领域,尤其涉及一种指令重组方法及装置。
【背景技术】
[0002]现有的电子信息安全领域包括系统安全、数据安全和设备安全三个子领域。
[0003]在数据安全领域内,一般采用下面三种技术确保数据安全:(I)数据内容安全技术,包括数据加密解密技术和端到端数据加密技术,保障数据在存储和传输过程中内容不被非法读取;(2)数据安全转移技术,包括防止非法拷贝、打印或其它输出,保障数据在使用和转移过程中的安全;(3)网络阻断技术,包括网络物理阻断和设置网络屏障等技术。
[0004]根据相关分析,目前针对计算机的所有危害总有效侦测能力最多在50%左右;由于上述技术在应对计算机内核病毒、木马、操作系统漏洞、系统后门以及人为泄密时能力不足,事实上任何计算设备(例如计算机、手持通信设备等)都可能存在恶意代码。一旦恶意代码进入终端系统,上述的加密技术、防拷贝技术以及网络阻断技术在这种情况下将失去作用。现有的黑客技术可以利用系统漏洞或系统后门穿透上述安全技术并植入恶意代码,并利用恶意代码取得用户数据。上述技术更无法防范涉密人员的主动或被动泄密,例如,内部人员可以携带存储设备,从内部网络或终端上下载所需的资料并带走存储设备,导致内部泄密;又例如,内部人员可以直接将计算设备带走。
[0005]综上,防拷贝技术无法保证涉密信息在终端不被非法存储。基于网络过滤无法确保涉密信息不丢失。涉密人员可通过恶意代码或恶意工具造成泄密,还可能因涉密设备或存储介质失控造成泄密。

【发明内容】

[0006]本发明提供一种指令重组方法及装置,实现运行时指令的捕获和重组。
[0007]根据本发明一个方面,提供一种运行时指令重组方法,包括:
[0008]步骤1、缓存指令运行环境;
[0009]步骤2、获取栈中保存的跳转指令的地址和参数,计算下一条即将运行的指令地址,该地址为第一地址;
[0010]步骤3、根据第一地址获取待调度机器指令片段;其中,待调度机器指令片段的最后一条指令为第一跳转指令;
[0011]步骤4、替换第一跳转指令为压栈指令,在压栈指令中记录第一跳转指令的地址和操作数;
[0012]步骤5、在压栈指令之后加入第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向指令重组平台的入口地址;和
[0013]步骤6、恢复所述指令运行环境,并跳转到第二地址继续执行。
[0014]可选的,步骤3中,根据第一地址获取待调度机器指令片段包括:
[0015]从第一地址开始,获取待调度的一段机器指令,将该段机器指令进行反汇编;[0016]检查反汇编结果中是否包含跳转指令,如果不包含则继续获取后面一段待调度的机器指令,直到匹配到跳转指令为止,该跳转指令为第一跳转指令;其中,第一跳转指令以及之前的所有指令组成待调度指令片段。
[0017]可选的,在步骤5和步骤6之间,还包括:
[0018]将生成的重组后的汇编代码通过汇编器生成对应的机器码。
[0019]可选的,在步骤2和步骤3之间,还包括:
[0020]利用所述第一地址查找地址对应表;所述地址对应表用于表示待调度的机器指令片段是否具有已保存的重组指令片段;
[0021]如果找到相应的记录,恢复所述指令运行环境,并跳转到纪录中的保存地址继续执行。
[0022]可选的,如果在地址对应表中没有找到相应的纪录,在步骤5之后,还包括:
[0023]利用重组指令片段的地址与所述第一地址在地址对应表中建立一条记录。
[0024]可选的,在步骤3之后、步骤5之前,还包括:
[0025]解析所述待调度机器指令片段,利用指令集匹配所述机器指令片段,得到待处理的目标机器指令;
[0026]按照预定的方式,修改所述目标机器指令。
[0027]可选的,所述目标指令为存储/读取指令;
[0028]按照预定的方式,修改所述目标机器指令包括:修改其中的存储和读取地址为安全存储设备上的地址。
[0029]可选的,所述目标指令为I/O指令;
[0030]按照预定的方式,修改所述目标机器指令包括:将所述I/O指令中的输入指令全部阻止。
[0031]可选的,所述目标指令为网络传输指令;
[0032]按照预定的方式,修改所述目标机器指令包括:检验所述网络传输指令中的目标地址对应的远端计算设备是否为安全地址(即允许访问地址);如果不是,阻止所述网络传输指令。
[0033]根据本发明另一个方面,提供一种计算机可读介质,所述可读介质中存储有计算机可执行的程序代码,所述程序代码用于执行上述方法的步骤。
[0034]根据本发明又一个方面,提供一种运行时指令重组装置,包括:
[0035]指令运行环境缓存和恢复单元,适于缓存和恢复指令运行环境;
[0036]指令获取单元,与指令运行环境缓存和恢复单元耦接,适于获取栈中保存的跳转指令的地址和参数,计算下一条即将运行的指令地址,该地址为第一地址;还适于根据第一地址获取待调度/执行的机器指令片段;其中,待调度机器指令片段的最后一条指令为第一跳转指令;和
[0037]指令重组单元,与指令运行环境缓存和恢复单元耦接,适于替换第一跳转指令为压栈指令,在压栈指令中记录第一跳转指令的地址和操作数;还适于在压栈指令之后加入第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向运行时指令重组装置的入口地址。
[0038]可选的,所述的运行时指令重组装置还包括:[0039]指令检索单元,适于利用所述第一地址查找地址对应表;所述地址对应表用于表示待调度机器指令片段是否具有已保存的重组指令片段;
[0040]如果找到相应的记录,指令检索单元还适于调用指令运行环境缓存和恢复单元,恢复所述指令运行环境,并跳转到纪录中的保存地址继续执行;
[0041]如果没有找到相应的记录,指令检索单元还适于利用重组指令片段的地址与所述第一地址在地址对应表中建立一条记录。
[0042]可选的,所述指令重组单元还包括:
[0043]指令解析单元,适于利用指令集匹配所述待调度的机器指令片段,得到待处理的目标机器指令;
[0044]指令修改单元,适于按照预定的方式,修改所述目标机器指令。
[0045]可选的,所述目标指令为存储/读取指令;
[0046]所述指令修改单元适于修改其中的存储和读取地址为安全存储设备上的地址。
[0047]可选的,所述目标指令为I/O指令;
[0048]所述指令修改单元适于将所述I/O指令中的输入指令全部阻止。
[0049]可选的,所述目标指令为网络传输指令;
[0050]所述指令修改单元适于检验所述网络传输指令中的目标地址对应的远端计算设备是否为安全地址;如果不是,所述指令修改单元适于阻止所述网络传输指令。
[0051]可选的,所述指令重组单元还包括:
[0052]反汇编单元,适于在指令解析单元解析所述待调度的机器指令片段之前,反汇编所述待调度的机器指令片段,生成待调度的汇编指令片段;
[0053]汇编单元,适于汇编重组后的汇编指令片段,得到机器码表示的重组指令片段。
[0054]本发明提供的方法和装置可以实现运行时指令的捕获和重组,并且,在获取到待调度指令片段后,还可以对其中的机器指令进行分析以及处理,从而不仅可以实现运行时指令捕获、重组,还可以实现对预定的目标指令的管理。
【专利附图】

【附图说明】
[0055]图1是现有技术中计算设备的系统层次示意图;
[0056]图2是本发明一个实施例中提供的运行时指令重组方法的流程图;
[0057]图3是本发明一个实施例中提供的重组指令片段的生成过程示意图;
[0058]图4是本发明另一个实施例中提供的图2中步骤S102的流程图;
[0059]图5是本发明另一个实施例中提供的运行时指令重组方法的流程图,利用地址对应表保存已经重组过的指令片段;
[0060]图6是本发明另一个实施例中提供的运行时指令重组方法的流程图,单独开辟存储位置保存第一跳转指令的目标地址;
[0061]图7是本发明另一个实施例中提供的运行时指令重组方法的流程图,针对非固定长度指令集进行反汇编和汇编处理;
[0062]图8是本发明另一个实施例中提供的运行时指令重组方法的流程图,以压栈指令替代或记录第一跳转指令;
[0063]图9a是本发明另一个实施例中提供的运行时指令重组方法的流程图,其中的运行时指令重组方法综合之前多个实施例中的特征;
[0064]图9b_9d是图9a中的运行时指令重组方法在X86体系处理器上运行时的操作过程不意图;
[0065]图10是本发明一个实施例中提供的运行时指令重组装置结构示意图;
[0066]图11是本发明另一个实施例中提供的运行时指令重组装置结构示意图;
[0067]图12是本发明另一个实施例中提供的指令重组单元结构示意图;
[0068]图13是本发明另一个实施例中提供的运行时指令重组装置结构示意图;
[0069]图14是本发明另一个实施例中提供的运行时指令重组装置结构示意图。
【具体实施方式】
[0070]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0071]公近
[0072]如图1所示为现有技术中计算设备的系统层次示意图,从上至下,计算设备包括:用户界面层101,应用层102,操作系统内核层103,硬件映射层104以及硬件层105。
[0073]其中,用户界面层101是用户与设备之间的接口,用户通过该层与设备(即设备的其他层次,例如应用层102)进行交互。应用层102指应用软件层。
[0074]操作系统内核层103是一种基于软件的逻辑层,一般来讲是由软件数据和软件代码组成,相比于界面层101和应用层102,操作系统内核层103的代码拥有更高的权限,可以对计算机系统中的各种软硬件资源进行完整的操作。
[0075]硬件映射层104是一种基于软件的逻辑层,它一般工作在操作系统内核层,拥有与内核层相同的权限。硬件映射层主要是为了解决将不同类型的硬件的操作模式映射为一种统一的上层接口,向上屏蔽硬件的特殊性。一般来说,硬件映射层主要被操作系统内核层103使用,来完成对各种硬件的操作。
[0076]硬件层105是指构成计算机系统的所有硬件部件。
[0077]用户通过用户界面层101 (即处于用户界面层101的用户界面)对该计算设备进行操作并得到图形化或非图形化反馈。以保存数据的操作为例,其过程包括:
[0078](I)用户通过某应用程序提供的用户界面101,选择“保存”功能;
[0079](2)应用层102调用对应代码,将上述用户操作转化为一个或多个操作系统提供的接口函数,即“保存”操作转化成为对一系列操作系统内核层103提供的接口函数的调用;
[0080](3)操作系统内核层103将每一个操作系统接口函数转化为一个或多个硬件映射层104提供的接口函数;即“保存”操作转化成为对一系列硬件映射层104提供的接口函数的调用;
[0081](4)硬件映射层104将每一个自己提供的接口函数转化为一个或多个硬件指令调用;最后,
[0082](5)硬件层105 (例如CPU)接收上述硬件指令调用并执行硬件指令。
[0083]针对该计算设备,当其被恶意代码侵入后,恶意代码可以从计算设备中取得所需数据,窃取数据后其行为模式包括:
[0084](I)存储行为:将目标数据内容保存到某个存储位置;
[0085](2)传输行为:将窃取的数据直接通过网络传输到指定的目标地址。
[0086]另外,使用上述计算设备或信息设备的人员进行内部泄密的行为模式包括:
[0087](I)主动泄密:涉密人员通过主动拷贝、通过恶意工具穿透安全系统、置入木马等手段直接取得涉密数据,并进行泄密;
[0088](2)被动泄密:涉密人员使用的电脑或存储介质因保管不善丢失或使用不当(例如将涉密装备直接接入Internet)造成的泄密。
[0089]上述多种泄密方式使得该计算设备的数据安全无法保障。
[0090]发明人经研究发现,计算机运行过程中,CPU地址寄存器保存下一条将要运行的机器指令的地址,例如pc (program counter,程序计数器)指向的地址;获取该寄存器中的数据,并按照该数据指向的地址,读取下一条或者多条将要运行的机器指令,可以实现运行时捕获机器指令的目的。
[0091]并且,通过修改所述一条或多条机器指令所组成的待调度指令片段(例如在其中插入额外的跳转指令,本文称为指令重组),使得在该段指令运行完毕之前重新获得CPU执行权,并再次捕获下一个待调度指令片段,可以实现运行时连续捕获机器指令的目的。
[0092]并且,在获取到待调度指令片段后,还可以对其中的机器指令进行分析以及处理,从而不仅可以实现运行时指令捕获、重组,还可以实现对预定的目标指令的管理。
[0093]指令重组或指令追踪
[0094]基于上述分析和发现,本发明的一个实施例中提供了一种运行时指令重组方法,该方法运行时称为指令重组平台。如图2所示,该方法SlOO包括:
[0095]S101,缓存指令运行环境;所述指令运行环境包括地址寄存器,地址寄存器保存下一条将要运行的机器指令的地址,该地址为第一地址;
[0096]S102,获取待调度的机器指令片段;其中,待调度的机器指令片段的最后一条指令为第一跳转指令;
[0097]S103,在所述第一跳转指令前,插入第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向指令重组平台的入口地址,即执行该第二跳转指令后,执行步骤 SlOl ;
[0098]S104,将所述地址寄存器中的第一地址修改为第二地址;和
[0099]S105,恢复所述指令运行环境。
[0100]在本实施例中,上述运行时指令重组方法在X86架构的CPU上执行;在本发明的其他实施例中,上述运行时指令重组方法也可以在MIPS处理器或基于ARM架构的处理器上执行。本领域普通技术人员可以理解,上述方法可以在计算设备中的任何其他类型的指令处理单元上执行。
[0101]其中,在步骤SlOl中,所述缓存指令运行环境可以包括:
[0102]向缓存栈中压入CPU机器指令运行相关的寄存器数据。
[0103]在本发明的其他实施例中,缓存或保存指令运行环境也可以在指定的、默认的其他缓存数据结构和地址中进行。
[0104]在步骤SlOl中,所述地址寄存器可以为CPU地址寄存器。[0105]在步骤S102中,待调度的机器指令片段中最后一条指令为第一跳转指令,待调度的机器指令片段中只有一条跳转指令,待调度的机器指令片段包括所述第一跳转指令以及其之前的所有待调度的机器指令。
[0106]在步骤S103中,在所述待调度的机器指令片段的最后一条指令(即第一跳转指令JPl)前,插入第二跳转指令JP2,所述JP2指向指令重组平台的入口地址,生成具有第二地址A"的重组指令片段。
[0107]插入第二跳转指令是为了在CPU运行所述待调度的机器指令片段时,在JPl运行前,重新开始运行所述指令重组平台,这样,指令重组平台就可以继续分析下一段待调度的机器指令片段,从而通过重复本方法来完成对所有运行时指令的重组。
[0108]在步骤S105中,恢复所述指令运行环境可以包括:
[0109]从缓存栈中弹出指令运行相关的寄存器数据;其中地址寄存器保存的跳转指令的目标地址已经修改为以第二地址A"为入口地址的新的机器指令片段。
[0110]步骤S105执行后,恢复了所述指令运行环境,指令重组平台完成一次运行,CPU执行所述重组指令片段,即CPU将执行以第二地址A"为入口地址的机器指令片段。重组指令片段执行到第二跳转指令JP2时,所述指令重组平台重新得到CPU控制权(即执行步骤S101),此时第一跳转指令的目标地址已经得到,该目标地址为新的第一地址,继而重新执行步骤SlOl?步骤S105。
[0111]下面结合图3,进一步说明指令重组过程和重组指令片段的生成过程。
[0112]图3中包括待调度的机器指令集合401 (例如已经载入内存中的某程序的机器指令),其中指令4012为第一跳转指令,如果指令4012的目标地址为变量,则首先假设指令4012指向机器指令4013 ;从第一跳转指令4012以前的包括第一跳转指令4012的所有待调度的机器指令构成了机器指令片段4011。
[0113]当指令重组方法运行后(指令重组平台411),首先缓存指令运行环境;然后获取(例如拷贝)机器指令片段4011 ;指令重组平台在第一跳转指令4012前插入了第二跳转指令4113,第二跳转指令4113指向指令重组平台411本身,从而生成了重组指令片段4111,重组指令片段的地址为A";将所述缓存的指令运行环境中的地址寄存器的值A修改为地址A";最后恢复所述指令运行环境。
[0114]指令重组平台411结束运行后,CPU执行以A"为地址的重组指令片段,当执行到第二跳转指令4113时,指令重组平台411会重新获得CPU控制权。此时,第一跳转指令4012的目标地址4013已经生成,该目标地址为新的第一地址,指令重组平台根据该目标地址重新开始执行步骤SlOl?步骤S105,继续分析后续的待调度的机器指令,从而完成了运行时指令重组的方法。
[0115]根据本发明另一个实施例,如图4所示,在步骤S102中,获取待调度的机器指令片段可以包括:
[0116]S1021,从地址寄存器(例如CPU地址寄存器)读取待调度的机器指令地址;
[0117]S1022,以跳转指令为检索目标,检索所述机器指令地址指向的机器指令及其后续指令,直到发现第一个跳转指令(称为第一跳转指令);所述跳转指令指能够改变机器指令顺序执行流程的机器指令,包括Jump指令、Call指令、Return指令等;
[0118]S1023,将所述第一跳转指令以及其之前的所有待调度的机器指令作为一个待调度的机器指令片段;将该机器指令片段保存在指令重组平台中,或其他指令重组平台能够读取的存储位置。
[0119]在本发明的其他实施例中,获取待调度的机器指令片段也可以以非跳转指令(例如写入指令、读取指令等)为检索目标,进一步切分机器指令片段。由于在这样的实施例中,也需要保证在待调度跳转指令执行后指令重组平台仍能够获取CPU控制权或执行权,所以跳转指令需要作为第二检索目标,从而得到粒度更小的机器指令片段。
[0120]根据本发明另一个实施例,在步骤S102和S103之间,所述运行时指令重组方法还可以包括:
[0121]利用指令集匹配所述待调度的机器指令片段,得到目标机器指令;所述指令集包括X86,MIPS和ARM指令集;和
[0122]按照预定的方式,修改所述目标机器指令。
[0123]不仅可以完成运行时指令监控,还可以进行其他处理过程,相关实施例将在后面详细介绍。
[0124]进一步的,为了提高指令重组方法的效率,可以将固定地址跳转指令所指向的待调度指令在步骤S102中一并获取。
[0125]根据本发明另一个实施例,提供一种运行时指令重组方法,该方法S300包括:
[0126]S301,缓存指令运行环境;所述指令运行环境包括地址寄存器,地址寄存器保存下一条将要运行的机器指令的地址,该地址为第一地址;
[0127]S302,获取待调度的机器指令片段;其中,待调度的机器指令片段的最后一条指令为第一跳转指令;
[0128]S303,在所述第一跳转指令前,插入第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向指令重组平台的入口地址,即执行该第二跳转指令后,执行步骤 S301 ;
[0129]S304,将所述地址寄存器中的第一地址修改为第二地址;
[0130]S305,恢复所述指令运行环境。
[0131]与之前的实施例中所提供的方法相比,区别在于:在步骤S302中,待调度的机器指令片段中可以包括多条跳转指令;跳转指令中只有一条参数地址跳转指令,称为第一跳转指令。
[0132]需要说明的是,跳转指令可以包括两类,参数地址跳转指令和常数地址跳转指令,其中,常数地址跳转指令的跳转地址为常数(即立即数),而参数地址跳转指令中的参数地址一般在跳转指令之前的一条机器指令中计算得到。
[0133]相似地,待调度的机器指令片段的最后一条指令为第一跳转指令;待调度的机器指令片段包括所述第一跳转指令以及其之前的所有待调度的机器指令。
[0134]进一步的,由于程序运行过程中所生成的机器指令具有很高的重复性,为了提高指令重组方法的效率,节省计算设备的计算资源(CPU资源),可以利用少量的存储空间来保存重组指令片段。
[0135]根据本发明另一个实施例,提供一种运行时指令重组方法。如图5所示,该方法S200包括:
[0136]S201,缓存指令运行环境;所述指令运行环境包括地址寄存器(例如CPU地址寄存器)(一般来说,指令运行环境是指CPU的所有寄存器,包括通用寄存器,状态寄存器,地址寄存器等),地址寄存器保存下一条将要运行的机器指令的地址,该地址为第一地址;
[0137]S202,利用所述第一地址查找地址对应表;所述地址对应表用于表不第一地址A指向的待调度指令片段是否具有已保存的重组指令片段,地址对应表的数据为地址对;
[0138]S203,如果找到相应的记录,将所述第一地址A(即地址寄存器的值A)修改为已保存的重组指令片段的地址A’ ;
[0139]S204,如果没有找到相应的记录,获取待调度的机器指令片段;其中,待调度的机器指令片段的最后一条指令为第一跳转指令;
[0140]S205,在所述第一跳转指令前,插入第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向指令重组平台的入口地址,即执行该第二跳转指令后,执行步骤 S201 ;
[0141]S206,将所述地址寄存器中的第一地址修改为第二地址;
[0142]S207,恢复所述指令运行环境。
[0143]进一步的,步骤S206还包括:利用第二地址A"与第一地址A在所述地址对应表中建立地址对(或一条记录)。具有地址A"的重组指令片段被保存在重组指令平台中,以
供重用。
[0144]本方法利用地址对应表,节省计算资源,提高运行时指令重组的效率。
[0145]上述重组方法一般通过在待调度指令片段之中插入所需跳转指令完成,在本发明其他实施例中,也可以通过其他方式完成重组指令片段的生成。下面将结合实施例详细介绍。
[0146]根据本发明另一个实施例,提供一种指令重组方法,单独开辟存储位置保存第一跳转指令的目标地址。如图6所示,该方法SllO包括:
[0147]S111,缓存指令运行环境;
[0148]S112,从第一存储位置读取目标地址,根据目标地址获取待调度(即待执行)的机器指令片段;其中,待调度机器指令片段的最后一条指令为第一跳转指令;
[0149]S113,在第一存储位置保存第一跳转指令的目标地址;
[0150]S114,将第一跳转指令替换为第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向指令重组平台的入口地址,即执行该第二跳转指令后,执行步骤Slll ;
[0151]S115,恢复所述指令运行环境,并跳转到第二地址继续执行。
[0152]其中,在步骤S112中,获取待调度的机器指令片段可以包括:
[0153]S1121、以跳转指令为检索目标,检索所述机器指令地址指向的机器指令及其后续指令,直到发现第一个跳转指令(称为第一跳转指令);
[0154]所述跳转指令指能够改变机器指令顺序执行流程的机器指令,包括Jump指令、Call指令、Return指令等;
[0155]S1122、将所述第一跳转指令以及其之前的所有待调度的机器指令作为一个待调度的机器指令片段;将该机器指令片段保存在指令重组平台中,或其他指令重组平台能够读取的存储位置。
[0156]在步骤S113中,目标地址即跳转指令的目标地址参数,其可以是立即数或变量参数,对于立即数保存其值,对于变量参数保存其地址/引用。当处理器即将执行某跳转指令时,其跳转目标地址已经计算完毕。
[0157]根据本发明另一个实施例,提供一种指令重组方法,针对非固定长度指令集进行反汇编和汇编处理。如图7所示,该方法包括:
[0158]S121,缓存指令运行环境;
[0159]S122,从第一存储位置读取目标地址,根据目标地址获取待调度指令片段:
[0160]从目标地址开始,获取待调度的一段机器指令,将该段机器指令进行反汇编,并将反汇编结果通过一个词法分析器进行处理并匹配是否其中包含跳转指令,如果不包含则继续获取下一段待调度的机器指令重复上述操作,直到匹配到跳转指令为止,该跳转指令为第一跳转指令;第一跳转指令以及之前的所有指令组成待调度指令片段;
[0161]S123,在第一存储位置保存第一跳转指令的目标地址;
[0162]S124,将第一跳转指令替换为第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向指令重组平台的入口地址;本实施例中,该第一跳转指令和第二跳转指令皆为汇编指令;
[0163]S125,将生成的重组后的汇编代码通过汇编器生成对应的机器码;和
[0164]S126,恢复所述指令运行环境,并跳转到第二地址继续执行。
[0165]根据本发明另一个实施例,提供一种指令重组方法,以压栈指令替代或记录第一跳转指令。如图8所示,该方法S130包括:
[0166]S131,缓存指令运行环境;
[0167]S132,获取栈中保存的跳转指令的地址和参数,计算下一条即将运行的指令地址,该地址为第一地址;
[0168]S133,根据第一地址获取待调度/执行的机器指令片段;其中,待调度机器指令片段的最后一条指令为第一跳转指令;
[0169]S134,替换第一跳转指令为压栈指令,在压栈指令中记录第一跳转指令的地址和操作数;
[0170]S135,在压栈指令之后加入第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向指令重组平台的入口地址;和
[0171]S136,恢复所述指令运行环境,并跳转到第二地址继续执行。
[0172]本领域普通技术人员可以理解,上述各个实施例中提供的功能或特征可以根据实际的需要叠加在同一个实施例中,这里就不再一一组合给出,下面只举一个例子进行示例性说明。
[0173]根据本发明另一个实施例,提供一种指令重组方法,如图9a所示,包括:
[0174](I)缓存指令运行环境,所述指令运行环境包括全部的CPU环境和内存环境;获取栈中保存的跳转指令的地址和参数,计算下一条即将运行的指令地址(第零地址),将第一地址设置为第零地址;
[0175](2)利用第一地址来查找地址对应表(也称为地址查找表),如果找到记录,恢复所缓存的指令运行环境,并跳转到找到的对应地址(在地址对应表中的地址对内)继续执行;
[0176](3)如果没有找到记录,从第一地址开始获取待执行的机器指令片段,指令片段的结尾为跳转指令(跳转指令所在地址为第三地址);
[0177](4)从第一地址开始,将机器码进行反汇编,并将反汇编结果通过一个词法分析器进行处理,生成重组后的汇编代码,直到第三地址为止;
[0178](5)判断第三地址处的代码是否可以进一步处理,即第三地址处的跳转指令的目标地址为已知量(例如,立即数),如果可以,将第一地址设置为第三地址(或第三地址的目标地址),重新开始执行(3);
[0179](6)如果不可以,在生成的重组后的汇编代码最后,加入压栈指令记录当前第三地址的原始地址位置(即第三地址的值)和操作数,并在压栈指令之后加入跳转至重组平台开始的指令,即能够使步骤(I)再次开始执行;
[0180](7)将生成的重组后的汇编代码通过汇编器生成对应的机器码,并存储于重组地址空间中分配出的地址(第二地址),并将第二地址和第零地址以对应地址对的形式存储于地址对应表中;
[0181](8)恢复环境,并跳转到第二地址继续执行。
[0182]为了方便理解,现以X86体系处理器运行该实施例提供的方法进行说明,参考图9b-9d,指令重组的一个示例过程如下:
[0183](I)重组平台开始工作后,首先缓存当前指令运行环境;获取栈中保存的跳转指令的地址和参数,计算下一条即将运行的指令地址,该地址为第一地址。
[0184](2)利用第一地址来查找地址对应表,如果找到记录,恢复所缓存的指令运行环境,并跳转到找到的对应地址继续执行(图%);如果没有找到记录,进行如下操作(图9c)。
[0185](3)-(6)从第一地址开始,将机器码进行反汇编,并将反汇编结果通过一个词法分析器进行处理,生成重组代码;
[0186]对该段汇编代码进行检索,检查是否包含跳转指令;
[0187]对第一个跳转指令进行分析,判断其跳转目标地址是否为已知量,如果是已知量,则继续寻找,直到找到第一条参数地址跳转指令,称为第一跳转指令,该指令的地址为第三地址;
[0188]在生成的汇编代码(从第一地址到第三地址的机器指令,不包括第一跳转指令)最后加入压栈指令记录当前第三地址的第一跳转的原始地址位置和操作数;
[0189]在压栈指令之后加入跳转至重组平台开始的指令(第二跳转指令)。
[0190](7)将生成的汇编代码通过汇编器生成对应的机器码,并存储于重组地址空间中分配出的地址(第二地址);
[0191]将第二地址和第零地址以对应地址对的形式存储于地址对应表中。
[0192](8)恢复环境,并跳转到第二地址继续执行。
[0193](图9d)处理器开始执行第二地址的指令,之前的待重组指令片段中的跳转指令已经替换为压栈指令和跳转去重组平台的指令,压栈指令主要的目的是向重组平台提供输入参数。(图9d)当执行到第二跳转指令时,重组平台重新得到执行,进行上述的步骤(I),通过查看压栈指令中保存的跳转指令的地址和参数,计算下一条即将运行的指令地址,该地址为第一地址。
[0194]之后的处理即上述过程的循环。[0195]进一步的,为了从系统启动后即执行运行时的指令监控,实现计算设备运行阶段的运行时指令全监控,本发明另一个实施例中,修改计算机启动时的load指令,在load指令执行前调用本发明提供的指令重组平台,执行上述运行时指令重组方法,由于load指令跳转地址为已知的固定地址,指令重组平台可以事先建立好地址对应表及该第一条记录,并建立好第一个重组指令片段。
[0196]进一步的,根据本发明另一个实施例,提供一种计算机可读介质,其中,所述可读介质中存储有计算机可执行的程序代码,所述程序代码用于执行上述实施例中提供的运行时指令重组方法的步骤。
[0197]进一步的,根据本发明另一个实施例,提供一种计算机程序,其中,所述计算机程序包含上述实施例中提供的运行时指令重组方法的步骤。
[0198]针对数据安全的指令重组
[0199]上述的运行时指令重组方法为进一步的应用提供了基础。下面的实施例中提供了各种针对不同机器指令进行处理的运行时指令重组方法,其中包括存储/读取指令,I/o指令,以及网络传输指令:
[0200](I)存储/读取指令指计算机系统中所有对外部存储设备(包括但不限于磁盘、移动存储、光存储)进行存储/读取的指令或指令组合。
[0201](2) I/O指令指计算机系统中所有操作外设的地址空间的指令,这些指令最终会影响外设输入输出状态、数据、信号等。这里的输入输出地址空间包括但不限于(I/O地址空间、内存映射I/O设备地址空间)。
[0202](3)网络传输指令指计算机系统中所有影响网络设备的指令,这些指令最终会影响计算机系统网络设备的传输、状态、数据、信号等所有相关特性。
[0203]其中,存储/读取指令与I/O指令之间可以存在交集。
[0204]根据本发明一个实施例,提供一种针对存储/读取指令的运行时指令重组方法S400,包括:
[0205]S401,缓存指令运行环境;所述指令运行环境包括地址寄存器,地址寄存器保存下一条将要运行的机器指令的地址,该地址为第一地址;
[0206]S402,利用所述第一地址查找地址对应表;
[0207]S403,如果找到相应的记录,将所述第一地址A修改为已保存的重组指令片段的地址A’ ;
[0208]S404,如果没有找到相应的记录,重组指令片段的生成方法包括:
[0209]S4041,获取待调度机器指令片段;其中,待调度的机器指令片段的最后一条指令为第一跳转指令;与步骤S102相同;
[0210]S4042,反汇编所述待调度机器指令片段,得到汇编指令片段;
[0211]S4043,检索目标汇编指令,所述目标汇编指令为存储/读取指令;
[0212]S4044,如果检索得到所述汇编指令片段中的存储/读取指令,修改其中的存储和读取地址为安全存储设备上的地址;修改方式可以为本地地址空间和安全存储设备地址空间之间的直接映射;
[0213]S4045,在所述第一跳转指令JPl前,插入第二跳转指令JP2,所述JP2指向指令重组平台的入口地址;[0214]S4046,汇编修改过的汇编指令片段,生成具有地址A"的重组机器指令片段;
[0215]S4047,利用重组机器指令片段地址A"与第一地址A在所述地址对应表中建立一条记录(或地址对),具有地址A"的重组指令片段被保存在重组指令平台中;
[0216]S4048,将第一地址A修改为第二地址A";
[0217]S405,恢复所述指令运行环境。
[0218]本实施例是在反汇编步骤之后进行指令处理的;在其他实施例中,也可以省略反汇编和对应的汇编步骤,直接处理机器指令。
[0219]在步骤S4044中,针对存储和读取指令进行操作,修改其中的目标和源地址,以实现存储重定位/重定向,确保数据安全。更具体的安全存储/读取的方法将在本发明提供的下面的实施例中介绍。
[0220]根据本发明一个实施例,提供一种针对I/O指令的运行时指令重组方法S500,包括:
[0221]S501,缓存指令运行环境;所述指令运行环境包括地址寄存器,地址寄存器保存下一条将要运行的机器指令的地址,该地址为第一地址;
[0222]S502,利用所述第一地址查找地址对应表;
[0223]S503,如果找到相应的记录,将所述第一地址A修改为已保存的重组指令片段的地址A’ ;
[0224]S504,如果没有找到相应的记录,重组指令片段的生成方法包括:
[0225]S5041,获取待调度机器指令片段;其中,待调度的机器指令片段的最后一条指令为第一跳转指令;与步骤S102相同;
[0226]S5042,反汇编所述机器指令片段,得到汇编指令片段;
[0227]S5043,检索目标汇编指令,所述目标汇编指令为I/O指令;
[0228]S5044,如果检索得到所述汇编指令片段中的I/O指令,将所述I/O指令中的输入指令全部阻止;
[0229]S5045,在所述第一跳转指令JPl前,插入第二跳转指令JP2,所述JP2指向指令重组平台的入口地址;
[0230]S5046,汇编修改过的汇编指令片段,生成具有地址A"的重组机器指令片段;
[0231]S5047,利用重组机器指令片段地址A"与第一地址A在所述地址对应表中建立一条记录(或地址对),具有地址A"的重组指令片段被保存在重组指令平台中;
[0232]S5048,将第一地址A修改为第二地址A";
[0233]S505,恢复所述指令运行环境。
[0234]本实施例是在反汇编步骤之后进行指令处理的;在其他实施例中,也可以省略反汇编和对应的汇编步骤,直接处理机器指令。
[0235]在步骤S5044中,针对I/O指令进行操作,将所述I/O指令中的输入指令全部阻止,以实现彻底阻断对本地硬件设备的写操作;结合上一个实施例中的存储指令处理过程,还可以实现对除存储指令之外的输入指令的阻止,可以提高计算设备中的数据安全性。
[0236]根据本发明一个实施例,提供一种针对网络传输指令的运行时指令重组方法S600,包括:
[0237]S601,缓存指令运行环境;所述指令运行环境包括地址寄存器,地址寄存器保存下一条将要运行的机器指令的地址,该地址为第一地址;
[0238]S602,利用所述第一地址查找地址对应表;
[0239]S603,如果找到相应的记录,将所述第一地址A修改为已保存的重组指令片段的地址A’ ;
[0240]S604,如果没有找到相应的记录,重组指令片段的生成方法包括:
[0241]S6041,获取待调度机器指令片段;其中,待调度的机器指令片段的最后一条指令为第一跳转指令;与步骤S102相同;
[0242]S6042,反汇编所述待调度机器指令片段,得到汇编指令片段;
[0243]S6043,检索目标汇编指令,所述目标汇编指令为网络传输指令;
[0244]S6044,如果检索得到所述汇编指令片段中的网络传输指令,检验所述网络传输指令中的目标地址对应的远端计算设备是否为安全地址,如果不是,阻止所述网络传输指令;
[0245]S6045,在所述第一跳转指令JPl前,插入第二跳转指令JP2,所述JP2指向指令重组平台的入口地址;
[0246]S6046,汇编修改过的汇编指令片段,生成具有地址A"的重组机器指令片段;
[0247]S6047,利用重组机器指令片段地址A"与第一地址A在所述地址对应表中建立一条记录(或地址对),具有地址A"的重组指令片段被保存在重组指令平台中;
[0248]S6048,将第一地址A修改为第二地址A";
[0249]S605,恢复所述指令运行环境。
[0250]在步骤S6044中,阻止/拒绝网络传输指令可以通过在重组后的代码中插入一到多条指令来将本身的传输指令替换为“取消当前操作的指令”或直接替换为无效指令,要视硬件的不同而定。
[0251]本实施例是在反汇编步骤之后进行指令处理的;在其他实施例中,也可以省略反汇编和对应的汇编步骤,直接处理机器指令。
[0252]在步骤S6044中,针对网络传输指令进行操作,检验所述网络传输指令中的目标地址对应的远端计算设备是否为安全地址;如果不是,阻止所述网络传输指令,以实现数据安全传输。
[0253]上述多个实施例中的地址对应表是由指令重组平台建立并维护的,可以是固定长度的数组结构,也可以是可变长度的链表结构,还可以是其他存储二元数据的适当的数据结构。优选的,其长度可调节,并且其占用空间可释放。释放地址对应表的操作可以随机进行,也可以周期进行。在一些实施例中,所述的地址对应表还可以包括记录建立时间字段,用于在释放空间删除记录时,按照建立时间的长短删除记录。在一些实施例中,所述的地址对应表还可以包括记录使用次数字段,在查找地址对应表步骤中,如果找到,将改变该字段的值;所述记录使用次数字段也用于在释放空间删除记录时,按照使用次数的多少删除记录。
[0254]另外,本领域的技术人员可以理解,上述指令重组方法(即运行时指令重组方法)可使用软件或硬件的方法实现:
[0255](I)如果以软件实现,则上述方法对应的步骤以软件代码的形式存储在计算机可读介质上,成为软件产品;[0256](2)如果以硬件实现,则上述方法对应的步骤以硬件代码(例如Verilog)描述,并固化(经过物理设计/布局布线/晶圆厂流片等过程)成为芯片产品(例如处理器产品)。下面将详细介绍。
[0257]指令重组装置
[0258]与上述运行时指令重组方法SlOO相对应,根据本发明一个实施例,提供一种运行时指令重组装置。如图10所示,指令重组装置500包括:
[0259]指令运行环境缓存和恢复单元501,适于缓存和恢复指令运行环境;所述指令运行环境包括地址寄存器,该地址寄存器保存下一条将要运行的机器指令的地址,该地址为第一地址;
[0260]指令获取单元502,适于在单元501缓存指令运行环境后,获取待调度的机器指令片段;其中,待调度的机器指令片段的最后一条指令为第一跳转指令;
[0261]指令重组单元503,适于解析、修改所述待调度的机器指令片段,包括:在第一跳转指令前,插入第二跳转指令,生成具有第二地址A "的重组指令片段;所述第二跳转指令指向装置500,即执行该第二跳转指令后,装置500的指令运行环境缓存和恢复单元501进行下一次处理;和
[0262]地址替换单元504,适于将所述缓存的指令运行环境中的地址寄存器的值修改为重组指令片段的地址。
[0263]所述指令运行环境缓存和恢复单元501分别与指令获取单元502以及地址替换单元504耦接,所述指令获取单元502,指令重组单元503和地址替换单元504依次耦接。
[0264]装置500执行过程如下:
[0265]首先,指令运行环境缓存和恢复单元501缓存指令运行环境,例如向缓存栈中压入指令运行相关的寄存器数据;
[0266]然后,所述指令获取单元502从CPU地址寄存器511读取待调度的机器指令地址,并从所述机器指令地址读取机器指令片段,所述机器指令片段最后一条指令为跳转指令;
[0267]例如,指令获取单元502从CPU地址寄存器511读取待调度的机器指令地址;以跳转指令为检索目标,检索所述机器指令地址对应的机器指令,直到发现第一个跳转指令;所述跳转指令包括例如Jump指令和Call指令等;将所述第一个跳转指令及其之前的所有机器指令作为一个待调度的机器指令片段;将该机器指令片段保存在装置500中,或其他的装置500能够读取的存储位置;
[0268]然后,指令重组单元503在所述获取的机器指令片段的最后一条指令前,插入第二跳转指令,所述第二跳转指令指向装置500的入口地址,生成具有地址A"的重组指令片段;
[0269]然后,地址替换单元504将所述缓存的指令运行环境中的地址寄存器的值A修改为地址A";
[0270]最后,指令运行环境缓存和恢复单元501恢复所述指令运行环境,例如从缓存栈中弹出指令运行相关的寄存器数据。
[0271]与上述运行时指令重组方法S300相对应,所述指令获取单元502可以将第一个非常数地址跳转指令作为第一跳转指令。以提高重组装置的执行效率。
[0272]与上述运行时指令重组方法S200相对应,根据本发明另一个实施例,提供一种运行时指令重组装置,能够充分利用运行时指令重复性,提高效率,节省计算资源。
[0273]如图11所示,指令重组装置600包括:
[0274]指令运行环境缓存和恢复单元601,适于缓存和恢复指令运行环境;所述指令运行环境包括地址寄存器,地址寄存器保存下一条将要运行的机器指令的地址,该地址为第一地址;
[0275]指令获取单元602,适于获取待调度的机器指令片段;其中,待调度的机器指令片段的最后一条指令为第一跳转指令;
[0276]指令重组单元603,适于解析、修改所述待调度机器指令片段,包括:在第一跳转指令前插入第二跳转指令,以生成具有第二地址的重组指令片段;所述第二跳转指令指向装置600,即执行该第二跳转指令后,装置600的指令运行环境缓存和恢复单元601进行下一次处理;
[0277]地址替换单元604,适于将所述缓存的指令运行环境中的地址寄存器的值修改为重组指令片段的地址;和
[0278]指令检索单元605,适于利用所述第一地址查找地址对应表;所述地址对应表用于表示第一地址A指向的待调度指令片段是否具有已保存的重组指令片段,地址对应表的数据为地址对;
[0279]如果找到相应的记录,指令检索单元605适于调用地址替换单元604,将所述第一地址A(即地址寄存器的值A)修改为已保存的重组指令片段的地址A’ ;如果没有找到相应的记录,指令检索单元适于利用第二地址A"与地址A在所述地址对应表中建立一条记录。
[0280]所述指令运行环境缓存和恢复单元601分别与指令检索单元605以及地址替换单元604耦接,所述指令检索单元605分别与指令获取单元602,指令重组单元603和地址替换单元604耦接,所述指令获取单元602、指令重组单元603和地址替换单元604依次耦接。
[0281]装置600的执行过程如下:
[0282]首先,指令运行环境缓存和恢复单元601缓存指令运行环境,例如向缓存栈中压入指令运行相关的寄存器数据;
[0283]然后,指令检索单元605利用所述缓存的指令运行环境中的地址寄存器的值A查找地址对应表;
[0284]如果找到相应的记录,指令检索单元605调用地址替换单元604,地址替换单元604将所述地址寄存器的值A修改为记录中的值A’ ;地址替换单元604调用指令运行环境缓存和恢复单元602,以恢复所述指令运行环境,即从缓存栈中弹出指令运行相关的寄存器数据,本次重组操作结束;
[0285]如果没有找到相应的记录,所述指令获取单元602从CPU地址寄存器读取待调度的机器指令地址,并从所述机器指令地址读取机器指令片段,所述机器指令片段最后一条指令为跳转指令。具体的,指令获取单元602从CPU地址寄存器读取待调度的机器指令地址;以跳转指令为检索目标,检索所述机器指令地址对应的机器指令,直到发现第一个跳转指令;所述跳转指令包括Jump指令和Call指令等;将所述第一个跳转指令及其之前的所有机器指令作为一个待调度的机器指令片段;将该机器指令片段保存在装置600中,或其他的装置600能够读取的存储位置;
[0286]然后,指令重组单元603在所述获取的机器指令片段的最后一条指令前,插入第二跳转指令,所述第二跳转指令指向装置600的入口地址,生成具有地址A"的重组指令片段;
[0287]然后,指令重组单元603将地址A"发送给指令检索单元605,指令检索单元605利用地址A"与地址A在其中的地址对应表中建立一条记录;以备后续指令重用;
[0288]然后,地址替换单元604将所述缓存的指令运行环境中的地址寄存器的值A修改为地址A";
[0289]最后,指令运行环境缓存和恢复单元601恢复所述指令运行环境,即从缓存栈中弹出指令运行相关的寄存器数据。
[0290]继续参考图11,其中,指令重组单元603还可以包括:
[0291]指令解析单元6031,适于利用指令集匹配所述机器指令片段,得到待处理的目标机器指令(即利用目标指令检索待调度的机器指令片段);所述指令集包括X86,MIPS和ARM指令集;
[0292]指令修改单元6032,适于按照预定的方式,修改所述目标机器指令。
[0293]例如,如果所述目标指令为存储/读取指令,所述指令解析单元6031将负责获取待调度的机器指令片段中的存储/读取指令,所述指令修改单元6032修改其中的存储和读取地址为安全存储设备上的地址。其作用和效果与上述对应的方法实施例S400相同,这里不再赘述。
[0294]又例如,如果所述目标指令为I/O指令,所述指令解析单元6031将负责获取待调度的机器指令片段中的I/o指令,所述指令修改单元6032将所述I/O指令中的输入指令全部阻止。其作用和效果与上述对应的方法实施例S500相同,这里不再赘述。
[0295]又例如,如果所述目标指令为网络传输指令,所述指令解析单元6031将负责获取待调度的机器指令片段中的网络传输指令,所述指令修改单元6032检验所述网络传输指令中的目标地址对应的远端计算设备是否为安全地址;如果不是,所述指令修改单元适于阻止所述网络传输指令。其作用和效果与上述对应的方法实施例S600相同,这里不再赘述。
[0296]根据本发明另一个实施例,上述指令重组单元还可以包括反汇编单元和汇编单元。如图12所示,指令重组单元703包括:依次稱接的反汇编单元7031,指令解析单元7032,指令修改单元7033和汇编单元7034。
[0297]其中,反汇编单元7031适于在解析、修改所述待调度的机器指令片段之前,反汇编所述待调度的机器指令片段,生成待调度的汇编指令片段;发送给指令解析单元7032。
[0298]汇编单元7034适于在解析、修改所述待调度的机器指令片段之后,汇编重组后的汇编指令片段,得到机器码表示的重组指令片段;发送给指令替换单元。
[0299]在该实施例中,所述指令解析单元7032和指令修改单元7033将操作待调度的汇编指令片段。
[0300]与上述运行时指令重组方法SllO相对应,根据本发明另一个实施例,提供一种运行时指令重组装置。如图13所示,指令重组装置800包括:
[0301]指令运行环境缓存和恢复单元801,适于缓存指令运行环境;
[0302]指令获取单元802和第一存储位置803,其中,指令获取单元802适于从第一存储位置803读取目标地址,并根据目标地址获取待调度/执行的机器指令片段;其中,待调度机器指令片段的最后一条指令为第一跳转指令;以及
[0303]指令重组单元804,适于在第一存储位置803保存第一跳转指令的目标地址,将第一跳转指令替换为第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向装置800的入口地址。
[0304]其中,指令运行环境缓存和恢复单元801还适于在指令重组单元804替换指令之后,恢复所述指令运行环境,并跳转到第二地址继续执行。
[0305]装置800的执行过程如下:
[0306]首先,指令运行环境缓存和恢复单元801缓存指令运行环境;
[0307]然后,指令获取单元802从第一存储位置803读取目标地址(待调度指令地址),根据目标地址获取待调度机器指令片段;其中,待调度机器指令片段的最后一条指令为第一跳转指令;
[0308]然后,指令重组单元804在第一存储位置803保存第一跳转指令的目标地址;对于立即数保存其值,对于变量参数保存其地址/引用;
[0309]然后,指令重组单元804将第一跳转指令替换为第二跳转指令,生成具有第二地址的重组指令片段;
[0310]最后,指令运行环境缓存和恢复单元801恢复所述指令运行环境,并跳转到第二地址继续执行。
[0311]根据本发明另一个实施例,提供一种运行时指令重组装置,与上述方法S130相对应,并且包含上述某些实施例中提供的装置的特征。如图14所示,该装置900包括:
[0312]指令运行环境缓存和恢复单元901,适于缓存和恢复指令运行环境;
[0313]指令获取单元902,适于通过输入参数计算的方式获取下一条即将运行的指令地址,该地址为第一地址;还适于根据第一地址获取待调度/执行的机器指令片段;其中,待调度机器指令片段的最后一条指令为第一跳转指令;
[0314]指令重组单元903,适于替换第一跳转指令为压栈指令,在压栈指令中记录第一跳转指令的地址和操作数;还适于在压栈指令之后加入第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向装置900的入口地址;还适于将重组指令片段的第二地址与第一地址在地址对应表中建立一条记录;
[0315]指令检索单元904,适于利用所述第一地址查找地址对应表;所述地址对应表用于表示第一地址指向的待调度指令片段是否具有已保存的重组指令片段,地址对应表的数据为地址对;
[0316]如果找到相应的记录,指令检索单元904适于调用指令运行环境缓存和恢复单元901恢复所缓存的指令运行环境,并跳转到找到的对应地址继续执行(重组操作完成);
[0317]如果没有找到相应的记录,调用指令重组单元903进行重组操作。
[0318]其中,指令重组单元903还可以包括反汇编单元9031,指令解析单元9
[0319]032,指令修改单元9033,和汇编单元9034。
[0320]其中,当指令重组单元902完成重组后,适于调用指令运行环境缓存和恢复单元901恢复所缓存的指令运行环境,并跳转到重组指令片段的地址继续执行(本次重组操作完成)。
[0321]根据本发明另一个实施例,上述反汇编单元9031可以位于指令获取单元902之中,在获取待调度的指令片段时由其进行反汇编操作。
[0322]本领域技术人员可以理解,上述装置实施例的附图中的数据流的箭头只是为了便于解释上述实施例中的具体操作流程,并不限定图中各个单元之间的数据流向或者连接方向,装置中各个单元之间为耦接关系。
[0323]上面通过一些实施例详细的介绍了运行时指令重组方法和装置,其与现有技术相t匕,具有以下优点:
[0324]通过指令重组方法,可以在指令运行状态下监控计算设备的指令;
[0325]利用地址对应表,提高了指令重组效率,节省了计算资源;
[0326]针对存储和读取指令进行操作,修改其中的目标和源地址,以实现存储重定位/重定向,确保数据安全;
[0327]针对I/O指令进行操作,将所述I/O指令中的输入指令全部阻止,以实现彻底阻断对本地硬件设备的写操作;还可以实现对除存储指令之外的输入指令的阻止,可以提高计算设备中的数据安全性;
[0328]针对网络传输指令进行操作,检验所述网络传输指令中的目标地址对应的远端计算设备是否为安全地址;如果不是,阻止所述网络传输指令,以实现数据安全传输。
[0329]应该注意到并理解,在不脱离后附的权利要求所要求的本发明的精神和范围的情况下,能够对上述详细描述的本发明做出各种修改和改进。因此,要求保护的技术方案的范围不受所给出的任何特定示范教导的限制。
【权利要求】
1.一种运行时指令重组方法,包括: 步骤1、缓存指令运行环境; 步骤2、获取栈中保存的跳转指令的地址和参数,计算下一条即将运行的指令地址,该地址为第一地址; 步骤3、根据第一地址获取待调度机器指令片段;其中,待调度机器指令片段的最后一条指令为第一跳转指令; 步骤4、替换第一跳转指令为压栈指令,在压栈指令中记录第一跳转指令的地址和操作数; 步骤5、在压栈指令之后加入第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向指令重组平台的入口地址;和 步骤6、恢复所述指令运行环境,并跳转到第二地址继续执行。
2.如权利要求1所述的运行时指令重组方法,步骤3中,根据第一地址获取待调度机器指令片段包括: 从第一地址开始,获取待调度的一段机器指令,将该段机器指令进行反汇编; 检查反汇编结果中是否包含跳转指令,如果不包含则继续获取后面一段待调度的机器指令,直到匹配到跳转指令为止,该跳转指令为第一跳转指令;其中,第一跳转指令以及之前的所有指令组成待调度指令片段。
3.如权利要求2所述的运行时指令重组方法,在步骤5和步骤6之间,还包括: 将生成的重组后的汇编代码通过汇编器生成对应的机器码。
4.如权利要求1所述的运行时指令重组方法,在步骤2和步骤3之间,还包括: 利用所述第一地址查找地址对应表;所述地址对应表用于表示待调度的机器指令片段是否具有已保存的重组指令片段; 如果找到相应的记录,恢复所述指令运行环境,并跳转到纪录中的保存地址继续执行。
5.如权利要求4所述的运行时指令重组方法,如果在地址对应表中没有找到相应的纪录,在步骤5之后,还包括: 利用重组指令片段的地址与所述第一地址在地址对应表中建立一条记录。
6.如权利要求1所述的运行时指令重组方法,在步骤3之后、步骤5之前,还包括: 解析所述待调度机器指令片段,利用指令集匹配所述机器指令片段,得到待处理的目标机器指令; 按照预定的方式,修改所述目标机器指令。
7.如权利要求6所述的运行时指令重组方法,其中,所述目标指令为存储/读取指令; 按照预定的方式,修改所述目标机器指令包括:修改其中的存储和读取地址为安全存储设备上的地址。
8.如权利要求6所述的运行时指令重组方法,其中,所述目标指令为I/O指令; 按照预定的方式,修改所述目标机器指令包括:将所述I/O指令中的输入指令全部阻止。
9.如权利要求6所述的运行时指令重组方法,其中,所述目标指令为网络传输指令; 按照预定的方式,修改所述目标机器指令包括:检验所述网络传输指令中的目标地址对应的远端计算设备是否为安全地址;如果不是,阻止所述网络传输指令。
10.一种计算机可读介质,所述可读介质中存储有计算机可执行的程序代码,所述程序代码用于执行权利要求1-9任一所述方法的步骤。
11.一种运行时指令重组装置,包括: 指令运行环境缓存和恢复单元,适于缓存和恢复指令运行环境; 指令获取单元,与指令运行环境缓存和恢复单元耦接,适于获取栈中保存的跳转指令的地址和参数,计算下一条即将运行的指令地址,该地址为第一地址;还适于根据第一地址获取待调度/执行的机器指令片段;其中,待调度机器指令片段的最后一条指令为第一跳转指令;和 指令重组单元,与指令运行环境缓存和恢复单元耦接,适于替换第一跳转指令为压栈指令,在压栈指令中记录第一跳转指令的地址和操作数;还适于在压栈指令之后加入第二跳转指令,生成具有第二地址的重组指令片段;所述第二跳转指令指向运行时指令重组装置的入口地址。
12.如权利要求11所述的运行时指令重组装置,还包括: 指令检索单元,适于利用所述第一地址查找地址对应表;所述地址对应表用于表示待调度机器指令片段是否具有已保存的重组指令片段; 如果找到相应的记录,指令检索单元还适于调用指令运行环境缓存和恢复单元,恢复所述指令运行环境,并跳转到纪录中的保存地址继续执行; 如果没有找到相应的记录,指令检索单元还适于利用重组指令片段的地址与所述第一地址在地址对应表中建立一条记录。
13.如权利要求11所述的运行时指令重组装置,所述指令重组单元还包括: 指令解析单元,适于利用指令集匹配所述待调度的机器指令片段,得到待处理的目标机器指令; 指令修改单元,适于按照预定的方式,修改所述目标机器指令。
14.如权利要求13所述的运行时指令重组装置,其中,所述目标指令为存储/读取指令; 所述指令修改单元适于修改其中的存储和读取地址为安全存储设备上的地址。
15.如权利要求13所述的运行时指令重组装置,其中,所述目标指令为I/O指令; 所述指令修改单元适于将所述I/O指令中的输入指令全部阻止。
16.如权利要求13所述的运行时指令重组装置,其中,所述目标指令为网络传输指令; 所述指令修改单元适于检验所述网络传输指令中的目标地址对应的远端计算设备是否为安全地址;如果不是,所述指令修改单元适于阻止所述网络传输指令。
17.如权利要求13所述的运行时指令重组装置,所述指令重组单元还包括: 反汇编单元,适于在指令解析单元解析所述待调度的机器指令片段之前,反汇编所述待调度的机器指令片段,生成待调度的汇编指令片段; 汇编单元,适于汇编重组后的汇编指令片段,得到机器码表示的重组指令片段。
【文档编号】G06F21/50GK103677769SQ201210325951
【公开日】2014年3月26日 申请日期:2012年9月6日 优先权日:2012年9月6日
【发明者】汪家祥, 杨潇 申请人:北京中天安泰信息科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1