CN104081350B - 使用动态编程语言的元数据的运行时优化方法和系统 - Google Patents
使用动态编程语言的元数据的运行时优化方法和系统 Download PDFInfo
- Publication number
- CN104081350B CN104081350B CN201380007185.2A CN201380007185A CN104081350B CN 104081350 B CN104081350 B CN 104081350B CN 201380007185 A CN201380007185 A CN 201380007185A CN 104081350 B CN104081350 B CN 104081350B
- Authority
- CN
- China
- Prior art keywords
- code
- key
- data
- generation
- metadata
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明描述了一种方法和装置,所述方法和装置使用相对于所述数据结构集合描述了所述键的属性的元数据,对键索引数据结构集合中的键的操作进行优化。元数据可对应于动态更新的高速缓存以指示不变量,该不变量对于处于数据结构集合的当前状态的键而言为真。可避免用于在键的数据结构集合上进行搜索的昂贵计算。例如,如果已知键始终(或从不)标引某些特定的值,或者这些值具有在处于当前状态的系统的全局范围内的任何所述数据结构集合中的某些元属性,则可能根本无需在数据结构集合上进行昂贵的查找操作。
Description
技术领域
本发明整体涉及运行时编译。更具体地,本发明涉及基于动态语言的源代码的基于元数据的运行时优化。
背景技术
不含任何种类类型注释的动态语言越来越普遍。例如,JavaScript已经成为万维网的通用语言,而Ruby、Python、Perl和PHP已经成为服务器端基础架构的标准语言。然而,当可能未提供优化编译策略以编译代码时,基于动态语言的代码的运行时可能需要显著开销。
例如,JavaScript不允许程序指定变量的类型。因此,在运行时期间,变量可被动态转换为不同执行路径中的独立类型。此类转换可能在计算上开销大,使整体性能受到重大影响。另外,动态创建的数据类型可能需要索引数据结构(例如字典)间大量的查找或搜索操作,以将类型分配到数据或访问特定类型数据的属性。
此外,需要现代JavaScript引擎来非常快速地执行非可信代码,并且由于这个原因,通过诸如即时(JIT)编译的机制而使用运行时代码生成,攻击者可利用这一点绕过操作系统/硬件保护。现有保护技术例如常量盲化可用于阻止此类攻击。然而,这些技术可在存储器使用和处理器执行时间两方面引发目标代码的性能成本,无论所执行的目标代码是否具有风险。
因此,传统的动态运行时编译方法往往是昂贵、低效和未优化的。
发明内容
可随机地且不频繁地分配跟踪器数据(例如,堆分配单元或跟踪弹(tracerbullet))以分析从起源代码位置和目标代码位置流出的值以便优化编译代码。跟踪器数据可包括或装箱某个值以及该值在源代码或程序中的相应起源(或来源)。值的起源可指示值在源代码中的生成位置。在一个实施例中,可在运行时期间将值存储在存储器中时创建跟踪器数据。来源可以是标识用于存储该值的代码位置(例如行号)的指针宽度字。可将特定的类型或标签与跟踪器数据相关联以迫使使用(或访问、标引)跟踪器数据的代码执行或操作采用慢速路径,因为可能无法在源代码中对跟踪器数据进行现有类型检查。所述慢速路径可记录跟踪器数据中的值的起源(或源)代码位置和正在使用跟踪器数据的接收(或目标)代码位置之间的链接。该链接可分配有权重以指示值传递(或跟踪)通过链接的次数。
在一个实施例中,可基于运行时期间在值的起源代码位置和目标代码位置之间记录的链接来生成概率数据流程图。可对图形的每个边加权以对应于占用边的值流的相对概率。值如何流过程序以及使用那些值的不同操作执行频率有多高可从概率数据流程图识别。因此,概率数据流程图可提供执行程序的运行时概率视图以揭示运行时编译的优化机会。
在一个实施例中,可根据概率数据流程图来执行运行时编译器上的优化操作。例如,如果流过整数路径的值更可能用于浮点运算,则整数路径可被转化为浮点路径。同样,如果以浮点格式存储的整数极有可能(例如,基于概率数据流程图)在以后用于整数运算,则可将其转换为整数格式。作为另外一种选择,如果整数堆存储(例如,整数格式的值)具有流入浮点加载中的高概率,则可优化编译器而替代地以浮点数据的形式堆存储,但要进行另外的类型检查操作以确保可靠性。
在一个实施例中,可使用相对于数据结构集合描述了键的属性的元数据,对使用键索引数据结构(例如字典、哈希表、关联数组等)集合中的键的操作进行优化。元数据可对应于动态更新的高速缓存以指示不变量,该不变量对于处于数据结构集合的当前状态的键而言为真。可避免用于在键的数据结构集合上进行搜索的昂贵计算。例如,如果已知键始终(或从不)标引某些特定的值,或者由于这些值具有在处于当前状态的系统的全局范围内的任何数据结构集合中的某些元属性,则可能根本无需在数据结构(或字典)集合上进行昂贵的查找操作。
在另一个实施例中,运行时编译器可以发射实现快速路径(例如,无负载和分支结构)的编译代码,以基于对与通过源代码识别的键相关联的元数据的假设来执行源代码的指令。编译代码可包括保护符,例如条件检查代码,以基于与键相关联的元数据进入慢速路径并防止进入快速路径。在运行时执行编译代码期间,可保持包括对象的运行时状态,所述对象具有通过键散列的属性。可动态更新键的元数据以反映运行时状态的变化(例如,在对象中)。可执行保护符以执行廉价的检查操作(例如,标引键的元数据而不在运行时状态下的对象上执行昂贵的查找),从而更新已发射编译代码以在运行时期间需要时包括慢速路径。
在另一个实施例中,可使用类型信息(或其他属性信息)修改(或破坏)存储器中类型化数据的指针值,以在通过修改的指针值对类型化数据执行存储器访问操作时,利用基于硬件的安全检查机制针对类型化数据自动检查类型信息。从而,当执行使用已修改指针的软件代码(其经受安全检查但不执行例如软件代码中的比较和分支指令)时,硬件内置逻辑可用于广义类的编程语言安全检查。
在一个实施例中,动态编程语言中类型的对象的指针的一部分(例如,64位系统中的高16位)可配置(或设置)有标识类型的类型标识符。当通过被怀疑为该类型但并非已知为该类型的指针而对所述对象执行访问时,可使用类型标识符(例如,通过XOR算术运算)来更新指针以执行访问。如果对象确实是由类型标识符所标识的类型,则访问可以成功,否则将导致硬件陷阱自动激活陷阱处理程序。
在另一个实施例中,运行时编译(例如JIT编译)可基于启发式规则生成非确定性和不可预测的代码以防止非可信代码攻击,例如JIT SPRAY攻击,而不需要所有已生成代码的确定性行为减少操作。启发式规则可包括对例如所引发代码保护的成本(例如,运行时开销)、所需代码保护的量和/或其他适用因素及其关系的估算。
在一个实施例中,当执行源代码的运行时编译时,动态收集或累计数字(或测量值)以估算源代码状态的可信度。所述数字可基于对来自源代码的已发射代码的量(例如,已生成的字节数)以及对已发射代码的不可信控制量的跟踪。例如,所述数字可确定(不可预测地)是否盲化(或重整、随机化)编译代码的源代码的常量,以抵御嵌入常量中的潜在非可信可执行代码。
通过附图以及通过以下具体描述,本发明的其他特征将显而易见。
附图说明
本发明以举例的方式进行说明,而不仅限于各个附图的图形,在附图中类似的附图标号表示类似的元件,并且其中:
图1为网络图,其示出了从网络化设备检索的源代码的示例性运行时编译;
图2为框图,其示出了动态编程语言运行时编译的系统的一个实施例;
图3为流程图,其示出了采用跟踪器数据(或跟踪弹)的优化运行时编译过程的一个实施例;
图4为流程图,其示出了在运行时期间随机跟踪跟踪器图中的值以优化编译的过程的一个实施例;
图5为图形示意图,其示出了在运行时期间跟踪值的示例性跟踪器图;
图6为流程图,其示出了使用散列键的元数据访问散列值的过程的一个实施例;
图7为流程图,其示出了使用散列键的元数据动态更新推测生成的编译代码而无需查询散列键的散列数据的过程的一个实施例;
图8示出了根据本文所述一个实施例的运行时的示例性键元数据;
图9为流程图,其示出了访问特定类型数据而无需比较和分支操作的过程的一个实施例;
图10为流程图,其示出了用于根据高速缓存类型访问对象的数据元而无需执行比较和分支操作的过程的一个实施例;
图11示出了根据本文所述实施例表示对象的类型嵌入指针的一个例子;
图12为框图,其示出了用于访问特定类型数据而无需比较和分支操作的系统的一个实施例;
图13为流程图,其示出了以非确定性方式选择性地随机化来自源代码的编译代码的过程的一个实施例;
图14为流程图,其示出了从源代码的编译代码流发射非确定性随机化的可执行代码的过程的一个实施例;
图15A-15B示出了根据本文所述某些实施例的采用分散随机化操作的即时编译的例子;
图16示出了诸如计算机系统的数据处理系统的一个例子,该数据处理系统可与本文所述的实施例一起使用。
具体实施方式
相关专利申请的交叉引用
本申请与由Filip Pizlo等人于2012年2月3日提交的名称为“RUNTIMECOMPILATION FOR DYNAMIC PROGRAMMING LANGUAGES”的美国临时专利申请号61/594,983、由Filip Pizlo等人于2012年2月15日提交的名称为“RUNTIME COMPILATION FOR DYNAMICPROGRAMMING LANGUAGES”的美国临时专利申请号61/599,309相关并要求其权益,这两个专利据此全文以引用方式并入本文。
本文描述了用于运行时编译器的方法和装置。以下说明中示出了许多具体细节,以提供对本发明实施例的全面解释。然而,对于本领域的技术人员显而易见的是,本发明的实施例可在不具有这些具体细节的情况下实施。在其他情况下,未详细示出已熟知的组件、结构和技术,以免影响对此说明的理解。
本说明书中提到的“一个实施例”或“实施例”是指,结合实施例所描述的特定特征、结构或特性可包括在本发明的至少一个实施例中。在本说明书中的不同位置出现短语“在一个实施例中”不一定都是指同一个实施例。
下图中示出的过程通过处理逻辑执行,所述处理逻辑包括硬件(例如,电路系统、专用逻辑等)、软件(例如在通用计算机系统或专用机上运行的软件)、或它们两者的组合。虽然下文按照某些顺序操作来描述过程,但应当理解,所描述的某些操作可以不同的顺序来执行。此外,某些操作也可以并行地执行而并非按顺序执行。
图1为网络图,其示出了从网络化设备检索的源代码的示例性运行时编译。在一个实施例中,网络系统100可包括一个或多个服务器应用101,例如在一个或多个服务器设备中托管的web服务器,以提供可用于客户端应用105的内容,例如在客户端设备中运行的web浏览器。服务器101和客户端105可基于例如诸如HTTP(超文本传输协议)之类的互联网络协议或其他适用的协议通过网络103彼此通信。
在一个实施例中,从服务器101检索的内容可包括基于超文本语言(例如HTML(超文本标记语言)或其他标记语言)的web页面,该超文本语言嵌入在动态编程语言(例如JavaScript)中或与动态编程语言的源链接(例如超链接)。客户端105可以动态地下载或获取用于执行的链接源。在一个实施例中,客户端105可以在运行时期间动态地编译所下载的源以提高执行性能。
图2为框图,其示出了动态编程语言运行时编译的系统的一个实施例。在一个实施例中,系统200可包括操作环境201,例如图1的操作系统托管客户端应用101。操作环境201可包括动态地将源代码203编译成可执行代码213的运行时编译器221。源代码203可包括动态编程语言(例如JavaScript)中的程序。在一个实施例中,可通过在操作环境201中运行的浏览器应用程序从远程设备(例如,图1的服务器101)检索源代码203。运行时编译器221和执行运行时215均可由浏览器应用程序控制以执行浏览操作。
在一个实施例中,运行时编译器221可包括未优化代码生成器模块207以编译源代码203。模块207可包括源概要分析模块209以从源代码203生成概要分析信息(例如代码位置标识符、令牌密钥或其他静态分析代码数据等)。根据一些实施例,模块207可提供可执行代码213的初始版本,可通过优化编译模块211在运行时期间动态地更新和优化该初始版本。
例如,执行运行时215可以执行可执行代码213以收集跟踪器图219,该跟踪器图提供优化编译模块211的运行时统计值以在可执行代码213上执行优化操作(例如,数据类型转换、代码替换等)。执行运行时215可以动态地保持运行时状态217,包括例如创建的用于执行源代码203的数据实例(例如,对象或其他数据结构)。运行时编译器221可包括非确定性代码随机化模块205,以在源代码203和可执行代码213之间引入不可预测性,从而防止执行嵌入在源代码203内的潜在隐藏的可执行代码。
基于动态跟踪器的运行时优化
在一个实施例中,在编译源代码时,可在例如概要分析阶段期间将跟踪代码引入(或注入、植入)源代码的编译代码中。跟踪代码在执行编译代码(例如,未优化代码)的运行时期间被执行时,可以随机地和偶发地生成跟踪器数据以提供信息暴露机会从而优化编译代码。可在运行时期间,通过利用从执行跟踪代码获得的信息而将优化操作(例如类型转换或其他适用的编译操作)动态地应用于优化编译代码的多个部分。可以动态地执行优化编译代码(而不是未优化编译代码)以便在由跟踪代码引发的有限的处理或资源成本的情况下加快例如源代码的某些选择部分,例如重复函数调用或循环。
例如,可执行跟踪代码以创建跟踪器数据,从而表示在编译代码的运行时期间使用的值。可使值的跟踪器数据结构化以包括(或装箱)该值及该值的附加代码信息,例如该值的起源或来源(例如,源文件名、行号、或指示该值在编译代码或源代码中的创建位置或来源位置的其他信息,例如针对该值生成的机器代码的位置)。在一个实施例中,可使用特定类型来标记或标识跟踪器数据,以与在源代码的编程语言(例如,JavaScript)中采用的现有数据类型(例如,字符串、整数等)、对象或其他动态类型区分开。因此,在运行时期间,可识别(例如,直接地从用特定类型标记的指针识别)对跟踪器数据的访问以执行操作,从而访问其相应的值。
在一个实施例中,可将跟踪器代码插入到编译代码中的触发点(例如,用于访问或存储存储器中的值的指令)。跟踪器代码可包括随机求值器以在被执行时确定是否生成跟踪器数据(例如,跟踪弹),以装箱(或承载、封装)具有值的附加代码信息(例如可得自相应源代码的概要分析阶段)的值。可在值被存储于存储器中、放入栈中或传递至函数调用等时创建跟踪器数据。在一个实施例中,随机求值器可被配置为以低概率(例如小于1%)在编译代码中偶发地生成跟踪器数据。因此,可以减小在运行时期间遇到时从跟踪器数据提取(或拆箱)相应值的开销。在某些实施例中,随机求值器可基于全局计数器,该全局计数器在计数数量超过配置数量(例如,100)时返回真,否则返回假,以引导跟踪器数据以被评估为真的低概率生成。
在某些实施例中,可生成跟踪器数据以允许实时收集运行时数据流信息,而不用对源代码(或整个程序)进行昂贵的分析。概率数据流程图可被动态地构造为表示运行时数据流信息。可将代码信息(例如值的起源)记录在跟踪器数据中,从而易于在运行时期间访问跟踪器数据时获得,而无需重复地扫描(或读取)源代码以搜索用于收集运行时数据的代码信息。
在一个实施例中,当在编译代码中创建值的跟踪器数据时,可用对跟踪器数据的标引(或指针)更新编译代码中值的现有链接(例如,用于访问值)。对跟踪器数据的标引可包括特殊标签以允许调用特定处理程序,从而基于通过在执行编译代码时遇到的更新链接所识别的特殊标签,使值与跟踪器数据解包。此外或任选地,垃圾收集器例程可以识别分配在存储器中的跟踪器数据(例如,基于特殊标签),以在每个存储器清理会话处移除跟踪器数据,从而确保来自跟踪器数据的最小存储器使用影响。
在用跟踪器代码插桩或注入的未优化编译代码的运行时期间,可保持数据流程图以通过动态创建的跟踪器数据以出现的相对频率收集有关如何创建、消耗或使用值等的信息。例如,图中的第一节点可与被创建为整数常量的值相关联。第一节点可与按照程序中的指示创建(或存储)值的代码位置相关。可在运行时期间将跟踪器数据存储在存储器中以连同指示值起源的代码位置的信息一起来表示值。
当值在程序的目标位置被标引用于消耗时(例如,其传递到被用作算术运算或其他适用操作中的操作数的函数时),可从存储器访问跟踪器数据以解除对内嵌值的标引。值的第二节点可在图中更新以表示使用值的目标位置。该图可以包括从第一节点到第二节点的值的有向边。
在一个实施例中,数据流程图的每个节点可与和值相关的信息相关联,例如创建值时的数据类型、使用值时的数据类型(或在使用时转化的数据类型)、对应于节点的代码位置、指令在该代码位置中被执行的次数(例如,基于计数器记录)、或其他适用的信息。数据流程图中的每个边可包括值的源节点和目标节点。所述边可包括运行时期间动态更新的数(例如,基于计数器)以指示频率、权重或遇到(或跟踪)的从与源节点相关联的代码位置传递到与目标节点相关联的另一个代码位置的值的累计次数。从而,数据流程图可承载运行时执行轨线以允许在不停止程序的情况下推断程序的值如何在运行时期间使用。
可基于在数据流程图中收集的运行时数据来优化编译代码。例如,源代码可以指定在对应于数据流程图中节点的代码位置(或代码块)处分配值的类型(例如,整数值)。优化编译器可例如基于起源于图中节点的边(例如,出边)分析数据流程图以识别该值在运行时期间的使用方式。每个边都可从作为源节点的节点被引导向目标节点。另外,所述边可以根据目标节点指示值用作特定类型(例如,字符串、双精度、整数,或其他适用的类型)的次数。
在一个实施例中,可基于数据流图来评估将值用作数据的特定类型的概率或可能性。用于创建值的来自对应于代码位置的源节点的有向边可提供运行时执行记录,所述记录在早期运行时作为启发法收集以估计值将如何使用。与有向边相关联的目标节点可指示值已经使用的类型。在预测要在运行时期间执行的潜在类型转换中,可对代码位置处的值的编译代码进行优化以将值预先转换为数据的推断类型,以减少类型转换操作或其他运行时资源使用。该推断类型可为被观察为最常见的,或在目标节点中具有使用该值的最高概率的特定类型。
在一个实施例中,可以动态地监测未优化编译代码的执行以确定何时在编译代码的哪些部分上执行编译器优化。例如,如果函数调用次数或循环代码执行次数已超过阈值次数(例如,66次函数调用,1000次循环或其他静态或动态配置次数),则可在运行时期间调用编译器优化以优化相应的代码。作为另外一种选择,如果运行时监测指示代码的一部分具有低使用(或执行)率,则可能不会在编译代码的该部分上执行编译器优化。低使用率可基于预定的使用阈值(例如,观察到函数仅被调用了一次)或在监测时间期间与编译代码的其他部分的相对资源使用比较。
图3为流程图,其示出了采用跟踪器数据的优化运行时编译过程的一个实施例。示例性过程300可通过处理逻辑来执行,所述处理逻辑可包括硬件(电路系统、专用逻辑等)、软件(例如在专用机上运行的软件)、或它们两者的组合。例如,过程300可通过图2的系统200的一些组件来执行。在框301处,根据一个实施例,在源代码的运行时编译期间,过程300的处理逻辑可将跟踪器代码插入到源代码。例如,过程300的处理逻辑可从远程设备(或本地存储器)检索源代码以动态地执行从源代码编译的可执行代码。作为另外一种选择,可通过解译器机构来执行源代码,而无需编译但带来一定的性能开销。
在一个实施例中,源代码可基于动态编程语言,例如JavaScript,而无需在源代码中创建的值的数据类型的明确规范。过程300的处理逻辑可将跟踪器代码添加到标引源代码中的值的代码块,以允许选择性地跟踪源代码执行期间的值流。
在框303处,在源代码的编译代码(例如未优化)的运行时期间,过程300的处理逻辑可根据在源代码中插入的跟踪器代码随机地且不频繁地(例如小于1%)生成遇到的(例如,当值存储在存储器中时)值的跟踪器数据。所述值和所述值的起源(例如初始代码位置)可被封装在跟踪器数据内。
在框305处,当在源代码的运行时期间(例如,基于未优化编译代码)在目标代码位置处使用(或遇到)值时,过程300的处理逻辑可加载跟踪器数据(例如,从存储器)以从跟踪器数据访问值。所加载的跟踪器数据可指示相应值的起源。在一个实施例中,过程300的处理逻辑可根据加载的跟踪器数据更新跟踪器图以记录运行时信息。该运行时信息可包括在执行期间跟踪器数据内指示的值的起源和所使用值的目标。
在框309处,过程300的处理逻辑可优化编译代码以减少跟踪器图中跟踪的值的起源和目标之间的处理资源。例如,过程300的处理逻辑可使用跟踪器图中跟踪的目标(或接收)代码位置中主要使用的数据类型在其初始代码位置处转换值。在一些实施例中,过程300的处理逻辑可监测未优化编译代码的运行时状态以选择性地优化代码的多个部分。例如,与不频繁执行的函数对应的代码块可能不需要优化。在框311处,处理逻辑可执行所述优化编译代码,并且任选地执行未优化编译代码的多个部分。
图4为流程图,其示出了在运行时期间随机跟踪跟踪器图中的值以优化编译的过程的一个实施例。可通过处理逻辑执行示例性过程400,该处理逻辑可包括硬件、软件、或它们两者的组合。例如,过程400可通过图2的系统200的一些组件来执行。在框401处,过程400的处理逻辑可随机地且不频繁地确定是否跟踪在源代码中指定的(例如,将基于存储或分配操作存储在存储器中的)值V。值V可与起源O(例如,行号)相关联,该起源O指示值V在源代码中的创建位置。在一个实施例中,是否跟踪值V可基于对全局计数器进行计数,以及所计数的全局计数器是否溢出一定的配置数(例如,100)来决定。如果发生了溢出并且全局计数器重置回其初始值(例如,0),则可对值V进行跟踪。
在框403处,如果确定要跟踪值V,过程400的处理逻辑可根据跟踪器数据类型(或弹跟踪器类型)分配存储器中的跟踪器数据以存储值V和起源O。例如,跟踪器类型可指定具有两个64位字的数据结构。可通过具有指示跟踪器数据(例如,可跟踪弹类型)的标签的指针来指向跟踪器数据。过程400的处理逻辑可以识别直接来自指针自身的跟踪器数据的指针。
在框405处,过程400的处理逻辑可通过目标D的指针来访问值V,该目标D位于使用(或消耗)值V的代码中。例如,目标D可指示用值V传递的函数内的代码位置。在框407处,过程400的处理逻辑可例如根据指示可跟踪弹类型的标签确定指针是否指向跟踪器数据。
在框407处,如果指针指向跟踪器数据,则过程400的处理逻辑可以访问来自跟踪器数据的值V和起源O(例如,从存储值V的位置偏移8个字节)。在一个实施例中,通过跟踪器数据访问(或检索)值V可基于跟随代码慢速路径的代码执行。作为另外一种选择,不使用跟踪器数据(例如,通过指向存储器中的值V的指针)访问值V可基于跟随代码快速路径的代码执行;与慢速路径相比,快速路径可能需要更少的操作。
在一个实施例中,在框411处,如果跟踪器图G(例如,表示基于有向图的关系的数据结构)包括从起源O导向目标D的边E(例如,图G的独立节点),则过程400的处理逻辑可更新边E的权重(例如,加1)。图G中边的权重可表示运行时期间从起源O到目标D的值流的出现次数(或其他收集的统计值)。反之,如果图G中当前不存在边E,则过程400的处理逻辑可使用具有初始权重(例如,1)的边E来更新图G。随后在框415处,过程400的处理逻辑可从要用于位于目标D中的代码的跟踪器数据中加载值V。
图5为图形示意图,其示出了在运行时期间跟踪值的示例性跟踪器图。例如,节点511可指示已监测执行的运行时期间值O.x=a+b生成的12个观察结果(或已跟踪12个记录)。边509可包括数100,该数表示在节点511处创建的值在对应于节点505的代码位置处已使用的次数(如,基于循环代码执行)。在一个实施例中,节点505可指示代码O.x*2.1已使用在节点511和节点501处创建的值执行了102次。边503可指示节点505消耗了在节点501处创建的2个值。节点501可指示已跟踪通过O.x=c*d创建的3个值。
在一个实施例中,节点505、节点507和节点517可包括代码信息,该代码信息分别指示用于值O.x的不同类型,例如双精度类型、整数类型和字符串类型。边509、513和515可提供收集数(或统计值),其指示在节点511处创建的值O.x已使用(例如被跟踪时)的次数,例如双精度类型时的100次,双精度整数类型时的2次以及时间字符串类型时的一次。因此,优化编译器可更新对应于节点511的代码位置(或块)处的编译代码,以将值O.x预转换为双精度类型,使得可以避免为节点505定位的代码的双精度的潜在转换操作。
使用元数据的运行时优化
在一个实施例中,可通过维护键的元数据来避免用于搜索与键相关联的对象属性的昂贵查找操作。每个键都可被表示为字符串、字符序列或数据的其他适用单元。在基于动态编程语言(例如,JavaScript)执行代码的运行时期间,可采用一类字典来存储已分配数据(例如对象)的属性。对象的属性存储器中的示例性条目可包括元属性,例如,“为只读”、“为访问器”或其他适用的属性,以及相关联的属性值,例如指示相应的属性为真还是不为真。
可执行给定字典/键对的示例性运行时计算或操作以确定字典是否包含由键标引的只读值。用表示键的键对象直接记录某些重要不变量时可不需要此类计算或搜索操作。例如,可创建键相关的数据或对象以包含数据片,例如“只读”键元数据,从而跟踪任何现有的字典是否包含只读属性或与当前运行时状态下的键相关联(或被其索引)的值。每当在运行时期间执行此类计算时可检查键的这些不变量。
在一些实施例中,可提供某种机制以确定依靠与键(或键特定不变量)相关联的不变量或元数据的优化代码块是否仍然有效。每当这些不变量更改时,相应的优化代码块可失效。例如,运行时编译代码(例如,通过JIT编译器)可基于不变量的有效性,其中给定键将从不会标引具有“为访问器”元属性的属性。如果在运行时期间该不变量的状态改变(即,具有“为访问器”元属性的属性被添加到由给定键标引的字典条目),则依靠该不变量的运行时编译代码一定会失效、被删除或更换,使得其不再被使用。
用于执行基于动态语言的代码的运行时状态(例如,在某个时间点处)可包括具有键索引(或相关联)属性的对象域,例如字典、哈希表或其他适用的关联数据结构。另外,运行时状态可包括键和键特定元数据(或不变量)的集合。可例如在运行时编译的配置文件阶段期间从代码(例如,源代码)中识别键。作为另外一种选择,可在运行时期间动态地创建键(例如,通过执行key=input())。创建或维护键元数据以明确描述在全局范围内与当前运行时状态(例如,所有现有的对象或数据实例)相关的键的某些方面的“事实”或断言。
在一个实施例中,键元数据可指示全局断言,该全局断言可通过对相对于与元数据相关联的键的现有对象的搜索操作而被验证为真。例如,运行时状态可包括在任何当前现有对象中未使用(或包括)的特定键。键特定元数据可包括用于特定键的条目,指示该特定键当前未在任何对象中使用。对被特定键索引的属性的运行时状态(或域)的所有当前现有对象的搜索操作结果可与键特定元数据一致。可通过键特定元数据的可用性来避免此类搜索操作。
执行基于动态编程语言的代码的运行时状态的键特定元数据可指示键是否在运行时状态下被使用(被任何现有对象),在运行时状态下被键索引的属性是否具有“只读”属性,函数调用是否与键(例如,静态地)相关联,和/或与键相关的其他适用的全局信息。在一个实施例中,键特定元数据可包括需要低存储器资源开销的多位数据。每个位可具有二进制值,该二进制值指示与位(与相应的键相关联)相关联的语句或断言是否相对于当前运行时状态在全局范围内为真。
基于动态语言(例如JavaScript)的程序的运行时编译代码可包括代码块以访问键特定元数据(或不变量数据),以及防止其在例如访问动态分配的属性(例如,v=o.m)时进行潜在冗长和昂贵的查找操作。可在代码块中调用键元数据访问函数以确定对应于属性(例如,m)的键是否被使用。如果属性未被使用,则用于搜索运行时的所有现有对象(或字典)的慢速路径代码可被跳过。
可动态更新运行时状态的键元数据以与运行时的变化同步。例如,一旦(或同时)与特定键相关联的对象属性被创建(或被添加到字典),则可修改(例如,翻转位值)特定键的键元数据以反映该特定键在运行时状态下在至少一个对象中被使用。
在一个实施例中,运行时编译器可基于初始建立的键不变量(或键特定元数据)来生成源代码的优化编译代码,该初始建立的键不变量(或键特定元数据)具有与用于执行源代码的初始运行时状态一致的初始值。例如,运行时编译器可为源代码中属性“m”(例如,o.m=x)的每个访问生成优化代码,以分配属性“m”(或更新对象的动态类型)而不执行安全防护操作,以在执行时在运行时状态下搜索现有对象中的属性“m”(或相应的键)。
在运行时期间,当键不变量由于可在运行时状态期间发生的变化而被修改时,运行时编译器可动态更新优化编译代码。因此,基于键不变量的某些假设(例如,初始值)的优化编译代码的多个部分可失效,前提是此类假设不再为真。例如,如果属性“m”在运行时期间被分配到现有对象,则可以更新编译代码中属性“m”的访问的优化代码的每个块,例如,以执行独立代码路径从而用附加操作(例如,搜索或查找操作)来保证可靠性。在某些实施例中,优化编译代码可包括指示代码块被优化的指示器(例如,基于表数据结构中的标记)。
图6为流程图,其示出了使用散列键的元数据访问散列值的过程的一个实施例。可通过处理逻辑执行示例性过程600,该处理逻辑可包括硬件、软件、或它们两者的组合。例如,过程600可通过图2的系统200的一些组件来执行。在框601处,过程600的处理逻辑可以检查键的键元数据,以确定是否响应于在执行代码的运行时期间访问由目标数据对象的键索引的属性而执行查找操作。
在一个实施例中,运行时状态可包括当前(例如,在运行时期间的时间点处)分配的数据对象,例如,包括目标数据对象。访问由目标数据对象的键索引的属性可导致对由该键索引的新属性的分配。可能需要查找(或搜索)操作以确定与目标数据对象相关的当前分配的数据对象的任何现有属性是否由键索引。键的键元数据可包括不变量的描述,其对于在当前分配的数据对象中的键在全局范围内为真。例如,键的不变量中的一者可指示是否使用键来索引当前分配的数据中的现有属性。
在框603处,如果键的不变量或元数据满足某些条件,则过程600的处理逻辑可针对由直接位于目标数据对象上的键索引的属性执行访问操作,而不在当前处于运行时状态的分配的数据对象上执行查找操作。例如,条件可为这样的要求:键当前未在运行时状态下的现有数据对象的任何一者中被使用或标引。例如,如果键满足该条件,则不需要在多个数据对象中执行潜在的昂贵查找操作以定位由键索引的属性。
在一个实施例中,属性访问操作可导致运行时状态的变化。例如,属性访问操作可导致对象使用新添加或分配的由键索引的属性进行更新,所述属性先前未在任何现有对象中使用。在框605处,过程600的处理逻辑可更新键的键元数据,以保持键的不变量和由访问操作更新(或更改)的运行时状态之间的一致性。
图7为流程图,其示出了使用散列键的元数据动态更新推测生成的编译代码而无需查询散列键的散列数据的过程的一个实施例。可通过处理逻辑执行示例性过程700,该处理逻辑可包括硬件、软件、或它们两者的组合。例如,过程700可通过图2的系统200的一些组件来执行。在框701处,过程700的处理逻辑可以针对与从源代码概要分析的键相关联的源代码的多个部分推测生成编译代码(例如,无需执行查找操作的快速路径)。所述键可以索引存储在散列数据中的值,例如在源代码的运行时状态下表示对象或其他键相关联数据结构的字典。可使用运行时状态下的所有现有散列数据中的键的一个或多个全局属性来维护与键相关联的元数据。
在框703处,过程700的处理逻辑可响应于用键更新运行时状态的散列数据而更新键的元数据,以确保在键的元数据中描述的全局属性与包括已更新散列数据的变化的当前运行时状态一致。例如,已更新散列数据可包括由对象数据中的键索引的新属性,而键的已更新元数据可指示描述键未在任何现有对象数据中使用的全局属性不再有效。
在框705处,过程700的处理逻辑可确定推测生成的与键相关联的编译代码是否因键的已更新元数据而失效,以保证推测生成的编译代码具有可靠性,而不会在运行时状态的散列数据上引发查询操作。可基于以下假设来发射推测生成的编译代码:键元数据的某些条件为真或得到满足。如果这些条件如同在键的已更新元数据中那样不再有效,则推测生成的编译代码可能需要失效。
如果推测生成的编译代码失效,则在框707处,过程700的处理逻辑可以更新与键相关联的源代码的多个部分以重新导向来自推测生成的编译代码的执行路径。例如,与根据推测生成的编译代码来执行快速路径相反,过程700的处理逻辑可以继续执行代码的慢速路径,该代码的慢速路径包括在值的现有散列数据或由键索引的属性中的诸如查找、搜索或查询操作的操作。
图8示出了根据本文所述一个实施例的运行时的示例性键元数据。实例800可基于图2的系统200的一些组件。在一个实施例中,运行时状态217可表示执行从源代码801编译的代码的运行时。对象805、807可能已在源代码801的执行期间的某个时间点处于运行时状态217下分配,例如,当执行源代码801的代码块V=O.W以访问指向对象805的O803的属性W时。
键元数据811可在运行时状态217下保持,描述了当前存在于运行时状态217中的所有对象中的键X、W的全局不变量或元数据。例如,键的元数据可被表示为多位(例如2位)值,指示键是否在任何现有对象中使用以及键是否与“只读”属性相关联。位813可指示键W未在运行时状态217的任何当前现有对象中使用。位815可指示键W与“只读”属性不相关联。如果执行V=O.W并在对象805中分配了属性W,则位813可被更新为1。
借助已破坏指针的自动类型检查
在一个实施例中,可根据来自存储器的单次加载来优化诸如JavaScript的动态语言中的属性访问(例如“o.x”,其中o是指对象,而x是指对象的属性x)。某些操作,例如比较操作、分支操作和一个存储器加载操作,可能不需要属性访问来提高诸如内联高速缓存的运行时优化技术的性能。任选地,利用特殊处理器架构(例如流水线处理器或多处理器)执行代码的优化机会可增加(例如,通过代码路径的预测执行),同时在代码中存在较少比较操作和分支操作。
在某些实施例中,属性访问可被指定(或断言)为仅在特定(或期望)类型的对象上执行。可使用不同的期望类型来指定不同的属性访问。用于对存储器中的属性进行寻址的指针可被限制为最大允许地址数(例如,248),该最大允许地址数小于可由指针表示的可能地址数(例如,基于64位值的处理系统中的264)。可使用通过指针寻址的数据的期望类型(例如,在最高至216可能类型数之内)来指定指针中的额外空间(例如,高16位)。可将指针加载到硬件寄存器以针对由指针寻址的数据单元(例如,64位大小)自动地访问存储器。
可在访问存储器中的已寻址数据(例如,加载到硬件寄存器)之前处理断言类型的指针,以确保自动类型检查。处理系统可以自动检查通过指针指向的存储器地址是否满足某些条件(例如,高16位必须为零),而无需执行另外的机器指令(例如,用于比较操作、分支操作等)。如果条件未得到满足,则处理系统可以自动调用(例如,未经可执行代码指示)陷阱处理程序,该陷阱处理程序可使用预期的指令进行预注册。在一个实施例中,可使用期望的数据类型来处理断言类型的指针以获取期望类型的数据或执行陷阱处理程序;如果数据不是期望的类型,该陷阱处理程序会执行必要的补偿动作。
在一个实施例中,对象(例如,结构化数据)的属性存储器的指针可包括(或嵌入)该对象的类型标识符(例如,在高16位中)和属性存储器的存储器地址。指针可为嵌入的类型以通过嵌入类型标识符来断言已寻址数据的类型。在一个实施例中,可针对对象可具有属性的给定组合和排序动态地指派或分配类型。因此,例如,具有属性{x,y,z}(例如,通过x、y和z识别的有序属性)的每个对象可具有相同的类型,但该类型将不同于具有属性{x,y}或甚至{z,y,x}的对象。类型(例如,{x,y})可指定所述类型的属性存储器内属性数据(例如,y)的偏移(例如8)。
在一些实施例中,优化的内联高速缓存机制可包括通过类型嵌入指针的自动类型检查。例如,已知的类型可指定该已知类型的属性存储器内属性数据的偏移O。要访问预期为已知类型的对象的属性数据,可仅通过两个加载操作和一个算术运算,使用对象的属性存储器的类型嵌入指针P来执行优化的内联高速缓存机制。在一个实施例中,硬件已在堆访问期间测试了指针的一部分(例如,高16位)的事实可在优化的内联高速缓存机制中加以利用。
例如,用于访问来自对象属性存储器的属性数据的优化操作可按以下步骤执行:1.从对象加载属性存储器指针P;2.从P中减去E*248,其中E为识别期望类型的标识符;以及3.从P+O加载。如果E匹配对象的类型,则访问P+O将会成功,因为从P中减去E*248将导致P的高位为零。但是,如果E不匹配对象的类型,则P-E*248将得到大于248的某个值,并且访问P+O将导致硬件陷阱。可注册陷阱处理程序以将执行转移到用于属性访问的慢速路径代码,这可修复内联高速缓存的数据或执行完整的查找。因此,可通过优化操作来优化内联高速缓存机制以访问属性数据,而不执行代码以执行昂贵的比较和分支操作(例如,以确定对象是否为匹配已知类型的类型)。
在一个实施例中,类型嵌入指针可允许对大量的动态创建数据类型(例如,最多至216种类型)同时进行检查。另外,可通过简单的算术运算(例如,通过清除高16位或减去相应的类型标识符)随时恢复类型嵌入指针的初始值(例如,存储器地址)。如果类型标识符不匹配指针中嵌入的类型,则通过地址的存储器访问可能不会成功,所述地址通过与类型标识符的减法运算从类型嵌入指针恢复。
图9为流程图,其示出了访问特定类型数据而无需比较和分支操作的过程的一个实施例。可通过处理逻辑执行示例性过程900,该处理逻辑可包括硬件、软件、或它们两者的组合。例如,过程900可通过图2的系统200的一些组件来执行。在框901处,过程900的处理逻辑可为根据类型结构化的数据加载(例如,自动而不中断地)指针。例如,可以动态地创建/分配类型,指定如何为该类型的数据分配或结构化数据元。借助于地址,结构化数据在存储器中可为可寻址的。指针可包括结构化数据的地址和类型这两者。
在框903处,过程900的处理逻辑可以通过对指针的值执行的算术运算和标识已知类型的标识符来更新指针。可以更新指针以便确定通过指针(例如,通过在指针中指定的存储器地址)指向(或寻址)的数据是否为已知类型,而无需执行比较和分支操作。
在框905处,过程900的处理逻辑可以加载(例如自动地)通过已更新指针指向的数据,例如通过保持更新指针以对数据进行寻址的硬件地址寄存器。如果用一种类型结构化的数据匹配已知类型,则数据可以成功加载(或检索)。反之,在一个实施例中,硬件陷阱处理程序可被激活。例如,如果通过指针的存储器地址指向的数据不是已知类型,则已更新的指针可能会变为无效的(或指向非法存储器地址)。在一个实施例中,当被指示加载数据(通过硬件地址寄存器)时,硬件内置逻辑可以自动检测非法存储器地址。当检测到非法存储器地址时,硬件陷阱可被发布为直接执行陷阱处理程序。
图10为流程图,其示出了用于根据高速缓存类型访问对象的数据元而无需执行比较和分支操作的过程的一个实施例。可通过处理逻辑执行示例性过程1000,该处理逻辑可包括硬件、软件、或它们两者的组合。例如,过程1000可通过图2的系统200的一些组件来执行。在框1001处,例如,过程1000的处理逻辑可以存储第一类型标识符和存储器地址以表示通过第一类型标识符标识的第一类型的对象数据。对象数据可在存储器中的存储器地址处进行分配。
在框1003处,过程1000的处理逻辑可将偏移和第二类型标识符进行缓存,该第二类型标识符标识用数据元进行结构化的对象数据的第二类型,该数据元以所述偏移位于数据的第二类型内。数据元可对应于为数据的第二类型动态分配的属性。在一个实施例中,过程1000的处理逻辑可能已在先前通过第二类型的数据中的偏移执行了对数据元的访问操作。
在框1005处,过程1000的处理逻辑可配置指针以基于已缓存的偏移来访问第一类型的对象数据的特定数据元,而无需执行比较和分支操作。已配置的指针可将地址值作为对象数据、已缓存的偏移、标识第一类型的第一类型标识符和标识数据的第二类型的已缓存的类型标识符的存储器地址的算术组合。
在框1007处,在一个实施例中,过程1000的处理逻辑可执行加载操作以访问来自已配置指针的对象数据的特定数据元。如果标识数据对象的第一类型的第一类型标识符匹配已缓存的第二类型标识符,则可成功加载特定数据元。作为另外一种选择,如果第一类型标识符和第二类型标识符不匹配,则加载操作可激活硬件陷阱处理程序。
图11示出了根据本文所述实施例表示对象的类型嵌入指针的一个例子。实例1100可包括指向对象单元1103以表示对象的对象指针O 1101。对象单元1103可包括配置(例如,通过低48位)有对象属性存储1107的地址的类型嵌入指针1105,该对象属性存储被分配用于存储对象O的属性。另外,可使用标识类型数据1109的标识符来标记(例如,通过高16位)类型嵌入指针1105。在一些实施例中,可动态地创建类型数据1109以指定通过类型标识符标识的数据结构。
在一个实施例中,已知类型1111可为标识数据的已缓存类型或现有类型的类型标识符(例如,在运行时期间)。可通过例如能够表示数据的216个不同类型的64位字的低16位(例如,在基于64位的机器中)来表示类型标识符。已配置指针1113可用于访问对象O的属性存储器1107以及验证嵌入在对象O的类型嵌入指针中的类型标识符是否匹配已知类型1111。例如,可通过类型嵌入指针1101和已知类型1113上的算术运算而得到已配置指针1113。基于硬件的机制可基于例如高16位是否为值0、NULL或其他预定的值等来自动检查已配置指针1113的有效性。如果已知类型1111不匹配类型数据1109的标识符,则可在已配置指针1113中配置了无效地址。
图12为框图,其示出了用于访问特定类型数据而无需比较和分支操作的系统的一个实施例。例如,系统1200可包括图2的系统200的一些组件。在一个实施例中,系统1200可包括类型化数据处理程序模块1201,其用于访问通过操作环境201托管的运行时215中的类型化数据。在检查已知类型的类型化数据是否利用了基于硬件的机制时,类型嵌入指针处理程序模块1205可以配置指针以访问类型化数据,而无需执行另外的代码(例如,比较和分支代码)。
在一个实施例中,属性访问高速缓存1207可以提供访问对象的已缓存的(或期望的)类型标识符和/或已缓存的(或期望的)地址偏移。可使用属性访问高速缓存1207基于类型嵌入指针处理程序模块1205来执行数据访问(或检索)操作,而无需额外的加载和/或比较操作成本,从而确定类型和/或存储器地址偏移以访问目标对象属性。在一个实施例中,可注册硬件陷阱处理程序模块1203以在下列情况下激活或执行:在例如使用指针(其使用属性访问高速缓存1207中的期望类型进行配置)访问的目标数据不同于期望类型时出现硬件陷阱。
非确定性编译代码的选择性随机化
运行时编译器(例如JIT编译器)可以选择性地和随机地引入非确定性元素,以生成源代码(例如,远程获取的JavaScript代码)的不可预测的编译代码,从而防止嵌入在源代码内的非可信代码的潜在执行。由运行时编译器在通用源代码上的单独编译可导致不同的不可预测的编译代码,而不具有彼此之间的可预测性。可配置运行时编译器以改变所需的保护度(或随机性)和不可预测的编译代码中所引发的开销的量。例如,可基于非确定性决策随机地在编译代码的不同部分处选择性地应用非确定性元素。从而,可以减少运行时编译器中代码生成器的可能确定性行为。
在一个实施例中,运行时编译器可以启发式地以随机方式(例如,随机散发方式)改变常规编译代码的机器指令以生成不可预测的编译代码。可以动态地应用启发式评估以非确定性地决定是否在源代码的常规编译代码的不同部分处引入不可预测性。在一个实施例中,在编译源代码时,启发式评估可基于源代码的静态或动态测量或分析而将可信度的量分配到代码块。
例如,从源代码编译的每个代码单元(例如,值、常量等)可被指定为可信或非可信。可动态地维护可信代码的总大小(例如,字节数)和非可信代码的总大小,以提供在编译期间某个时间点处遇到的可信代码和非可信代码之间的比率的启发式测度。任选地或另外,启发式测度可包括已被发射(例如,被生成为不可预测的编译代码的一部分)的函数块代码(或函数)的数量、函数块代码的大小、或其他适用的测度。通常,函数块代码的大小越大,函数块代码可被信任的可能性就越低。相似地,源代码包括的函数越多,可认为其可信度越低。
在一个实施例中,可以结合代码(例如,编译代码的块)可信度的启发式测度,来确定是否对作为不可预测的编译代码的一部分的代码执行随机化操作。所述确定可基于随机函数的结果。随机函数的行为可导致不太可能以与基于启发式测度估算的信任度的量成比例地执行随机化操作。随机函数可在不可预测的编译代码中提供非确定性属性或不可预测性。例如,根据随机函数,要随机化的常规编译代码的多个部分可为不可预测的。
在一些实施例中,可在JIT编译期间对已按给定指令流发射的一定比例的非可信字节进行跟踪。所述比例可用作加权因子以决定是否应用随机化操作以保护所生成的代码。该决定可基于一组可根据环境易受到这些攻击的程度而随环境变化的启发法和随机过程的输出作出。任何选择在代码的哪些部分应用随机化操作(或硬化点)的确定性因素可能会被阻止。
示例性随机化操作可包括NOP(空操作)填充操作、随机指令选择,常量盲化操作,或其他适用的代码随机化操作。可执行(例如,通过运行时编译器的代码生成器)NOP填充操作以随机地生成除更改指令之间的间隔外对执行无影响的指令。随机指令选择操作可利用以下事实:多个指令可以不同的方式进行编码,或被具有相同结果(例如,减去正常量相对于加上负常量)的其他指令取代。可执行常量盲化操作以用通过可逆操作生成的另一个常量来替换某个常量(例如,被攻击者使用),然后执行代码以进行逆向转换。
运行时编译器中的选择性随机化可有效地阻止攻击者尝试执行嵌入在源代码中的非可信代码(例如,JIT Spray攻击),同时限制引发的资源开销(例如,在所需的代码大小、总运行时和/或存储器空间中引发的资源开销)。虽然选择性随机化可对代码的某些子集(例如,代码的某些常量而不是所有常量)应用随机化操作(例如,常量盲化操作),但在已发射编译代码中引入的随机性和不可预测性可以防止实际的攻击,例如JIT Spray攻击或其他攻击。例如,不能迫使代码生成器生成按照攻击者期望那样被处理器解译的指令。
图13为流程图,其示出了以非确定性方式选择性地随机化来自源代码的编译代码的过程的一个实施例。可通过处理逻辑执行示例性过程1300,该处理逻辑可包括硬件、软件、或它们两者的组合。例如,过程1300可通过图2的系统200的一些组件来执行。在框1301处,过程1300的处理逻辑可动态地确定启发式指示器,该启发式指示器指示用于生成源代码的编译代码的源代码可信度的可能性。启发式指示器可指示代码的一部分(例如,在代码中创建的值)是否可信、可信代码的量、非可信代码的量、可信代码和非可信代码之间的相对大小、代码函数块的总大小、启发式环境设置、或其他适用的启发式估算。
在框1303处,过程1300的处理逻辑可根据启发式指示器非确定性地选择编译代码的多个部分。过程1300的处理逻辑可使编译代码的所选择部分随机化,以将不可预测性引入到随机化编译代码,而不会在未随机化的编译代码的未选择部分中引发执行成本。源代码的随机化编译代码可能无法通过源代码的独立编译代码来预测。在框1305处,过程1300的处理逻辑可以执行从源代码编译的随机化编译代码,而不会执行嵌入在源代码内的潜在非可信代码。
图14为流程图,其示出了用于从源代码的编译代码流以非确定性随机方式发射可执行代码的过程的一个实施例。可通过处理逻辑执行示例性过程1400,该处理逻辑可包括硬件、软件、或它们两者的组合。例如,过程1400可通过图2的系统200的一些组件来执行。在框1401处,在一个实施例中,过程1400的处理逻辑可以动态地跟踪已发射代码流中的非可信代码与可信代码的比例(例如,以将下一代码发射到代码流),以便生成可执行代码。过程1400的处理逻辑可在运行时期间将源代码(例如,JavaScript代码)编译成可执行代码。
在框1403处,过程1400的处理逻辑可以确定准备用于发射的下一代码是否可信。例如,下一代码可为紧接编译代码中已发射代码流的代码块(例如,指令)。下一代码可能不可信,例如具有从不可信源代码(接收或检索自未验证的源)创建或指定的值或常量。作为另外一种选择,由编译器创建或控制的值(例如编程语言的内置常量)可以被信任。
如果在框1405处下一代码不可信,则过程1400的处理逻辑可以随机地确定是否例如基于被动态跟踪的非可信代码与可信代码的比例来更改下一代码。过程1400的处理逻辑可以选择性地执行随机化操作以随机化或更改下一代码,从而允许对已发射代码流中的随机化量进行非确定性调整以便提高随机化编译代码的执行性能。例如,非可信代码的比例越高,可随机化下一代码的可能性就越大。
在框1407处,如果选择下一代码进行随机化,则过程1400的处理逻辑可对下一代码执行一个或多个随机化操作以隐藏嵌入在下一代码中的潜在非可信可执行指令。随机化操作可为常量盲化操作、NOP填充操作、指令随机化操作、或用于下一代码的其他合适操作。在框1409处,过程1400的处理逻辑可以将随机化代码发射到用于执行的代码流。
图15A-15B示出了根据本文所述某些实施例的采用分散随机化操作的即时编译的例子。现在转到图15A,代码块(或指令)1501可包括非可信恒定值1。可选择性地应用随机化操作(例如常量盲化操作)以使用任意数57382将代码块1501随机化或更改为代码块1503,从而执行与块1501相同的函数。通过代码块1501中的非可信值1嵌入的潜在隐藏可执行指令可被防止在代码块1503中执行。
实例1500B描述了用于选择性地随机化编译代码以按成本有效方式引入可预测性的示例性操作。在1505处,基于当前在编译代码流中遇到的非可信值的总数(或字节数)以及可信值的总数,针对非可信内容与可信内容的比例来计算启发式测度。在1507处,执行随机选择以确定是否应用随机操作以随机化要发射的代码(或硬化某个值)。在一个实施例中,由于非可信内容的比例变高,因此随机化代码的可能性可增大。通过在1507处包含随机数,选择操作、进而已发射的编译代码可变得不确定或不可预测。
在一些实施例中,可以估算非可信代码的比例以指示非可信代码大小与当前遇到的代码(可信代码和非可信代码两者)的总大小的比率。1507处的函数randomNumber可返回介于0和1之间的随机值。在一个实施例中,如果所指示的比率大于所返回的随机值,则当前非可信代码可被硬化(或随机化)。从而,非可信代码的比例越高,可硬化当前非可信代码以用于发射的可能性就越大。
在一个实施例中,函数发射(例如,在1509处)可将字节一直传输到指令流而无需修改。1511处的函数emitHardenedValue可以执行一个或多个随机化操作以硬化正被发射的值。所应用的随机化操作可以不被攻击者所预测。1513处的函数decayUntrustedByteCount可以应用衰减因子来调节(例如,动态地减少)所遇到的非可信值的总数(例如,untrustedBytes)。
实例1500B可包括可配置的参数或函数,所述可配置的参数或函数基于启发式地确定的环境设置(例如,基于源代码的接收位置、主机操作系统的版本、用户输入或其他适用的设置)以调节例如攻击者防护效果与代码执行效率。例如,可应用1513处的衰减因子以防止惩罚所有大的代码段,因为由攻击者植入的潜在隐藏非可信代码可能已在发射硬化值之前被破坏。在不应用衰减因子(例如,decayUntrustedByteCount)的情况下,实例1500B中的操作可能最终进入编译代码的几乎所有值均被硬化的状态。相似地,非可信值的总数的快速衰减可能会导致对于要发起成功攻击的攻击者而言足够大的非硬化值流。从而,行1513处的decayUntrustedByteCount可应用已被确定适用于目标环境的衰减因子,例如,通过1507处环境设置的EnviornmentSafetyHeuristic。
图16示出了诸如计算机系统的数据处理系统的一个例子,该数据处理系统可与本发明的一个实施例一起使用。例如,图2的系统2可被实现为图16所示系统的一部分。需注意,虽然图16示出了计算机系统的各种组件,它并不旨在表示使这些组件互连的任何特定构造或方式,因此这些细节与本发明并无密切关系。还应理解,具有较少组件或可能较多组件的网络计算机以及其他数据处理系统也可用于本发明。
如图16所示,数据处理系统形式的计算机系统1600包括联接到一个或多个微处理器1605、ROM(只读存储器)1607、易失性RAM 1609和非易失性存储器1611的总线1603。微处理器1605可从存储器1607,1609,1611检索指令并执行所述指令以执行上述操作。总线1603与这些各种组件互连在一起,并且将这些组件1605,1607,1609和1611互连至显示控制器和显示设备1613,以及互连至诸如输入/输出(I/O)设备的外围设备,该输入/输出(I/O)设备可以是鼠标、键盘、调制解调器、网络接口、打印机和本领域熟知的其他设备。通常,输入/输出设备1615通过输入/输出控制器1617联接到系统。易失性RAM(随机存取存储器)1609通常被实现为动态RAM(DRAM),其需要连续供电以刷新或维持存储器中的数据。
大容量存储器1611通常为磁性硬盘驱动器或磁性光驱或光驱或DVDRAM或闪存存储器或者即使在系统断电后也保持数据(例如,大量数据)的其他类型的存储器系统。通常,大容量存储器1611也可以是随机存取存储器,虽然这并非必需。虽然图16显示,大容量存储器1611是直接联接到数据处理系统中的其余组件的本地设备,但应当理解,本发明可利用远离系统的非易失性存储器,例如网络存储设备,其通过例如调制解调器或以太网接口或无线网络接口等网络接口联接到数据处理系统。总线1603可包括一条或多条总线,其通过本领域熟知的各种桥接器、控制器和/或适配器相互连接。
上述内容的多个部分可使用诸如专用逻辑电路的逻辑电路实现,或使用微控制器或执行程序代码指令的处理核心的其他形式实现。从而,可使用诸如机器可执行指令的程序代码来执行上述讨论所教导的过程,所述机器可执行指令使机器执行这些指令以执行某些函数。在该上下文中,“机器”可为将中间形式(或“抽象”)指令转换为处理器专用指令(例如,诸如“虚拟机”(例如,Java虚拟机)、解译器、公共语言运行时、高级语言虚拟机等的抽象执行环境)的机器,和/或设置在半导体芯片(例如,使用晶体管实现的“逻辑电路”)上的电子电路,其设计用于执行诸如通用处理器和/或专用处理器的指令。上述讨论所教导的过程也可以通过(作为机器的替代或与机器结合)电子电路执行,该电子电路设计用于执行过程(或其一部分)而不执行程序代码。
制造的制品可用于存储程序代码。存储程序代码的制造的制品可体现为但不限于一个或多个存储器(例如,一个或多个闪存存储器、随机存取存储器(静态、动态或其他))、光盘、CD-ROM、DVD ROM、EPROM、EEPROM、磁卡或光卡、或适用于存储电子指令的其他类型的机器可读介质。也可借助于包含在传播介质(例如,通过通信链路(例如网络连接))中的数据信号将程序代码从远程计算机(例如,服务器)下载到请求计算机(例如,客户端)。
已按照对计算机存储器中的数据位进行操作的算法和符号表示来呈现前面的详细描述。这些算法描述和表示是数据处理领域技术人员所用的工具,而这些工具也能最有效地将其工作实质传达给该领域其他技术人员。算法在本文中并且通常被认为是引导至所需结果的自相一致的操作序列。操作是需要实际操控物理量的那些操作。通常,尽管不是必须的,这些量采用能够被存储、传输、组合、比较以及换句话讲操纵的电信号或磁信号的形式。已被证明的是,其在主要出于通用原因而将这些信号指代为位、值、元素、符号、字符、项、数字等时是方便的。
然而,应当牢记的是,所有这些以及类似的术语都与适当的物理量相关联,并且只是应用于这些量的方便标签。除非另外特别说明,否则从上述讨论中显而易见的是,可以理解,在整个说明书中,使用例如诸如“处理”或“运算”或“计算”或“确定”或“显示”等术语的讨论是指计算机系统或类似的电子计算设备的操作和流程,其可对计算机系统寄存器和存储器中表示为物理(电子)量的数据进行操作,并将其转换成在计算机系统存储器或寄存器或其他此类信息存储、传输或显示设备中相似地显示为物理量的其他数据。
本发明还涉及一种用于执行本文所述操作的装置。该装置可专门构造用于所需的目的,或者其可以包括由存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。此类计算机程序可存储在计算机可读存储介质中,例如但不限于任何类型的盘,包括软盘、光盘、CD-ROM和磁光盘,只读存储器(ROM)、RAM、EPROM、EEPROM、磁卡或光卡、或适合用于存储电子指令的任何类型的介质,并且每个均联接到计算机系统总线。
本文中所呈现的过程和显示并不固有地与任何特定计算机或其他装置相关。根据本文的教导内容,各种通用系统可以与程序一起使用,或者可以证明其便于构造用于执行所述操作的更专用的装置。根据下文的描述,用于各种这些系统的所需结构将是显而易见的。此外,本发明未参照任何特定的编程语言进行描述。应当理解,多种编程语言可用于实现如本文所述的本发明的教导内容。
前面的讨论仅描述了本发明的一些示例性实施例。本领域的技术人员将易于从这些讨论、附图和权利要求书中认识到,可在不脱离本发明的实质和范围的情况下进行各种修改。
Claims (15)
1.一种用于运行时编译的计算机实现的方法,包括:
针对与第一键相关联的源代码的多个部分推测生成编译代码,其中,从所述源代码编译的代码包括推测生成的所述编译代码;
利用运行时状态在运行时期间执行从所述源代码编译的所述代码,其中所述运行时状态包括用一个或多个键索引的一个或多个散列数据,所述一个或多个键包含所述第一键,其中所述第一键具有元数据,所述元数据描述与所述运行时状态下的所述散列数据有关的所述第一键的一个或多个全局属性的断言;
更新所述第一键的元数据以保持所述第一键的全局属性与所述运行时状态之间的一致性;
确定与所述第一键相关联的所述推测生成的编译代码是否因所述第一键的已更新的元数据而失效,以保证所述推测生成的编译代码具有可靠性,而不会在所述散列数据上引发查找操作;以及
如果所述推测生成的编译代码失效,针对与所述第一键相关联的所述源代码的所述多个部分更新从所述源代码编译的所述代码,其中执行已更新的代码而不执行所述推测生成的编译代码。
2.根据权利要求1所述的方法,其中使用被导向所述推测生成的编译代码的执行路径来执行从所述源代码编译的所述代码而不执行查找操作,并且其中执行已更新的代码以重新导向来自所述推测生成的编译代码的所述执行路径,所述重新导向的执行路径包括在所述运行时状态的所述散列数据中的查找操作。
3.根据权利要求1所述的方法,其中所述第一键的所述全局属性具有值,并且其中所述确定与所述第一键相关联的所述推测生成的编译代码是否因所述第一键的已更新的元数据而失效基于所述值是否满足指示所述第一键当前未在运行时状态下的现有数据对象的任何一者中被使用或标引的条件。
4.根据权利要求3所述的方法,其中所述推测生成的编译代码基于所述第一键的所述全局属性的初始值。
5.根据权利要求4所述的方法,其中所述第一键的所述全局属性指示是否在所述运行时状态下使用所述第一键来索引所述散列数据,并且其中具有所述初始值的所述全局属性指示所述第一键当前未在所述运行时状态下使用。
6.根据权利要求1所述的方法,其中根据从所述源代码编译的所述代码的所述执行来更新所述运行时状态下的所述一个或多个散列数据,并且其中根据已更新的所述一个或多个散列数据来更新所述元数据以保持所述一致性。
7.根据权利要求1所述的方法,其中所述第一键从所述源代码进行概要分析。
8.一种用于运行时编译的系统,包括:
用于针对与第一键相关联的源代码的多个部分推测生成编译代码的装置,其中,从所述源代码编译的代码包括推测生成的所述编译代码;
用于利用运行时状态在运行时期间执行从所述源代码编译的所述代码的装置,其中所述运行时状态包括用一个或多个键索引的一个或多个散列数据,所述一个或多个键包含所述第一键,其中所述第一键具有元数据,所述元数据描述与所述运行时状态下的所述散列数据有关的所述第一键的一个或多个全局属性的断言;
用于更新所述第一键的元数据以保持所述第一键的全局属性与所述运行时状态之间的一致性的装置;
用于确定与所述第一键相关联的所述推测生成的编译代码是否因所述第一键的已更新的元数据而失效,以保证所述推测生成的编译代码具有可靠性,而不会在所述散列数据上引发查找操作的装置;以及
用于如果所述推测生成的编译代码失效则针对与所述第一键相关联的所述源代码的所述多个部分更新从所述源代码编译的所述代码的装置,其中执行已更新的代码而不执行所述推测生成的编译代码。
9.根据权利要求8所述的系统,其中使用被导向所述推测生成的编译代码的执行路径来执行从所述源代码编译的所述代码而不执行查找操作,并且其中执行已更新的代码以重新导向来自所述推测生成的编译代码的所述执行路径,所述重新导向的执行路径包括在所述运行时状态的所述散列数据中的查找操作。
10.根据权利要求8所述的系统,其中所述第一键的所述全局属性具有值,并且其中所述确定与所述第一键相关联的所述推测生成的编译代码是否因所述第一键的已更新的元数据而失效基于所述值是否满足指示所述第一键当前未在运行时状态下的现有数据对象的任何一者中被使用或标引的条件。
11.根据权利要求10所述的系统,其中所述推测生成的编译代码基于所述第一键的所述全局属性的初始值。
12.根据权利要求11所述的系统,其中所述第一键的所述全局属性指示是否在所述运行时状态下使用所述第一键来索引所述散列数据,并且其中具有所述初始值的所述全局属性指示所述第一键当前未在所述运行时状态下使用。
13.根据权利要求8所述的系统,其中根据从所述源代码编译的所述代码的所述执行来更新所述运行时状态下的所述一个或多个散列数据,并且其中根据已更新的所述一个或多个散列数据来更新所述元数据以保持所述一致性。
14.根据权利要求8所述的系统,其中所述第一键从所述源代码进行概要分析。
15.一种用于运行时编译的计算机系统,包括:
存储可执行指令的存储器,所述可执行指令包括从源代码编译的代码;
动态地获取所述源代码的接口;和
联接到所述存储器和所述接口以执行所述指令的处理系统,所述处理系统被配置为执行如权利要求1-7中任一项所述的方法。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261594983P | 2012-02-03 | 2012-02-03 | |
US61/594,983 | 2012-02-03 | ||
US201261599309P | 2012-02-15 | 2012-02-15 | |
US61/599,309 | 2012-02-15 | ||
US13/725,281 | 2012-12-21 | ||
US13/725,281 US9027010B2 (en) | 2012-02-03 | 2012-12-21 | Runtime optimization using meta data for dynamic programming languages |
PCT/US2013/024198 WO2013116555A1 (en) | 2012-02-03 | 2013-01-31 | Runtime optimization using meta data for dynamic programming languages |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104081350A CN104081350A (zh) | 2014-10-01 |
CN104081350B true CN104081350B (zh) | 2017-06-23 |
Family
ID=48904049
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380007185.2A Active CN104081350B (zh) | 2012-02-03 | 2013-01-31 | 使用动态编程语言的元数据的运行时优化方法和系统 |
CN201380007188.6A Active CN104081361B (zh) | 2012-02-03 | 2013-01-31 | 动态编程语言的基于跟踪器的运行时优化 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380007188.6A Active CN104081361B (zh) | 2012-02-03 | 2013-01-31 | 动态编程语言的基于跟踪器的运行时优化 |
Country Status (4)
Country | Link |
---|---|
US (4) | US9128732B2 (zh) |
CN (2) | CN104081350B (zh) |
GB (2) | GB2513049A (zh) |
WO (2) | WO2013116551A1 (zh) |
Families Citing this family (71)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8863094B2 (en) * | 2010-05-18 | 2014-10-14 | International Business Machines Corporation | Framework for a software error inject tool |
US9934166B2 (en) | 2010-12-10 | 2018-04-03 | Daniel Shawcross Wilkerson | Hard object: constraining control flow and providing lightweight kernel crossings |
US8819653B2 (en) * | 2012-01-30 | 2014-08-26 | Cisco Technology, Inc. | Automated improvement of executable applications based on evaluating independent execution heuristics |
JP2014075046A (ja) * | 2012-10-04 | 2014-04-24 | International Business Maschines Corporation | トレース生成方法、装置、プログラム、及び該方法を利用したマルチレベルのコンパイレーション |
US8930920B2 (en) * | 2012-12-31 | 2015-01-06 | Oracle International Corporation | Self-optimizing interpreter and snapshot compilation |
US9276829B2 (en) * | 2013-02-07 | 2016-03-01 | International Business Machines Corporation | Transparently tracking provenance information in distributed data systems |
US9052888B2 (en) | 2013-02-21 | 2015-06-09 | International Business Machines Corporation | Vectorization in an optimizing compiler |
US9552195B2 (en) * | 2013-03-08 | 2017-01-24 | Facebook, Inc. | Enlarging control regions to optimize script code compilation |
US9569612B2 (en) | 2013-03-14 | 2017-02-14 | Daniel Shawcross Wilkerson | Hard object: lightweight hardware enforcement of encapsulation, unforgeability, and transactionality |
US9015834B2 (en) * | 2013-03-15 | 2015-04-21 | Cisco Technology, Inc. | Mitigating just-in-time spraying attacks in a network environment |
US9256398B2 (en) * | 2013-03-15 | 2016-02-09 | Fujitsu Limited | Device and method of increasing dynamically-typed software efficiency |
US9251071B2 (en) * | 2013-08-30 | 2016-02-02 | Apple Inc. | Concurrent inline cache optimization in accessing dynamically typed objects |
GB2519516B (en) * | 2013-10-21 | 2017-05-10 | Openwave Mobility Inc | A method, apparatus and computer program for modifying messages in a communications network |
US9250937B1 (en) * | 2013-11-06 | 2016-02-02 | The Regents Of The University Of California | Code randomization for just-in-time compilers |
US9207914B2 (en) | 2013-12-20 | 2015-12-08 | Microsoft Technology Licensing, Llc | Execution guards in dynamic programming |
US9104434B2 (en) | 2013-12-20 | 2015-08-11 | Microsoft Technology Licensing, Llc | Property accesses in dynamically typed programming languages |
US9710388B2 (en) | 2014-01-23 | 2017-07-18 | Qualcomm Incorporated | Hardware acceleration for inline caches in dynamic languages |
US9740504B2 (en) | 2014-01-23 | 2017-08-22 | Qualcomm Incorporated | Hardware acceleration for inline caches in dynamic languages |
US9465723B2 (en) * | 2014-10-27 | 2016-10-11 | Software Ag Usa, Inc. | Systems and/or methods for monitoring live software |
US9864582B2 (en) * | 2014-11-14 | 2018-01-09 | Cavium, Inc. | Code processor to build orthogonal execution blocks for programmable network devices |
US9754112B1 (en) | 2014-11-24 | 2017-09-05 | Bluerisc, Inc. | Detection and healing of vulnerabilities in computer code |
US9411964B1 (en) * | 2014-11-24 | 2016-08-09 | Bluerisc, Inc. | Characterizing, detecting and healing vulnerabilities in computer code |
US9921859B2 (en) * | 2014-12-12 | 2018-03-20 | The Regents Of The University Of Michigan | Runtime compiler environment with dynamic co-located code execution |
US9420027B1 (en) * | 2015-04-27 | 2016-08-16 | Wowza Media Systems, LLC | Systems and methods of communicating platform-independent representation of source code |
CN105095071B (zh) * | 2015-06-30 | 2018-03-23 | 百度在线网络技术(北京)有限公司 | 一种用于获得应用的场景性能信息方法、装置和系统 |
CN105183642B (zh) * | 2015-08-18 | 2018-03-13 | 中国人民解放军信息工程大学 | 基于插桩的程序行为获取及结构分析方法 |
US10032031B1 (en) * | 2015-08-27 | 2018-07-24 | Amazon Technologies, Inc. | Detecting unknown software vulnerabilities and system compromises |
US10454889B2 (en) * | 2015-10-26 | 2019-10-22 | Oath Inc. | Automatic anomaly detection framework for grid resources |
US10180829B2 (en) * | 2015-12-15 | 2019-01-15 | Nxp Usa, Inc. | System and method for modulo addressing vectorization with invariant code motion |
CN106919370B (zh) * | 2015-12-24 | 2020-04-17 | 北京国双科技有限公司 | 一种对象属性值的获取方法及装置 |
US9495137B1 (en) * | 2015-12-28 | 2016-11-15 | International Business Machines Corporation | Methods and systems for improving responsiveness of analytical workflow runtimes |
US20170192781A1 (en) * | 2015-12-30 | 2017-07-06 | Robert Valentine | Systems, Apparatuses, and Methods for Strided Loads |
US10067853B2 (en) * | 2016-03-15 | 2018-09-04 | Ca, Inc. | Generating a directed graph representing application program execution flow from an execution trace |
US10402306B2 (en) * | 2016-05-17 | 2019-09-03 | Futurewei Technologies, Inc. | Parallel tracing |
US10635420B2 (en) | 2016-07-12 | 2020-04-28 | Oracle International Corporation | Overriding a migrated method in an updated type |
US10225075B1 (en) | 2016-08-15 | 2019-03-05 | Bluerisc, Inc. | Transmitting content to promote privacy |
US10230702B1 (en) | 2016-08-15 | 2019-03-12 | Bluerisc, Inc. | Encrypting content and facilitating legal access to the encrypted content |
US10706144B1 (en) | 2016-09-09 | 2020-07-07 | Bluerisc, Inc. | Cyber defense with graph theoretical approach |
US10025563B2 (en) * | 2016-09-14 | 2018-07-17 | International Business Machines Corporation | Selecting COBOL perform statements for inlining |
US10203940B2 (en) * | 2016-12-15 | 2019-02-12 | Microsoft Technology Licensing, Llc | Compiler with type inference and target code generation |
US10423397B2 (en) * | 2016-12-29 | 2019-09-24 | Grammatech, Inc. | Systems and/or methods for type inference from machine code |
US10891326B2 (en) * | 2017-01-05 | 2021-01-12 | International Business Machines Corporation | Representation of a data analysis using a flow graph |
US10388039B2 (en) | 2017-05-31 | 2019-08-20 | International Business Machines Corporation | Accelerating data-driven scientific discovery |
US10891219B1 (en) | 2017-08-07 | 2021-01-12 | Electronic Arts Inc. | Code failure prediction system |
US10949325B1 (en) | 2017-08-18 | 2021-03-16 | Electronic Arts Inc. | Automated cross-session video game testing |
US10642971B2 (en) * | 2017-09-04 | 2020-05-05 | Cisco Technology, Inc. | Methods and systems for ensuring program code flow integrity |
US11055074B2 (en) * | 2017-11-13 | 2021-07-06 | Ab Initio Technology Llc | Key-based logging for processing of structured data items with executable logic |
US10547522B2 (en) * | 2017-11-27 | 2020-01-28 | International Business Machines Corporation | Pre-starting services based on traversal of a directed graph during execution of an application |
CN108470072B (zh) * | 2018-03-30 | 2019-07-09 | 迅讯科技(北京)有限公司 | 一种查询编译方法和装置 |
US11860996B1 (en) * | 2018-04-06 | 2024-01-02 | Apple Inc. | Security concepts for web frameworks |
US10747645B2 (en) * | 2018-04-27 | 2020-08-18 | Microsoft Technology Licensing, Llc | Selectively tracing portions of computer process execution |
US10552185B2 (en) | 2018-05-24 | 2020-02-04 | International Business Machines Corporation | Lightweight and precise value profiling |
US20200089594A1 (en) * | 2018-09-19 | 2020-03-19 | Electronic Arts Inc. | Artificial intelligence for load testing |
US10684835B1 (en) * | 2018-12-11 | 2020-06-16 | Microsoft Technology Licensing, Llc | Improving emulation and tracing performance using compiler-generated emulation optimization metadata |
US10901878B2 (en) | 2018-12-19 | 2021-01-26 | International Business Machines Corporation | Reduction of pseudo-random test case generation overhead |
US11036852B2 (en) * | 2019-03-14 | 2021-06-15 | LGS Innovations LLC | System and method for software diversification |
EP4022454A1 (en) * | 2019-08-30 | 2022-07-06 | Mosys, Inc. | Graph memory engine |
US11880669B2 (en) | 2019-10-08 | 2024-01-23 | Intel Corporation | Reducing compiler type check costs through thread speculation and hardware transactional memory |
US11221835B2 (en) | 2020-02-10 | 2022-01-11 | International Business Machines Corporation | Determining when to perform and performing runtime binary slimming |
US11537372B2 (en) * | 2020-03-25 | 2022-12-27 | ManyCore Corporation | Generating compilable machine code programs from dynamic language code |
US11179644B2 (en) | 2020-03-30 | 2021-11-23 | Electronic Arts Inc. | Videogame telemetry data and game asset tracker for session recordings |
US11446570B2 (en) | 2020-05-08 | 2022-09-20 | Electronic Arts Inc. | Automated test multiplexing system |
US12066883B2 (en) | 2020-05-19 | 2024-08-20 | Electronic Arts Inc. | Glitch detection system |
CN111767055A (zh) * | 2020-06-16 | 2020-10-13 | 合肥本源量子计算科技有限责任公司 | 一种量子程序的编译方法及装置 |
CN111770170B (zh) * | 2020-06-29 | 2023-04-07 | 北京百度网讯科技有限公司 | 请求处理方法、装置、设备和计算机存储介质 |
US11301218B2 (en) | 2020-07-29 | 2022-04-12 | Bank Of America Corporation | Graph-based vectorization for software code optimization references |
US11256488B1 (en) | 2020-07-29 | 2022-02-22 | Bank Of America Corporation | Graph-based vectorization for software code optimizations |
CN112784271B (zh) * | 2021-01-21 | 2022-07-22 | 国网河南省电力公司电力科学研究院 | 一种电力工控系统的控制软件逆向分析方法 |
FR3120717B1 (fr) * | 2021-03-09 | 2023-02-10 | Commissariat Energie Atomique | Procédé d'exécution d'un code binaire d'un programme d'ordinateur par un microprocesseur |
US20220350613A1 (en) * | 2021-04-30 | 2022-11-03 | Oracle International Corporation | Processor Supporting Self-Relative Addressing Modes |
US20230027823A1 (en) * | 2021-07-20 | 2023-01-26 | Raytheon Company | Anti-fragile software systems |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1752934A (zh) * | 2004-09-22 | 2006-03-29 | 松下电器产业株式会社 | 编译器、编译方法以及编译程序 |
CN1848088A (zh) * | 2005-02-18 | 2006-10-18 | 国际商业机器公司 | 将本机接口函数调用转换为更简单操作的方法和系统 |
US7725885B1 (en) * | 2000-05-09 | 2010-05-25 | Hewlett-Packard Development Company, L.P. | Method and apparatus for trace based adaptive run time compiler |
US7802236B2 (en) * | 2002-09-09 | 2010-09-21 | The Regents Of The University Of California | Method and apparatus for identifying similar regions of a program's execution |
Family Cites Families (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5283878A (en) * | 1990-07-31 | 1994-02-01 | Top Level, Inc. | Method and apparatus for encoding data types for object identification |
US5428761A (en) * | 1992-03-12 | 1995-06-27 | Digital Equipment Corporation | System for achieving atomic non-sequential multi-word operations in shared memory |
US5845331A (en) | 1994-09-28 | 1998-12-01 | Massachusetts Institute Of Technology | Memory system including guarded pointers |
US5940618A (en) | 1997-09-22 | 1999-08-17 | International Business Machines Corporation | Code instrumentation system with non intrusive means and cache memory optimization for dynamic monitoring of code segments |
AU2001269354A1 (en) | 2000-05-12 | 2001-11-20 | Xtreamlok Pty. Ltd. | Information security method and system |
US6785687B2 (en) * | 2001-06-04 | 2004-08-31 | Hewlett-Packard Development Company, L.P. | System for and method of efficient, expandable storage and retrieval of small datasets |
US7107430B2 (en) | 2001-06-19 | 2006-09-12 | Massachusetts Institute Of Technology | Mechanism to reduce the cost of forwarding pointer aliasing |
US20030126590A1 (en) | 2001-12-28 | 2003-07-03 | Michael Burrows | System and method for dynamic data-type checking |
US7254810B2 (en) * | 2002-04-18 | 2007-08-07 | International Business Machines Corporation | Apparatus and method for using database knowledge to optimize a computer program |
US7181580B2 (en) | 2003-03-27 | 2007-02-20 | International Business Machines Corporation | Secure pointers |
US7228534B2 (en) * | 2003-06-14 | 2007-06-05 | Intel Corporation | Optimizing performance of a program or a computer system |
US7366914B2 (en) | 2003-08-29 | 2008-04-29 | Intel Corporation | Source code transformation based on program operators |
GB2407403A (en) * | 2003-10-22 | 2005-04-27 | Ibm | Validating a variable data item in a software routine |
US7996671B2 (en) | 2003-11-17 | 2011-08-09 | Bluerisc Inc. | Security of program executables and microprocessors based on compiler-architecture interaction |
US20070061790A1 (en) | 2005-09-13 | 2007-03-15 | Steeve Kay | Partially compiled data security software |
US20070079294A1 (en) * | 2005-09-30 | 2007-04-05 | Robert Knight | Profiling using a user-level control mechanism |
US7840950B2 (en) | 2006-03-09 | 2010-11-23 | International Business Machines Corporation | Programmatic compiler optimization of glacial constants |
US7804503B2 (en) | 2006-05-15 | 2010-09-28 | Microsoft Corporation | Animating objects using metadata |
CN100541445C (zh) * | 2006-11-17 | 2009-09-16 | 深圳市领测科技有限公司 | 一种程序调测系统及方法 |
US20080127142A1 (en) * | 2006-11-28 | 2008-05-29 | Microsoft Corporation | Compiling executable code into a less-trusted address space |
US8494832B2 (en) * | 2007-06-20 | 2013-07-23 | Sanjeev Krishnan | Method and apparatus for software simulation |
US8250590B2 (en) | 2007-07-13 | 2012-08-21 | International Business Machines Corporation | Apparatus, system, and method for seamless multiple format metadata abstraction |
US8645933B2 (en) * | 2008-08-01 | 2014-02-04 | Leon Schwartz | Method and apparatus for detection and optimization of presumably parallel program regions |
JP5217870B2 (ja) * | 2008-10-07 | 2013-06-19 | 富士通株式会社 | プログラム性能測定装置、方法、プログラム、プログラム記録媒体 |
US9250938B2 (en) | 2008-10-15 | 2016-02-02 | Microsoft Technology Licensing, Llc | Caching runtime generated code |
US20100325607A1 (en) * | 2009-06-17 | 2010-12-23 | Microsoft Corporation | Generating Code Meeting Approved Patterns |
WO2011049553A1 (en) | 2009-10-20 | 2011-04-28 | Hewlett-Packard Development Company, L.P. | Universally unique semantic identifiers |
US20110138373A1 (en) * | 2009-12-08 | 2011-06-09 | American National Laboratories, Inc. | Method and apparatus for globally optimizing instruction code |
EP2553570B1 (en) * | 2010-03-31 | 2018-08-15 | Irdeto B.V. | Method for linking and loading to protect applications |
US8359291B2 (en) * | 2010-06-08 | 2013-01-22 | International Business Machines Corporation | Architecture-aware field affinity estimation |
US8522222B2 (en) | 2010-06-21 | 2013-08-27 | Microsoft Corporation | Tracing just-in-time compilation with pointers to local variables |
US9146759B2 (en) | 2010-07-30 | 2015-09-29 | Apple Inc. | Assumption-based compilation |
US20120131559A1 (en) * | 2010-11-22 | 2012-05-24 | Microsoft Corporation | Automatic Program Partition For Targeted Replay |
US9460290B2 (en) * | 2011-07-19 | 2016-10-04 | Elwha Llc | Conditional security response using taint vector monitoring |
US9336125B2 (en) * | 2011-08-24 | 2016-05-10 | University Of Washington Through Its Center For Commercialization | Systems and methods for hardware-assisted type checking |
-
2012
- 2012-09-14 US US13/619,814 patent/US9128732B2/en active Active
- 2012-09-14 US US13/619,803 patent/US8972952B2/en active Active
- 2012-12-18 US US13/719,068 patent/US9003384B2/en active Active
- 2012-12-21 US US13/725,281 patent/US9027010B2/en active Active
-
2013
- 2013-01-31 GB GB1412791.4A patent/GB2513049A/en not_active Withdrawn
- 2013-01-31 CN CN201380007185.2A patent/CN104081350B/zh active Active
- 2013-01-31 GB GB1412793.0A patent/GB2512784A/en not_active Withdrawn
- 2013-01-31 WO PCT/US2013/024193 patent/WO2013116551A1/en active Application Filing
- 2013-01-31 WO PCT/US2013/024198 patent/WO2013116555A1/en active Application Filing
- 2013-01-31 CN CN201380007188.6A patent/CN104081361B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7725885B1 (en) * | 2000-05-09 | 2010-05-25 | Hewlett-Packard Development Company, L.P. | Method and apparatus for trace based adaptive run time compiler |
US7802236B2 (en) * | 2002-09-09 | 2010-09-21 | The Regents Of The University Of California | Method and apparatus for identifying similar regions of a program's execution |
CN1752934A (zh) * | 2004-09-22 | 2006-03-29 | 松下电器产业株式会社 | 编译器、编译方法以及编译程序 |
CN1848088A (zh) * | 2005-02-18 | 2006-10-18 | 国际商业机器公司 | 将本机接口函数调用转换为更简单操作的方法和系统 |
Non-Patent Citations (1)
Title |
---|
Trace-based Just-in-Time Type Specialization for Dynamic Languages;Andreas Gal etc.;《Acm Sigplan Notices》;20090630;第44卷(第6期期);第465-478页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104081361A (zh) | 2014-10-01 |
US9027010B2 (en) | 2015-05-05 |
WO2013116555A1 (en) | 2013-08-08 |
US8972952B2 (en) | 2015-03-03 |
US20130205286A1 (en) | 2013-08-08 |
US20130205285A1 (en) | 2013-08-08 |
US20130205281A1 (en) | 2013-08-08 |
GB201412793D0 (en) | 2014-09-03 |
US9128732B2 (en) | 2015-09-08 |
GB201412791D0 (en) | 2014-09-03 |
CN104081350A (zh) | 2014-10-01 |
GB2512784A (en) | 2014-10-08 |
US9003384B2 (en) | 2015-04-07 |
CN104081361B (zh) | 2016-08-17 |
WO2013116551A1 (en) | 2013-08-08 |
GB2513049A (en) | 2014-10-15 |
US20130205388A1 (en) | 2013-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104081350B (zh) | 使用动态编程语言的元数据的运行时优化方法和系统 | |
Musch et al. | New Kid on the Web: A Study on the Prevalence of WebAssembly in the Wild | |
Huang et al. | Hunting vulnerable smart contracts via graph embedding based bytecode matching | |
Peled et al. | Semantic locality and context-based prefetching using reinforcement learning | |
CN104461464B (zh) | 用于微处理器的动态重设方法 | |
US11004003B2 (en) | Machine learning based exploit detection | |
CN104199636A (zh) | 微处理器和用于一微处理器的检测方法 | |
Yuste et al. | Optimization of code caves in malware binaries to evade machine learning detectors | |
Bian et al. | SinkFinder: harvesting hundreds of unknown interesting function pairs with just one seed | |
Hara et al. | Machine-learning approach using solidity bytecode for smart-contract honeypot detection in the ethereum | |
CN110417751B (zh) | 一种网络安全预警方法、装置和存储介质 | |
Liao et al. | Smartstate: Detecting state-reverting vulnerabilities in smart contracts via fine-grained state-dependency analysis | |
Li et al. | Faire: Repairing fairness of neural networks via neuron condition synthesis | |
Wang et al. | Tunter: assessing exploitability of vulnerabilities with taint-guided exploitable states exploration | |
Huang et al. | Precise dynamic symbolic execution for nonuniform data access in smart contracts | |
Zhao et al. | AMSFuzz: An adaptive mutation schedule for fuzzing | |
Rong et al. | Int egrity: Finding Integer Errors by Targeted Fuzzing | |
Santos et al. | Leveraging speculative architectures for runtime program validation | |
Kiciman et al. | Ajaxscope: A platform for remotely monitoring the client-side behavior of web 2.0 applications | |
US9606783B2 (en) | Dynamic code selection based on data policies | |
Zheng et al. | A domain knowledge-guided lightweight approach for security bug reports prediction | |
Ding et al. | ABOR: an automatic framework for buffer overflow removal in c/c++ programs | |
Li et al. | Feasibility Analysis and Performance Optimization of the Conflict Test Algorithms for Searching Eviction Sets | |
Pal et al. | Camouflage: Utility-Aware Obfuscation for Accurate Simulation of Sensitive Program Traces | |
Hashwanth et al. | Effective Ransomware Detection Method Using PE Header and YARA Rules |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |