具有指令签名支持的分布式编译处理制造技术

技术编号:8532630 阅读:127 留言:0更新日期:2013-04-04 15:32
本发明专利技术涉及具有指令签名支持的分布式编译处理。其中,一种用于对编译器提供指令签名支持的编译模块,包括:语言结构识别器和占位符插入组件。该语言结构识别器被配置为在供应至编译器的高级语言源代码中识别指令签名相关的语言结构。占位符插入组件被配置为与编译器交互,从而将基于指令签名相关的语言结构的至少一个指令签名相关的占位符插入由所述编译器基于高级语言源代码所处理的编译代码中。

【技术实现步骤摘要】
具有指令签名支持的分布式编译处理
本申请涉及用于向编译器提供指令签名支持(instruction signature support) 的编译模块,更具体地,涉及在高级语言源代码的编译处理期间处理指令签名相关的信息。
技术介绍
可编程计算单元通常被设计为处理指令序列,以执行特定任务。指令序列也可称 为程序代码。程序代码通常存储在存储器中,并在运行时被提供至计算单元。鉴于信息安 全,可能期望在指令存储于存储器中或从存储器传输至计算单元时保护指令不被分析。另 一方面,如果到达计算单元的指令不同于所需的指令,则可能会在程序代码执行期间发生 错误。由计算单元实际处理的指令和所需指令之间的差异可能有随机的原因,或可能由入 侵者故意引起。在任何情况下,都应及早检测到由改变的指令所造成的错误。控制流检查方法可用于检测由计算单元实际处理的指令和所需指令之间的这种 差异。基于指令签名的控制流检查方法的基本原则是在程序运行期间在校验和(即,签名) 中计算程序运行时所执行的指令总数,并在预定的程序点验证该校验和是否匹配参考值。 校验和与参考值之间的差表明实际程序执行和预计程序执行之间的可能偏差。当创建或编译支持控制流检查的程序时,最常见的控制流检测方法需要所谓的更 新值插入程序中的特定点。例如,如果程序跳变或分支点发生,且两个不同的路径(在不同 指令序列被执行进而导致不同签名的意义上不同)再次合并,由路径执行产生的签名需要 在合并点处是一致的。为此,更新的值插入至少一个路径。分支发生在条件(直接)跳变、间 接跳变、直接和间接函数调用处。此外,在执行将运行期间计算的签名和参考值进行比较的 程序点处需要参考值。这些参考值也需要在适当的程序点处被引入程序。
技术实现思路
本文所述的实施方式提供了一种用于向编译器提供指令签名支持的编译模块 (compiler module)。该编译模块包括语言结构识别器,被配置为在供应至编译器的高级 语言源代码中识别指令签名相关的语言结构;以及占位符插入组件,被配置为与编译器 (compiler)交互,从而将基于指令签名相关的语言结构的至少一个指令签名相关的占位符 插入由编译器基于高级语言源代码而处理的编译代码中。本文所述的其它实施方式提供了一种指令签名生成器,包括用于编译代码的输 入、占位符识别器、签名计算器和占位符替换器。占位符识别器被配置为在编译代码中识别 指令签名相关的占位符。签名计算器被配置为确定针对编译代码中发生所述指令签名相关 的占位符处的程序点的签名值。占位符替换器被配置为基于程序点处的签名值来插入编译 代码段。本文所述的其它实施方式提供了一种编译器接口数据结构,其包括编译指令,其 中至少有一个是编译指令为指令签名相关的占位符。本文所述的其它实施方式提供了一种在高级语言源代码的编译处理中处理指令签名相关信息的方法,该方法包括在高级语言源代码中识别指令签名相关的语言结构; 与编译处理交互,以便将基于指令签名相关的语言结构的至少一个指令签名相关的占位符插入由编译处理基于高级语言源代码所处理的编译代码中。本文所述的其它实施方式提供了一种计算机可读数字存储介质,具有程序代码的计算机程序存储于其上,当在计算机上运行时该程序代码用于执行在高级语言源代码的编译处理期间用于处理指令签名相关的信息的方法,所述方法包括在高级语言源代码中识别指令签名相关的语言结构;与编译处理交互,以便将基于指令签名相关的语言结构的至少一个指令签名相关的占位符插入以高级语言源代码为基础通过编译处理所处理的编译代码中。本文所述的其它实施方式提供了一种产生指令签名的方法,该方法包括确定指令签名相关的占位符应插入编译代码中何处程序位置;确定针对编译代码中发生指令签名相关的占位符处的程序位置的签名值,并在该程序位置处插入编译代码段(其在所确定的签名值的基础上隐式或显式地产生更新)。本领域的技术人员在阅读了以下详细描述并查看附图之后将认识其它的特征和优点。附图说明附图的元件不一定彼此成比例。相同的参考符号表示相应的类似部件。各个所示实施方式的特征可组合,除非它们互相排斥。实施方式描述于附图中,且详细描述如下。图1示出包括条件分支、默认路径、以及非默认路径的指令序列的示意性流程图。图2示出提供指令签名支持的编译处理的示意性流程图。 图3示出编译器以及用于对编译器提供指令签名支持的编译模块的示意性框图。图4说明用于指令签名支持的编译模块和指令签名生成器的效果。图5示出指令签名生成器的示意性框图。图6示出用于处理指令签名相关的信息的方法的示意性流程图。具体实施方式指令流签名通常会提供程序代码的比较强的完整性保护。如图1中可以看出,带有条件分支指令(例如,指令i2)的每个代码序列具有“默认路径”,在图1中经由指令i3和 i4至指令i5处的合并点。对于该“默认路径”,签名S5由静态代码分析器计算。为了处理 “非默认路径”(例如,从指令i2直接到指令i5),在每一个条件分支处执行签名更新,以便该签名与好像进行了默认路径的签名一样。图1中说明了这一点,箭头标记的“更新SI+Λ” 是指按照与在进行默认路径的情况下由指令i3和i4修改的SI相同的方式来修改SI。如果默认路径是唯一路径而从开始到结束没有进行更新,则可以由用户或程序员隐式定义哪个路径是默认路径。一般来说,任何路径都可以是默认路径。实际的程序通常包含带有更新值或参考值的多个程序点。此处,更新值和参考值统称为签名值。签名值插入的位置或程序点被称为签名位置。缩写IS S代表指令流签名 (Instruction Stream Signature)。创建控制流保护代码的一个方法是程序员在他知道的签名位置处将签名值手动插入代码的选定部分。为此,程序员必须自己确定签名值和签名位置。然而,许多编译器和 连接器执行优化步骤和程序代码内的指令序列的修改,这对于程序员是很难预料的。如果程序员自己确定签名值和签名位置,则可能会引起复杂的、容易出错的、重复 的工作流程并会根据能够被插入的签名值的等级进行限制。可能出现的一些限制是-当以高级语言插入签名值时,程序员可能通常仅使用编程语言的语言结构的子 集,用于所有可能的签名值插入。例如,对于在高级编程语言中常用的特定语言结构,并非 所有的签名位置都可从源代码级访问。以下形式的条件分支a) if X>0and x〈lthen1.指令序列Ab) end if1.指令序列B-可能会经常导致两个条件跳变,因为在第一指令中检查两个条件,以到达指令序 列A。然而,好的编译器会避免检查全部这两个条件,以便导致仅一个跳变,因为这会导致平 均50%以上更慢的代码。因此,两个更新值须被插入两个非默认路径。然而,这在源代码级 上是不可能的,因此必须使用另一个程序结构。-对于已经以高级语言写入的代码并不总是能够以汇编语言级插入签名值。许多 编译器直接生成二进制代码(机器语言代码),且汇编级根本不可用。-处于二进制代码级(机器代码级)的签名值的插入会导致指令在程序代码中的偏 移,因此必须相应地更正跳变目的地。这个处理非常复杂,原因在于所有的跳变起点和跳变 目的地都必须进行分析。此外,甚至也可能是跳变或分支指令被取代,原因在于跳变距离偏 移如此多,使得它们超出了二进制代码中所本文档来自技高网
...

