用于保护调用栈中的数据的信息处理装置和方法
【专利摘要】一种信息处理装置(10)包括控制单元(12)、散列单元(16)和比较单元(18)。控制单元(12)被布置成运行程序并将程序的至少一个流控制信息存储在调用栈中。散列单元(16)被布置成响应于程序的第一上下文变化,通过将散列函数应用于选择的数据来生成第一散列值,选择的数据包括调用栈的至少一个或多个选择的项,第一上下文变化包括程序的第一进程或线程的终止或中断。控制单元(12)还被布置成仅当散列单元生成第一散列值的时候,才启动或恢复程序的第二进程或线程。散列单元(16)还被布置成响应于第二上下文变化,通过将散列函数再次应用于选择的数据来生成第二散列值,第二上下文变化包括第二进程或线程的终止或中断。比较单元(18)被布置成确定第一散列值和第二散列值是否相同。
【专利说明】用于保护调用栈中的数据的信息处理装置和方法
【技术领域】
[0001]本发明涉及信息处理装置、用于在信息处理装置上运行程序的方法以及计算机程序广品。
【背景技术】
[0002]信息处理装置是能够运行程序的装置。程序可以是数字数据操作的任何序列。程序可以由驻留在装置的可编程或不可编程存储器单元中的指令来定义。运行程序可能涉及维护包括了可变数目堆栈项的调用栈。
[0003]堆栈可以被定义为一序列数据项,该序列数据项可以通过在序列末尾附加新项被增加以及通过从序列末尾移除项被减小。堆栈可以例如借助于后进先出(LIFO)缓冲器被实现。将项添加到堆栈也被称为将项推入到堆栈。从堆栈移除项也被称为从堆栈弹出项。
[0004]注意,程序可具有嵌套结构。例如,程序可包括调用各种子例程,并且这些子例程可能进而包括调用子例程,而这进而又可能包括调用子例程等等。每当子例程被调用的时候,返回地址就可被推入到堆栈,该返回地址指示在执行子例程之后要被执行的指令。当子例程已经被终止并且返回地址已从堆栈中读取的时候,返回地址可以从堆栈中弹出。
[0005]调用栈是堆栈的实例。调用栈尤其可包括关于程序的活动进程、线程或子例程的信息。调用栈可因此被定义为包含了流信息的堆栈。因此,调用栈的内容对信息处理装置的正常运行至关重要。例如,返回地址中的任何错误可能导致信息处理装置处理与信息处理装置的存储器单元中的当前数据值完全无关的指令。通常,调用栈中的错误可能导致信息处理装置崩溃。
【发明内容】
[0006]本发明提供了信息处理装置、方法以及计算机程序产品。
[0007]本发明的具体实施例在从属权利要求中被阐明。
[0008]参照下文中描述的实施例,本发明的这些或其它方面将会很明显并且被阐述。
【专利附图】
【附图说明】
[0009]参照附图,仅仅通过举例的方式,本发明的进一步细节、方面和实施例将被描述。在附图中,类似的符号被用于表示相同的或功能相似的元素。为了简便以及清晰,附图中的元素不一定按比例绘制。
[0010]图1示意性地示出了信息处理装置的实施例的例子。
[0011]图2示出了用于保护调用栈的方法的实施例的例子的流程图。
[0012]图3示意性地示出了在执行中断服务例程之后的调用栈的例子。
[0013]图4示意性地示出了在执行中断服务例程之后的调用栈的例子。
[0014]图5示意性地示出了微处理器的例子。
【具体实施方式】
[0015]由于本发明说明的实施例可能大部分是通过使用本领域所属技术人员所熟知的电子元件和电路被实施,所以不会在比上述所说明的认为有必要的程度大的任何程度上解释细节。对本发明基本概念的理解以及认识是为了不混淆或偏离本发明所教之内容。
[0016]图1示意性地示出了信息处理装置10的例子。信息处理装置10可例如包括控制单元12、存储器单元14、散列单元16、比较单元18、错误处理单元20、备用单元22和选择单元24。如图所示,单元12、14、16、18、20、22和24可彼此之间适当地互连。这些单元的每个单元可由硬件或软件或两者的组合来实现。例如,存储器单元14可以是包含了用于控制单元12的可执行指令的物理数据存储单元。而且,单元16、18、20、22和24可由驻留在存储器单元14中的指令来实现。
[0017]每个单元16、18、20、22和24可因此以存储在存储器单元14中的软件模块的形式来实现。替代地,这些单元中的每个可例如由专用硬件电路提供。信息处理装置10尤其可以是单一集成电路,诸如在单一集成电路封装中的一个或多个管芯上提供的通用微处理器、微控制器、数字信号处理器或其它类型的微处理器。
[0018]参照图5,例如,其中所示的集成电路的例子是微处理器100。微处理器可以例如是应用程序处理器,诸如多媒体处理器。所示的微处理器100包括几个模块101-108。如图所示,总线104将不同模块彼此连接,并允许信息在模块之间的交换。在图5的例子中,模块包括单一处理核心或中央处理单元,CPU 101。然而,微处理器可能具有两个或多个处理核心。模块还可能包括提供了硬件加速的一个或多个硬件加速器102,例如用于评估在附图中用#_acc所示的散列函数的专用硬件单元。散列函数的输入数据也可被称为受保护数据。如图所示,微处理器还包括存储器105,核心101的可执行指令被存储在存储器105中,它使核心101执行参照图1所描述的信息处理装置10的各单元的功能。模块可包括其它模块,以及例如在所示的例子中的时钟系统103,时钟系统103在微处理器或直接存储器存取模块108内提供并控制时钟。如图所示,微处理器可能具有其它外围模块106、107以例如提供到微处理器外部的组件的连接。
[0019]控制单元12可以运行程序并将程序的至少流控制信息存储在调用栈中。该调用栈可例如被保持在存储器单元14中。术语程序应当在广义上被理解的。例如,程序可包括操作系统,虽然不一定是这种情况。替代地或此外,程序可以包括可以在操作系统下运行的一个或多个应用。程序因此可例如在一个或多个操作系统和用于在有效操作系统下运行的一个或多个应用、任务、进程或线程。应用、任务、进程或线程可被概括地称为进程。进程中的从有效操作系统流动到另一个有效操作系统或从一个进程流动到另一个进程的切换被称为上下文切换。上下文切换的另一个例子是由中断服务例程执行的有效程序内的正常进程流的中断。中断服务例程可以是一种特定类型的程序,其可以响应于中断信号被执行。中断可以例如被用于执行时间关键操作,诸如以对来自硬件的输入或用户输入作出响应。
[0020]上下文切换通常可以涉及损坏调用栈中的数据的风险,除非保证新进程(即由上下文切换启动的进程)不会修改在新进程之前被推入到调用栈的任何项。通常,新进程包含例如通过删除或修改调用栈的项可能损坏调用栈的错误或恶意指令可能会有一定的风险。当新进程已被终止的时候,因此可能会存在信息处理装置10继续使用损坏的调用栈进行操作的风险。在所示的例子中,控制单元12、散列单元16和比较单元18被布置成降低这种风险,从而使信息处理装置10更安全。
[0021]散列单元16可以被布置成响应于所述程序的第一上下文变化,通过将散列函数应用于选择的数据来生成第一散列值。选择的数据可以例如包括调用栈的一个或多个选择的项。选择的项可以包括在第一上下文变化时刻的整个调用栈或只有特定项。整个调用栈可以因此受到保护。第一上下文的变化可以例如包括程序的第一进程或线程的终止或中断。在这个例子中,控制单元12可以被布置成仅当单列单元生成第一散列值的时候启动或恢复程序的第二进程或线程。
[0022]第二进程或线程可以例如是中断服务例程。第二进程或线程替代地可以是任何其它类型的进程或线程,诸如由用户或任务控制单元触发的应用。
[0023]散列函数是数学函数,其在一组输入数据上定义并且具有对于两个不同或仅仅稍微不同的输入数据值极不可能或不可能是相同的函数值(散列值)。数学术语表达:散列函数是,内射或接近完全内射,将源自一组具有很多或甚至无穷多个成员的值投射到源自一组具有固定数目,例如很少成员的值的函数。
[0024]校验和是散列函数的例子。评估对于第一输入数据或第二输入数据是相同的散列函数从而给确定第一输入数据和第二输入数据是否相同提供了相当可靠的手段。类似地,通过将相同的散列函数应用于输入数据,并在稍后的时间点再次应用它,可以确定输入数据是否已改变。散列函数可以例如是循环冗余校验(CRC)函数,诸如CRC32。CRC32可以尤其被选择为散列函数,因为它可以容易地可用在加速器上。
[0025]如上所述,控制单元12可以被布置成仅当散列单元生成第一散列值的时候,例如在已经从散列单元接收到对应的通知之后,启动或恢复第二进程或线程。因此,可以确保在存在选择的数据在上下文变化之后被损坏的风险之前生成选择的数据的散列值。散列单元16还可被布置成响应于第二上下文变化,通过将散列函数再次应用于选择的数据来生成第二散列值。第二上下文变化可以包括第二进程或线程的终止或中断。
[0026]比较单元18可以被布置成确定第一散列值和第二散列值是否相同,并且例如被连接到散列单元以接收由此生成的散列值。因此,可以获得关于选择的数据是否已在第一上下文变化和第二上下文变化之间被损坏的指示。如果第二散列值不同于第一散列值,则这肯定表明选择的数据或第一散列值或两者已被第二进程或线程修改。然而,如果第一散列值和第二散列值相同,则选择的数据在第一上下文变化之后已被修改的概率可以预计非常低。比较单元可以例如向错误处理单元输出指示该确定的结果的通知。
[0027]如果比较单元已确定第二散列值不同于所述第一散列值,则错误处理单元20可以被布置成执行以下动作中的至少一个:(i)发出错误警告(例如以人类感知的形式),
(ii)停止控制单元,(iii)将用于执行第二进程或线程的指令标记为有害的。这些动作可以使信息处理装置或用户能够采取适当的动作,诸如从信息处理装置10,例如从存储器单元14删除第二进程或线程的指令或校正这些指令。
[0028]备用单元22可以被布置成响应于第一上下文变化,例如响应于诸如从控制单元12接收到合同变更通知,生成选择的项的备用副本。该控制单元还可以被布置成仅当所述备用单元生成所述备用副本的时候才启动或恢复所述第二过程或线程,并且例如仅在例如从备用单元接收到备用完成通知之后启动或恢复。备用单元还可以被布置成当比较单元已确定第二散列值不同于第一散列值的时候,通过将备用副本复制到调用栈来恢复选择的项的原始内容。
[0029]散列单元16还可以被布置成通过将散列函数应用于备用副本来生成第三散列值,并且比较单元18可以被布置成还确定第一散列值和第三散列值是否相同。当比较单元18确定第二散列值和第一散列值相同时,第二散列值所基于的数据可以被宣布为有效或被选择以供将来使用。另一方面,如果比较单元18确定第三散列值和第一散列值相同,则第三散列值所基于的数据可以被宣布为有效或被选择以供将来使用。信息处理装置10可以因此被制成更强健以防调用栈损坏。
[0030]选择单元24可以被布置成生成识别了选择的堆栈项的选择数据。该选择数据可以例如被给定为比特掩码,其中每一比特指示调用栈的选择的项,换句话说,项被包括在至散列函数的输入数据中。该比特掩码可以例如被包括在由例如控制单元12管理的任务控制块中。任务控制块是用于各种操作系统以管理特定进程的数据结构。选择的数据,即至散列函数的输入数据还可以包括选择数据,例如如果选择数据以比特掩码的形式被提供的比特掩码。换句话说,可以基于选择的堆栈项和选择数据来评估散列函数。选择数据因此可以被包括在受保护的数据中。
[0031]散列单元还可以被布置成响应于第一上下文变化,通过将补充散列函数应用于第一散列值和选择数据来生成第一补充散列值;以及响应于所述第二上下文变化,通过将所述补充散列函数再次应用于所述第一散列值和所述选择数据来生成第二补充散列值。所述比较单元还可以被布置成确定第一补充散列值和所述第二补充散列值是否相同。补充散列函数可以是CRC函数,例如CRC 32。
[0032]散列单元16可以被布置成例如将选择的项的副本推入到调用栈,使得这些副本组成调用栈的连续项。这可以使控制单元12能够以有效的方式计算出选择的项的散列值。
[0033]信息处理装置可以执行一种用于运行程序的方法。例如,一种方法的执行可以参照图2被进一步描述。该方法可以包括运行程序并将程序的至少流控制信息存储在调用栈中。响应于程序的第一上下文变化,通过将散列函数应用于选择的数据可以生成第一散列值(框SI)。选择的数据可以包括调用栈的至少一个或多个选择的项。第一上下文变化可以包括程序的第一进程或线程的终止或中断。仅当第一散列值被生成的时候,才可以启动或恢复程序的第二进程或线程(框S2)。响应于第二上下文变化,通过将散列函数再次应用于选择的数据可以生成第二散列值(框S3)。第二上下文变化可以例如包括程序的第二进程或线程的终止或中断。然后,可以确定第一散列值和第二散列值是否相同(框S4)。如果发现相同,则流程可以返回到步骤SI,并且在框S2中可以运行另一项任务或ISR,或者可以恢复在第一上下文变化之前的进程。然而,如果发现第一散列值和第二散列值不同(框S4),可以触发适当的动作(框S5),诸如生成错误信号、用原始堆栈数据的副本替代可能损坏的堆栈数据、停止或重新启动信息处理装置或将最近的进程或线程(即负责堆栈损坏的进程或线程)指示给例如控制单元12或用户。
[0034]散列单元16可以被布置成通过利用调用栈来计算出第一散列值和第二散列值。这可能是特别有效的,因为受保护的数据被包括在调用栈中。散列单元16可以例如被布置成将用于这些计算中的所有或仅一些临时数据推入到堆栈。
[0035]图3示意了图示了根据时间点的例子的调用栈,其中第二散列值(调用栈的项编号13)在该时间点生成。在这个例子中,调用栈被示出为在向下的方向上生长。换句话说,新项可以在堆叠的底部被添加。所示的调用栈可以如下被生成。在初始状态下,根据这个特定例子,调用栈包括分别包括了字O至4的项编号I至5。在这个例子中的选择的项是编号为0、1和3的字。这些字可以例如借助于比特掩码被选择,其中该比特掩码将一的值分配给字0、1和3以及将O的值分配给字2和4。散列单元16可以被布置成将选择的字推入到调用栈,即将副本项1、2和4推入到调用栈的末端。其效果是选择的字现在在调用栈的连续项6、7和8中是可用的。然后,散列单元16可以通过将散列函数应用于这些堆栈项中而从堆栈项6、7和8中的字0、1和3计算出第一散列值。散列函数可以例如是校验和,诸如CRC32。散列单元16可以将由此生成的第一散列值推入到调用栈,使得第一散列值作为调用栈的项9现在是可用的。然后,控制单元12可以执行新进程或线程,例如中断服务例程,正如调用栈的项9和10之间的线(这条线不是调用栈的一部分)表示的。当这个线程或进程已完成或停止或中断的时候,散列单元16可以将堆栈项6、7和8的副本推入到调用栈,以便提供选择的字0、1和3的副本。字编号0、1和3的副本从而作为堆栈项10、11和12是可用的,并且散列单元16可以通过将散列函数再次应用于包括了副本字编号O、I和3的堆栈项10、11和12而计算出第二散列值。散列单元16还可以将由此计算出的第二散列值(例如,项11、12和13的校验和的结果)推入到堆栈。第一散列值和第二散列值因此分别作为项9和13是可用的,并且可以被比较以便获得关于堆栈项6、7和8的内容是否已改变的指示。
[0036]参照图4中示意性地示出的调用栈的例子描述了这种方法的变体。正如在图3中,当前的调用栈可以包括,例如,编号为O至4并存储为调用栈的项I至5的字。正如在上面的例子中,每个字可以例如代表返回地址或一些其它类型的流控制信息。在这个例子中,使用正如上述描述的比特掩码,字0、1和3被选择为受保护。选择的字,即堆栈的项1、2和4的内容可以被推入到堆栈,以便使该数据在堆栈的连续项6、7和8中是可用的。然后,散列单元16可以,例如通过估算项6、7和8的校验和生成选择的字的第一散列值。散列单元16还可以将用于指定为受保护的字的选择数据推入到堆栈,随后在那里它作为项10是可用的。然后,散列单元16可以计算出项9和10的补充散列值,S卩,用于第一散列值(项9)和选择数据,例如比特掩码,(第10项),并将由此获得的补充散列值推入到堆栈,在那里它作为项11是可用的。
[0037]然后,控制单元12可以运行第二进程或线程。第二进程或线程可以例如是中断服务例程。当第二进程或线程已被终止或中断的时候,散列单元16可以将堆栈的项9和10的副本推入到堆栈,使得第一散列值和选择数据然后作为连续项12和13是可用的。散列单元16然后可重新评估项12和13的散列函数以生成第二散列值。第一补充散列值和第二补充散列值然后被比较以获得关于第一散列值(在第9项中)和第二散列值(在第10项中)是否已被修改的指示。如果发现第一补充散列值和第二补充散列值不同,则可以采取参照图2和3在上述描述的错误动作。否则,即,当发现第一补充散列值和第二补充散列值相同的时候,项12、13和14可以从堆栈中弹出并且分别包括了字0、1和3的项6、7和8的副本可以被推入到堆栈(未示出)。然后,散列单元16将散列函数再次应用于字0、1和3的副本以生成第二散列值。然后,比较单元18可以确定第一散列值(在第9项中)和新生成的第二散列值(未示出)是否相同。如果它们不相同,则可以采取参照图2或3在上述描述的适当的错误动作。
[0038]本发明还可以在用于在诸如计算机系统的可编程装置上运行的计算机程序中被实现,至少包括用于当在诸如计算机系统或使得可编程的装置能够执行根据本发明的设备或系统的功能的可编程的装置上运行时,执行根据本发明的方法步骤的代码部分。
[0039]计算机程序是一系列指令,诸如特定应用程序和/或操作系统。计算机程序可以例如包括以下中的一个或多个:子例程、函数、程序、对象方法、对象实现、可执行的应用、小程序、小服务程序、源代码、对象代码、共享库/动态装载库和/或设计用于在计算机系统上的执行的其它指令序列。
[0040]计算机程序可以在计算机可读存储介质上被内部地存储或经由计算机可读传输介质传输到计算机系统。所有或者一些计算机程序可以被永久地、可移除地提供在计算机可读介质或远程地耦合到信息处理系统。计算机可读介质可以包括,例如但不限于任何数目的以下:包括磁盘和磁带存储介质的磁存储介质;光学存储介质,诸如光盘介质(例如,CD-R0M、CD-R等等)以及数字视盘存储介质;非易失性存储器存储介质,包括基于半导体存储器单元,诸如FLASH存储器、EEPROM、EPROM、ROM ;铁磁数字存储器;MRAM ;易失性存储介质,包括寄存器、缓冲器或缓存、主存储器、等等;以及数字传输介质,包括计算机网络、点对点通信设备、以及载波传输介质,仅举几例。
[0041]计算机处理通常地包括执行(运行)程序或程序的一部分,现有的程序值和状态信息,以及通过操作系统用于管理处理的执行的资源。操作系统(OS)是管理一台计算机的资源共享以及提供给程序员用于访问那些资源的界面的软件。操作系统处理系统数据和用户输入,以及通过分配和管理任务以及内部系统资源作为系统对用户和程序的一项服务响应。
[0042]计算机系统可以例如包括至少一个处理单元、关联存储器和大量的输入/输出(I/O)设备。当执行计算机程序时,计算机系统根据计算机程序处理信息并且经由I/O设备产生所得到的输出信息。在这方面,应看到在上文中,术语“计算机”已被用于通过包括任何可编程或不可编程信息处理系统。不可编程计算机的例子是能够执行程序的装置,其中该程序在硬件,例如在逻辑电路或在永久附着于微处理器的不可修改的存储器中被实施。可编程信息处理系统可以例如是一部移动电话、嵌入式自动系统、通用计算机、网络服务器或其它可编程装置。
[0043]在前面的说明中,参照本发明实施例的特定示例已经对本发明进行了描述。然而,很明显,在不脱离如所附权利要求中所一个或多个述的本发明的更宽精神及范围的情况下,可做出各种修改和变化,它因此并不限于上述显示或描述的特定例子。例如,在图5的例子中,指令被存储在片上存储器105中,然而,这些可以替代地或者或此外被存储在通过外围107连接到微处理器的片外存储器中。
[0044]如在此讨论的连接可以是适于例如经由中间设备传输来自或去往相应的节点、单元或设备的信号的任何类型的连接。因此,除非暗示或另外表明,所述连接例如可以是直接连接或间接连接。所述连接可以被图示或描述为涉及单一连接、多个连接、单向连接、或双向连接。然而,不同实施例可以改变连接的实现。例如,可以使用单独单向连接而不是双向连接,并且反之亦然。而且,多个连接可以被替换为连续地或以时间复用方式传输多个信号的单一连接。同样地,携带多个信号的单一连接可以被分离成携带这些信号的子集的各种不同的连接。因此,存在用于传输信号的许多选项。
[0045]本领域技术人员将认识到:逻辑块之间的界限仅仅是说明性的并且替代实施例可以合并逻辑块或电路元件或在各种逻辑块或电路元件上强加替代的分解功能。因此,应了解,在此描述的架构仅仅是示例性的,并且事实上可以实现实现相同功能的很多其它架构。例如,散列单元和比较单元可以被集成在控制单元12中或连接到存储器单元14的存储器管理单元(MMM)(未示出)。
[0046]为了实现相同功能的任何组件的布置是有效地“关联”使得所需的功能得以实现。因此,在此组合以实现特定功能的任何两个元件可以被看作彼此“相关联”使得所需的功能得以实现,而不论架构或中间元件。同样地,如此关联的任何两个组件还可以被认为是彼此被“可操作连接”或“可操作耦合”以实现所需的功能。
[0047]此外,本领域所属技术人员将认识到以上描述的操作之间的界限只是说明性的。多个操作可以组合成单一的操作,单一的操作可以分布在附加操作中并且可以至少部分地在时间上重叠地执行操作。而且,替代实施例可以包括特定操作的多个示例,并且操作的顺序在各种其它实施例中可以更改。
[0048]又如,示例或其中的一部分可以诸如以任何合适类型的硬件描述语言被实现为物理电路的软或代码表示,或被实现为能够转化成物理电路的逻辑表示的软或代码表示。
[0049]此外,本发明不限于在非程序化硬件中实现的物理设备或单元,但也可以应用在可编程的设备或单元中。这些设备或单元通过按照合适的程序代码操作能够执行所期望的设备功能,诸如主机、微型计算机、服务器、工作站、个人计算机、笔记本、个人数字助理、电子游戏、汽车和其它嵌入式系统、手机和各种其它无线设备,在本申请中通常表示为“计算机系统”。
[0050]然而,其它修改、变化和替代也是可能的。说明书和附图相应地被认为是从说明性的而不是严格意义上来讲的。
[0051]在权利要求中,放置在括号之间的任何参照符号不得被解释为限制权利要求。单词“包括”不排除除了权利要求中列出的那些之外的其它元件或步骤的存在。此外,如在此使用的词语“一”或“一个”被定义为一个或不止一个。而且,即使当同一权利要求包括介绍性短语“一个或多个”或“至少一个”以及诸如“一”或“一个”的不定冠词时,在权利要求中诸如“至少一个”以及“一个或多个”的介绍性短语的使用也不应该被解释成暗示通过不定冠词“一”或“一个”引入的其它权利要求元素将包括这样介绍的权利要求元素的任何特定权利要求限制成仅包含这样的元素的发明。对于定冠词的使用也是如此。除非另有说明,使用诸如“第一”以及“第二”的术语来任意地区分这样的术语描述的元素。因此,这些术语不一定旨在指示这样的元素的时间或其它优先次序。在相互不同的权利要求中记载某些措施的事实并不指示这些措施的组合不能被用于获取优势。
【权利要求】
1.一种信息处理装置(10)包括: 控制单元(12),所述控制单元(12)被布置成运行程序并将所述程序的至少流控制信息存储在调用找中; 散列单元(16),所述散列单元(16)被布置成响应于所述程序的第一上下文变化,通过将散列函数应用于选择的数据来生成第一散列值,所述选择的数据包括所述调用栈的一个或多个选择的项,所述第一上下文变化包括所述程序的第一进程或线程的终止或中断; 所述控制单元(12)还被布置成仅当所述散列单元生成所述第一散列值的时候,才启动或恢复所述程序的第二进程或线程; 所述散列单元(16)还被布置成响应于第二上下文变化,通过将所述散列函数再次应用于所述选择的数据来生成第二散列值,所述第二上下文变化包括所述第二进程或线程的终止或中断;以及 所述信息处理装置还包括: 比较单元(18),所述比较单元(18)被布置成确定所述第一散列值和所述第二散列值是否相同。
2.根据权利要求1所述的信息处理装置,还包括错误处理单元(20),所述错误处理单元(20)被布置成当所述比较单元已确定所述第二散列值不同于所述第一散列值的时候,执行以下动作中的至少一个: 发出错误警告;以及 停止所述控制单元。
3.根据权利要求1或2中的任何一项所述的信息处理装置,还包括备用单元(22),所述备用单元(22)被布置成响应于所述第一上下文变化,生成所述选择的项的备用副本,其中所述控制单元被布置成仅当所述备用单元生成所述备用副本的时候,才启动或恢复所述第二进程或线程。
4.根据权利要求3所述的信息处理装置,其中所述备用单元被布置成当所述比较单元已确定所述第二散列值不同于所述第一散列值的时候,通过将所述备用副本复制回到所述调用栈来恢复所述选择的项的原始内容。
5.根据前述权利要求中的任何一项所述的信息处理装置,其中所述第二进程或线程是中断服务例程。
6.根据前述权利要求中的任何一项所述的信息处理装置,其中所述散列函数是循环冗余校验(CRC)函数。
7.根据前述权利要求中的任何一项所述的信息处理装置,包括选择单元(24),所述选择单元(24)被布置成生成识别了所述选择的堆栈项的选择数据。
8.根据权利要求7所述的信息处理装置,其中所述选择的数据还包括所述选择数据。
9.根据权利要求7或8所述的信息处理装置,其中所述散列单元还被布置成响应于所述第一上下文变化,通过将补充散列函数应用于所述第一散列值和所述选择数据来生成第一补充散列值;以及响应于所述第二上下文变化,通过将所述补充散列函数再次应用于所述第一散列值和所述选择数据来生成第二补充散列值,以及 所述比较单元(18)还被布置成确定所述第一补充散列值和所述第二补充散列值是否相同。
10.根据权利要求1至9中的任何一项所述的信息处理装置,其中所述散列单元被布置成将所述选择的项的副本推入到所述调用栈,使得所述选择的项的所述副本是所述调用栈的连续项。
11.根据权利要求1至9中的任何一项所述的信息处理装置,其中所述选择的项包括在所述第一上下文变化时刻的整个堆栈。
12.根据前述权利要求中的任何一项所述的信息处理装置,其中所述程序包括操作系统。
13.根据前述权利要求中的任何一项所述的信息处理装置,其中所述信息处理装置是集成电路。
14.一种用于在信息处理装置上执行程序的方法,包括: 在所述信息处理装置上运行所述程序; 将所述程序的至少流控制信息存储在调用栈中; 响应于所述程序的第一上下文变化,通过将散列函数应用于选择的数据来生成第一散列值,所述选择的数据包括所述调用栈的一个或多个选择的项,所述第一上下文变化包括所述程序的第一进程或线程的终止或中断(SI); 仅当所述第一散列值已被生成的时候,才启动或恢复所述程序的第二进程或线程(S2); 响应于第二上下文变化,通过将所述散列函数再次应用于所述选择的数据来生成第二散列值,所述第二上下文变化包括所述第二进程或线程的终止或中断(S3);以及确定所述第一散列值和所述第二散列值是否相同(S4)。
15.一种用于在可编程设备上运行的计算机程序产品,至少包括当在可编程设备上运行的时候,用于执行一种根据权利要求14所述的方法的步骤的代码部分。
【文档编号】G06F11/08GK104246693SQ201280072519
【公开日】2014年12月24日 申请日期:2012年4月20日 优先权日:2012年4月20日
【发明者】亚历山德鲁·波罗萨努 申请人:飞思卡尔半导体公司