用于确保计算机程序的执行完整性的数据处理布置和方法_2

文档序号:8259372阅读:来源:国知局
使得考虑信息因为程序指令由于分支被采用而被跳过或执行而排除签名的更新的差异。
[0035]根据一个实施例,指示待执行的多个程序指令的下一程序指令的多个程序指令的程序指令是条件分支,且关于该指示的信息是分支将不被采用的信息,且签名确定布置被配置成考虑信息,使得考虑信息因为程序指令由于分支未被采用而被跳过或执行而排除签名的更新的差异。
[0036]签名是例如指令流签名(ISS)。
[0037]根据一个实施例,处理器包括第一程序流程确定器,其被配置成对于指示待执行的多个程序指令的下一程序指令的多个程序指令的程序指令将关于该指示的信息提供到处理器;以及第二程序流程确定器,其被配置成对于程序指令将关于该指示的信息提供到签名确定布直。
[0038]例如,第一程序流程确定器被配置成将关于该指示的信息提供到处理器的指令取出单元。
[0039]第一程序流程确定器和第二程序流程确定器例如被配置成独立于彼此确定指示。
[0040]例如,第一程序流程确定器是第一算术逻辑单元(ALU),而第二程序流程确定器是第二算术逻辑单元。
[0041]可使用一个或多个电路来实现数据处理布置的部件。在实施例中,“电路”可被理解为任何类型的逻辑实现实体,其可以是专用电路或执行存储在存储器中的软件、固件或其任何组合的处理器。因此,在实施例中,“电路”可以是硬布线逻辑电路或可编程逻辑电路,诸如可编程处理器,例如微处理器(例如复杂指令集计算机(CISC)处理器或精简指令集计算机(RISC)处理器)。“电路”也可以是执行软件(例如任何种类的计算机程序、例如使用诸如例如Java的虚拟机代码的计算机程序)的处理器。将在下面更详细描述的相应功能的任何其它种类的实现也可被理解为根据替换的实施例的“电路”。
[0042]数据处理布置例如执行如图2所示的方法。
[0043]图2示出流程图200。
[0044]流程图200图示用于确保计算机程序的执行完整性的方法。
[0045]在201,存储为计算机程序预先确定的参考签名。
[0046]在202,执行包括多个程序指令的计算机程序。
[0047]在203,确定由处理器执行的程序指令的签名,其中当执行指示待执行的多个程序指令的下一程序指令的多个程序指令的程序指令时,在签名的确定中考虑关于该指示的信肩、O
[0048]在204,当计算机程序被完全执行时,检查所确定的签名是否等于参考签名。
[0049]应注意,根据一个实施例,203与204并行地被执行,即,签名在计算机程序的执行过程中被确定(例如根据所执行的程序指令连续地被更新)。
[0050]应注意,在数据处理器布置100的上下文中描述的实施例对如在图2中图示的方法是类似地有效的,反之亦然。此外,在数据处理器布置100的上下文中描述的实施例的特征可以以任何组合被使用。
[0051]在下文中,更详细描述了实施例。
[0052]图3示出根据一个实施例的数据处理布置300。
[0053]数据处理布置300包括存储计算机程序的多个程序指令302的存储器301。
[0054]由数据处理器布置300下一个执行的程序指令302由指令取出单元303取出并被传递到指令解码器304。指令解码器304对程序指令302解码并相应地控制处理单元305。例如,它根据程序指令302为处理单元产生控制信号,使得处理单元305执行程序指令302。这可例如涉及从存储器301取出待处理的数据以及还将从处理得到的数据写回到存储器301。处理单元305例如是执行单元。处理单元305包括(至少)两个处理元件306,例如ALU(算术逻辑单元)。换句话说,处理单元是例如双ALU执行单元。
[0055]例如,如果程序指令302是条件分支或间接分支或转移,则程序指令302的执行的结果可确定待执行的下一程序指令302。在这样的情况下,待执行的下一程序指令302的指示(例如对在存储器301中的待执行的下一程序指令302进行寻址的存储器地址)被反馈到指令取出单元303。
[0056]此外,在这样的情况下,关于哪个下一程序指令已经被指示的信息307被提供到签名确定器308。进一步给签名确定器308提供关于通过指令取出单元303从存储器301取出的指令的信息309。
[0057]对于由指令取出单元303取出的每一个指令,签名确定器308更新用于如所执行的计算机程序的签名(从某个初始值开始)。当执行完成时,它比较所确定的签名与计算机程序的参考签名(或与多于一个被允许的参考签名)。如果所确定的签名等于参考签名(或被允许的参考签名中的任何一个),则程序的执行完整性被确认。
[0058]一个或多个参考签名例如提前由软件工具,S卩,由例如脱机工具确定。
[0059]在下文中,关于图4给出签名的确定的示例。
[0060]图4图示在没有分支的程序流程中的签名确定。
[0061]在本示例中,计算机程序包括六个指令il到i6。签名确定以初始值SO开始。对于第一程序指令il,签名确定器308根据预先确定的签名确定函数Sig (S卩,Sl=Sig(S0,il)=Sig(S0, instruct1n_opcode_il))、基于以前的签名SO和关于指令il (例如在存储器301中的它的二进制表示,例如它的操作码instruct1n_opcode_il)的信息309来确定更新的签名SI。
[0062]类似地,对于第二指令i2,根据函数Sig (B卩,S2=Sig(Sl,i2))、基于以前的签名SI和关于指令i2的信息309来确定更新的签名S2。
[0063]这个过程继续,直到对于第六指令i6,已经根据S6=Sig(S5,?6)来确定签名的第六更新S6。这个值S6可接着与参考签名比较以确定程序是否已经被正确地执行(或者在更多的指令跟随的情况下可被进一步更新)。
[0064]假设从SI到S5的总更新是特定值Δ,即,S5=S1+ Δ。
[0065]在下文中,假设第二指令i2是在特定条件被满足的情况下可分支到i6的条件分支。在这种情况下,图4的示例可被看作是分支未被采用的情况,S卩,条件未被满足。在图5中图示分支被采用的情况。
[0066]图5图示在有条件分支的程序流程中的签名确定。
[0067]在这种情况下,假设作为i2的结果,i6的分支被采用。对应地,处理单元305向指令取出单元303提供这个信息,使得指令取出单元303接着取出i6。此外,分支已经被采用的信息作为关于所指示的下一程序指令(在这种情况中是i6)的信息307被馈送到签名确定器308。在图5中被称为branch_taken的这个信息由签名确定器308考虑。也就是说,对于第二指令i2,签名确定器308基于S1、?2和信息branch_taken来确定签名S2,即,S2=Sig(Sl, i2, branch_taken)。
[0068]因此,Sig(SI, i2, branch_taken)以例如由软件工具提前预先确定的这样的方式被限定,使得Sig(Sl,i2, branch_taken)=Sl+A。例如,软件工具确定Δ,因为它在图4的情况中产生,即,从根据i2、i3、i4和i5的更新(换句话说,从关于分支路径的信息)产生,并限定Sig(Sl, i2, branch_taken)以将这个Δ添加到以前的签名SI。应注意,软件工具也可将对应的指令插入程序中,例如,如果分支被采用则被执行的指令,且签名驱动器308根据该指令来将签名增加Δ。
[0069]因此,在指令i6之前的签名的状态在图4所示的情况和图5所示的情况中都等于Sl+Δ。因此,签名是在指令i6之前是有效的,如果:
-分支条件未被满足(即,没有branch_taken被输入到签名确定器30
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1