强加语言子集的方法技术

技术编号:10075370 阅读:137 留言:0更新日期:2014-05-24 04:38
本发明专利技术涉及强加语言子集的方法。一种操作数据处理系统以便在编译程序中检查对规则的集合的违反的方法,该违反不构成生成编译程序的编译器检测的违反。该方法包括获取依据程序的反编译表示中的规则定义的一个限制规则集。该方法还包括将编译程序反编译成定义该限制规则集的编译程序的反编译表示,在编译程序的反编译表示中检查对该限制规则集的违反,以确定是否违反了任一规则,以及提供指示违反了规则之一的输出。

【技术实现步骤摘要】

本专利技术涉及强加语言子集的方法
技术介绍
计算机程序通常用高级语言编写,该高级语言使用户可以使用广泛的指令和非常自由地编写包含相对较少限制的代码。许多程序依赖于由第三方编写的类的库。程序员通常直接使用这些例程或在库中写入类的子类。库例程的作者不能控制在使用该库的程序员定义的子类中编写的代码。随着计算机程序越来越复杂,将可以编写的代码的至少一部分限制为更一般语言的子集是有用的状况越来越多。例如,考虑包含并行运行在计算机上的两个线程的程序。考虑两个线程在每个线程内使用相同全局变量,以及在执行线程期间可以改变该变量的情况。由于线程不能检测变量的变化,所以如果线程之一假设变量的数值在执行那个线程期间不变,则可能会出问题。编写线程的语言通常使程序员可以编写出假设在执行线程期间变量不变的代码。这样的代码在两个并行运行线程的背景下显然是危险的。因此,将可以在这种情况下编写的代码限制成不依赖于在执行线程期间保持不变的全局变量的代码是有利的。例如,可以将代码限制成不允许引用执行并行线程的子类中的任何非常数全局变量。一般说来,将包括类的集合的库提供给程序员。程序员直接使用这个库或在库中定义类的子类。如上所述,该库的作者不能控制该子类中的代码。但是,如果子类出问题了,则该库的作者往往被认为要分担责任。因此,提供对使用库或该库的子类的代码强加一组语言限制的机制是有利的。
技术实现思路
本专利技术包括操作数据处理系统以便在编译程序中检查对规则的集合的违反的方法,该违反不构成生成编译程序的编译器检测的违反。该方法包括获取依据程序的反编译表示中的规则定义的一个限制规则集。该方法还包括将编译程序反编译成定义该限制规则集的编译程序的反编译表示,在编译程序的反编译表示中检查对该限制规则集的违反,以确定是否违反了任一规则,以及提供指示违反了规则之一的输出。反编译表示的一个方面包括编译程序的一部分的抽象语法树(AST)表示,并该限制规则集依据AST表示定义。在本专利技术的另一方面中,该限制规则集只应用于编译程序的一部分,以及反编译编译程序包括反编译编译程序的那个部分而不反编译编译程序的另一部分。在本专利技术的更进一步方面中,编译程序反编译的部分包括类的子类的集合,以及反编译程序包括识别与该子类的集合有关的指令在编译程序中的地点。在本专利技术的进一步方面中,该编译程序进一步包括识别与该子类的集合有关的方法在编译程序中的地点的元数据,以及将反射机制用于识别要在子类中检查对该限制规则集的违反的方法。在本专利技术的另一方面中,编译程序中的不同类受不同限制规则集支配。在本专利技术的另一方面中,如果编译程序未违反该限制规则集,则该数据处理系统生成证书。该证书可被运行编译程序的运行时系统(runtime system)读取。如果该证书不存在,则该运行时系统可以防止编译程序运行。附图说明图1例示了按照本专利技术一个实施例的规则测试过程的流程。具体实施方式本专利技术检测与在库中提供的类的子类相对应的计算机代码中的语言指令的子集的违反。程序员通常用高级语言将程序写成源文件,该高级语言使程序员可以编写库的子类,其被包括某种形式的编辑器和编译器的编程环境识别。然后,通常将程序编译成独立于程序要在上面运行的特定硬件的形式。例如,这可以是运行在可以在许多不同硬件平台上实现的虚拟机上的代码。在另一例子中,编译代码是运行在特定硬件程序上的代码。为了本讨论的目的,将编译代码定义成包含机器指令序列的任何可执行文件,其中该机器可以是真实机器或虚拟机器。编译代码还指定指令序列中开始执行的起点。为了本讨论的目的,将“类”定义成含有数据存储元素和对那些存储元素加以操作的代码定义方法两者的计算机对象的定义。子类通过将扩大或变更父类的数据存储元素和/或方法加入父类中从父类中导出。加入的方法可以覆盖父类中的方法,或提供不是父类的一部分的新方法。类似地,该子类可以将另外的数据存储元素加入在该类中提供的那些中。在本专利技术的一个方面中,用在程序中的类的子集被识别为受可能语言命令的子集的限制和/或受可比编译器所允许的更严格限制的规则的集合支配。为了简化如下讨论,这样的类被认为要求遵从“限制规则集”。不遵从与从其生成子类的父类相对应的限制规则集的子类的代码,即使该代码遵从通过编译器强加的规则,也被认为包括语言违反。在本专利技术的一个方面中,语言违反由对编译器生成的代码加以操作的后处理器来检测。该后处理器做法具有超过在用于编译代码的编译器内强加规则的许多优点。首先,后处理器只对编译器的输出,因此,在编译取得成功之后加以操作。因此,代码检验不必管理语义无效程序或其他类型的语言违反。其次,后处理器与在编译过程中组合源文件的方式的细节无关。例如,程序中的不同子类可以用不同计算机语言编写。因此,后处理器无需与许多不同语言一起工作,只要后处理器可以从编译器的输出中获得所需的信息即可。第三,后处理器或要强加的规则可以由库供应者提供,并无需要求提供编译器和编程平台的实体协作地利用。因此,可以更容易地将规则定制成库,并提供库提供者控制库的使用的机制。在本专利技术的一个方面中,反编译编译器的输出以生成语义上与编译的原始代码等效的表示。如果两种表示产生的代码从相同输入中产生相同结果,则将两种表示定义成语义上等效的。例如,可以将编译器的输出转换成作为用编程语言编写的源代码的抽象语法结构的树表示的AST。然后检查AST以找出受限制规则支配的所有类或子类。然后检查那些子类以确定该子类是否遵从限制规则集。在这种情况下,用特定AST表示中的结构定义该限制规则集。如果所涉及的所有类都遵从一个或几个限制规则集,则后处理程序可以发放运行时环境可以识别和与该运行时环境一起运行的程序所需的证书。该证书可以采取,例如,加入可执行文件(executable)中或数字签名它的附加性质的形式。可替代地,或另外,可以向程序员提供代码未满足限制规则集,因此在运行时出错的警告。通常,受限制规则集限制的类的数量是程序中的整个代码的一小部分。因此,如果可以不反编译整个程序地在编译代码中识别这些类,则可以在计算工作量方面实现大幅度节省。在本专利技术的另一方面中,对提供有关编码代码内类和方法的地点的数据的编译器已经编译的代码强加限制规则集。例如,Java和.NET编译器通常包括可以用于识别编码代码内每个类的代码的地点和长度以及每个子类的父类的元数本文档来自技高网...