【技术保护点】
一种用于对编译器提供指令签名支持的编译模块,所述编译模块包括:语言结构识别器,被配置为在供应至所述编译器的高级语言源代码中识别指令签名相关的语言结构;以及占位符插入组件,被配置为与所述编译器交互,从而将基于所述指令签名相关的语言结构的至少一个指令签名相关的占位符插入由所述编译器基于所述高级语言源代码所处理的编译代码中。

【技术特征摘要】
2011.07.15 US 13/184,1351.一种用于对编译器提供指令签名支持的编译模块,所述编译模块包括 语言结构识别器,被配置为在供应至所述编译器的高级语言源代码中识别指令签名相关的语言结构;以及 占位符插入组件,被配置为与所述编译器交互,从而将基于所述指令签名相关的语言结构的至少一个指令签名相关的占位符插入由所述编译器基于所述高级语言源代码所处理的编译代码中。2.根据权利要求1所述的编译模块,其中,所述签名相关的占位符的所述插入保留了给予所述编译器的原始的所述高级语言代码的逻辑功能。3.根据权利要求1所述的编译模块,还包括数据库接口,被配置为查询包括由所述语言结构识别器和所述占位符插入组件使用的多个可能的指令签名相关的语言结构和相应的指令签名相关的占位符的数据库。4.根据权利要求3所述的编译模块,其中,多个所述可能的指令签名相关的语言结构包括以下各项中的至少一个条件跳变、if-then结构、switch_case结构、while-loop结构、do-while结构和专用指令签名相关的关键字。5.根据权利要求3所述的编译模块,其中,所述数据库还包括至少一个插入规则,用于控制所述占位符插入组件关于所述至少一个指令签名相关的占位符的所述插入。6.根据权利要求1所述的编译模块,其中,所述编译代码是机器语言代码,且其中所述占位符插入组件被配置为选择所述至少一个指令签名相关的占位符,使得所述至少一个指令签名相关的占位符的大小等于在所述编译代码中最终取代所述至少一个指令签名相关的占位符的机器语言指令序列或机器语言指令的大小。7.根据权利要求1所述的编译模块,其中,所述至少一个指令签名相关的占位符是以下各项之一用于参考签名值的占位符、用于签名更新值的占位符、以及用于指令签名相关的指令的占位符。8.根据权利要求1所述的编译模块,还包括占位符信息收集器,被配置为收集有关插入所述编译代码中的指令签名相关的占位符的占位符信息并输出所述占位符信息。9.根据权利要求1所述的编译模块,其中,所述语言结构识别器被配置为识别对其使能所述指令签名支持的受保护的程序代码段,且其中,所述编译模块还包括库调用信息收集器,所述库调用信息收集器被配置为收集与在所述受保护的程序代码段中发生的软件库调用相关的库调用信息,并提供所述库调用信息用于随后的连接处理使用。10.根据权利要求1所述的编译模块,其中,所述语言结构识别器被配置为在对其使能所述指令签名支持的所述高级语言源代码中识别受保护的程序代码段的开始和结束,且其中,所述占位符插入组件被配置为使用相应的受保护段识别的结果,以便激活在所述受保护的程序代码段中插入所述至少一个指令签名相关的占位符,并禁用在非受保护的程序代码段中插入所述至少一个指令签名相关的占位符。11.根据权利要求1所述的编译模块,其中,所述占位符插入组件进一步被配置为验证所述编译器的代码优化是否与所述至少一个指令签名相关的占位符冲突,且在验证到冲突时,阻止所述编译器执行影响所述至少一个指令签名相关的占位符的所述编译代码的优化。12.一种指令签名生成器,包括用于编译代码的输入; 占位符识别器,被配置为在所述编译代码中识别指令签名相关的占位符; 签名计算器,被配置为针对在所述编译代码中发生所述指令签名相关的占位符的程序点确定签名值;以及 占位符替换器,被配置为基于所述程序点处的所述签名值插入编译代码段。13.根据权利要求12所述的指令签名生成器,其中,所述编译代码是机器语言代码和汇编代码之一。14.根据权利要求12所述的指令签名生成器,其中,由所述占位符替换器产生的所述编译代码段在所述编译代码中占用的空间等于所述指令签名相关的占位符所占用的空间。15.根据权利要求12所述的指令签名生成器,其中,所述编译代码段包括处理器指令,其中,所述占位符替换器被配置为从多个处理器指令中选择特定的处理器指令,并在所述特定的处理器指令的基础上产生所述编译代码段。16.根据权利...

【专利技术属性】
技术研发人员:于尔根·迪维奔迪特·加梅尔斯特凡·曼格德
申请(专利权)人:英飞凌科技股份有限公司
类型:发明
国别省市:

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

1