【技术保护点】

【技术特征摘要】
2012.11.12 US 13/674,8591.一种操作数据处理系统以便在编译程序中检查对规则的集合的违反
的方法,该违反不构成用于生成编译程序的编译器检测的违反,所述方法包
含:
获取依据所述程序的反编译表示中的规则定义的一个限制规则集;
将所述编译程序反编译成定义所述限制规则集的所述编译程序的所述反
编译表示;
在所述编译程序的所述反编译表示中检查对所述限制规则集的违反,以
确定是否违反了任一所述规则;以及
提供指示违反了所述规则之一的输出。
2.如权利要求1所述的方法,其中所述反编译表示包含所述编译程序的
一部分的抽象语法树(AST)表示,并且所述限制规则集依据所述AST表示
定义。
3.如权利要求1所述的方法,其中所述限制规则集只应用于所述编译程
序的一部分,以及其中反编译所述编译程序包含反编译所述编译程序的所述
部分而不反编译所述编译程序的另一部分。
4.如权利要求3所述的方法,其中所述编译程序的所述部分包含类的子
类的集合,以及其中反编译所述程序包含识别与所述子类的集合有关的指令
在所述编译程序中的地点。
5.如权利要求4所述的方法,其中所述编译程序进一步包含识别与所述
子类的集合有关的方法在所述编译程序中的地点的元数据。
6.如权利要求5所述的方法,其中将反射机制用于识别要在所述子类中
检查对所述限制规则集的所述违反的方法。
7.如权利要求1所述的方法,其中所述限制规则集包括要应用于所述程
序内的第一类的第一限制规则集和要应用于所述程序内的第二类的第二限制
规则集,所述第一限制规则集不同于所述第二限制规则集。
8.如权利要求1所述的方法,其中如果所述编译程序未违反所述限制规
则集,则所述数据处理系统生成证书,所述证书可被运行所述编译程序的运
行时系统读取。
9.如权利要求8所述的方法,其中如果所述证书不存在,则所述运行时

\t系统防止所述编译程序运行。
10.一种包括指令的...

【专利技术属性】
技术研发人员:K米切尔
申请(专利权)人:安捷伦科技有限公司
类型:发明
国别省市:

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

1