CN105849698B - 动态编程中的执行防护 - Google Patents
动态编程中的执行防护 Download PDFInfo
- Publication number
- CN105849698B CN105849698B CN201480069786.0A CN201480069786A CN105849698B CN 105849698 B CN105849698 B CN 105849698B CN 201480069786 A CN201480069786 A CN 201480069786A CN 105849698 B CN105849698 B CN 105849698B
- Authority
- CN
- China
- Prior art keywords
- protection
- value
- code
- machine code
- deactivated
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- 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/45529—Embedded in an application, e.g. JavaScript in a Web browser
-
- 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
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
- G06F9/4491—Optimising based on receiver type
-
- 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
-
- 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
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
Abstract
揭示了用于基于动态语言执行机器代码的方法。执行防护被创建为存储在数据结构中的值。该值代表机器代码的可重新使用部分的预期条件或条件集。代表所预期的条件的值与在机器代码的一部分的执行期间遇到的实际值进行比较。如果实际值对应于代表所预期的条件的值,则可重新使用的机器代码被执行。如果任何预期的条件改变,则执行防护被无效。
Description
背景
动态语言已经在web编程中变得普遍。作为示例,JavaScript已经因其灵活性、易于原型制作、以及可移植性而变成了针对客户端侧应用的选择的语言。由于web应用变得更加复杂,计算正越来越多被委托到客户端侧以减少网络流量并改善用户体验。由于各种原因,诸如JavaScript可容易地分布,因此JavaScript也在服务器侧编程、游戏开发、以及桌面应用的创建中变得普遍。
在JavaScript中,以及其它动态语言中,变量类型可在运行时被改变。因此,动态语言编译器或引擎通常不生成专用于一种类型的机器代码。相反,动态语言编译器通常发出被适配来与各种类型组合一起运行的类属代码、或字节码。相反,以更加传统的语言(诸如C或C++写的程序)包括类型信息,并且编译器可为指定类型提供通用机器代码。来自动态语言编译器的字节码通过解释器来执行,其可显著慢于指定类型的机器代码的执行。简单动态语言脚本的执行低效率对用户而言相对不易察觉。然而,在更加计算密集的应用中,这些执行低效率可能不利地影响用户体验。
部分归因于动态语言在web编程中的普遍存在,动态编译器或引擎被开发以减少与通过解释器来执行类属代码相关联的低效率。一些优化引擎尝试标识类型稳定的字节码的序列,并将它们编译成类型特定的机器代码。这提供了字节码序列的高效执行同时条件如预期的那样保持。如果引擎遇到未预期的条件,帮助者例程可从类型特定的机器代码跳出并返回到使用针对该字节码的解释器。然而,当前用于确定条件是否预期的机制可能限制增加开销并减少执行效率。
概述
提供本概述以便以简化的形式介绍将在以下的详细描述中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。
本公开涉及用于基于动态语言,诸如JavaScript,执行机器代码的方法。执行防护被创建为存储在数据结构中的值。该值代表机器代码的可重新使用部分的预期条件。代表所预期的条件的值与稍后在机器代码的一部分的执行期间遇到的实际值进行比较。如果实际值对应于代表所预期的条件的值,则可重新使用的机器代码被执行。如果实际值不对应于代表所预期的条件的值,则执行防护被无效。该方法可被实现为包括即时编译器的引擎的部分。在一个示例中,该方法在运行时环境(诸如web浏览器)中被实现。
在很多情况中,单个执行防护可被用于同时地检查几个预期条件,诸如对象的类型以及对象的特性的属性。如果一个条件不如预期,则执行防护对它被设计来检查的全部条件而言无效。执行防护可在从原型加载特性时、在向对象添加特性或特性集时、在调用或者进入方法的内联代码时、以及在构建对象时等等被实现。
附图简述
包括附图来提供了对各实施例的进一步理解,且这些附图被合并在本发明书内并构成其一部分。附图示出各实施例,并且与说明书一起用于解释本发明的原理。其他实施例和各实施例的许多预期优点将随着参考下面的详细描述进行更好的理解而得到认识。附图的元素不一定相对于彼此而缩放。类似的附图标号指定对应的类似部分。
图1是示出计算设备的示例的框图。
图2是示出可被配置成在图1的计算设备上运行的示例动态语言引擎的框图。
图3是示出执行从动态语言编译的机器代码的示例方法的框图。
详细描述
在以下具体实施例中,对附图进行了参考,附图构成了实施例的一部分且在其中作为示例示出了可在其中实践本发明的各特定实施例。可以理解,可以利用其他实施例,并且可以作出结构上或逻辑上的变化而不背离本发明的范围。因此,以下详细描述并不旨在限制,并且本发明的范围由所附权利要求来限定。应理解,此处描述的各示例性实施例的特征可相互组合,除非另外具体注明。
图1示出可以在操作环境中使用并且用于主存或运行计算机应用的示例性计算机系统,该计算机应用被包括在存储计算机可执行指令的一个或多个计算机可读存储介质上,该计算机可执行指令用于控制计算机系统(诸如计算设备)执行过程。
示例性计算机系统包括计算设备,诸如计算设备100。在一基本硬件配置中,计算设备100通常包括具有一个或多个处理单元(即,处理器102)的处理器系统以及存储器104。作为示例,处理单元可包括但不限于一个芯片上的两个或更多个处理核或者两个或更多个处理器芯片。在一些示例中,计算设备还可具有一个或多个附加的处理或专用处理器(未示出)以执行从处理器102卸载的处理功能,附加的处理或专用处理器诸如用于图形处理器单元上的通用计算的图形处理器。存储器104可以布置在分层结构中并且可包括一级或多级高速缓存。取决于计算设备的配置和类型,存储器104可以是易失性的(如随机存取存储器(RAM))、非易失性的(诸如只读存储器(ROM)、闪存等)或两者的某种组合。计算设备100可以采用若干形式中的一种或多种。此类形式包括平板、个人计算机、工作站、服务器、手持式设备、消费者电子设备(诸如视频游戏控制台或数字录像机)、或其他,并且可以是独立设备或被配置为计算机网络、计算机群集、云服务基础结构或其他的一部分。
计算设备100还可具有附加特征或功能。例如,计算设备100还可包括附加存储。此类存储可以是可移动和/或不可移动的,并且可包括但不限于,磁盘或光盘或固态存储器,或者闪速存储设备,诸如可移动存储108和不可移动存储110。计算机存储介质包括以存储诸如计算机可读的指令、数据结构、程序模块或其他数据之类的信息的任何合适的方法或技术实现的易失性和非易失性、可移动和不可移动介质。存储器104、可移动存储108和不可移动存储110全部都是计算机存储介质的示例。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、通用串行总线(USB)闪存驱动器、闪存卡、或能用于存储所需信息且可以由计算设备100访问的任何其它存储介质。计算机存储介质不包括瞬态传播的信号。任何这样的计算机存储介质都可以是计算设备100的一部分。
计算设备100常常包括一个或多个输入和/或输出连接,诸如USB连接、显示器端口、专用连接、以及用于连接到各种设备以向计算设备提供输入和输出的其他连接。输入设备112可包括诸如键盘、定点设备(例如鼠标)、笔、语音输入设备、触摸输入设备或其他等设备。输出设备111可包括诸如显示器、扬声器、打印机等设备。
计算设备100常常包括允许计算设备100与其它计算机/应用115进行通信的一个或多个通信连接114。示例通信连接可包括但不限于,以太网接口、无线接口、总线接口、存储区域网络接口、专用接口。通信连接可以被用于将计算设备100耦合到计算机网络,所述计算机网络可以根据各种各样的特性(例如拓扑、连接方法和规模)被分类。网络是计算设备以及可能的由通信信道互连的其它设备的集合,所述通信信道促成通信且允许在互连的设备中共享资源和信息。计算机网络的示例包括局域网、广域网、因特网或其它网络。
计算设备100可被配置成运行操作系统软件程序以及一个或多个计算机应用,这些构成系统平台。被配置成在计算设备100上执行的计算机应用包括至少一个进程(或任务),所述至少一个进程(或任务)是执行程序。每个进程提供用于执行该程序的资源。一个或多个线程在该进程的上下文中运行。线程是操作系统向其分配处理器102中的时间的基本单元。线程是为执行而调度的进程内的实体。进程的各线程可共享其虚拟地址空间和系统资源。每个线程可包括异常处理程序、调度优先级、线程位置存储、线程标识符、以及直到该线程被调度的线程上下文(或线程状态)。线程上下文包括线程的机器寄存器集、内核栈、线程环境块、以及与该线程对应的过程的地址空间中的用户堆。线程可以通过诸如消息传递等技术在处理期间彼此通信。
操作可以在与主应用线程分开的线程中执行。当应用调用用于执行操作的方法时,在该方法执行其任务的同时应用可以继续执行其线程。用于共享存储器多处理器的并发编程可包括多个线程访问同一数据的能力。共享存储器模型是多线程通信的最常部署的方法。多个线程在多个处理器、多个处理器核、单个处理器核中的多个逻辑节点、和/或附连到在处理器之间共享的存储器的其他类的并行机构上执行。
配置用于在计算设备100上执行的计算机应用通常作为用编程语言(诸如动态编程语言)写的指令集而被提供。术语“动态编程语言”被用来描述一类高级编程语言,它们在运行时执行其它用于可能在运行前编译期间(即编译时)执行的许多共同行为。这些行为可包括通过添加新的代码、通过扩展对象和定义、或通过修改类型系统(全都在程序执行期间)的程序的扩展。在本公开中,动态编程语言包括与值(而不是变量)相关联的类型。值是不能够再更进一步评估的表达,而变量是存储位置以及相关联的符号名称(诸如标识符),其可包含信息的一些已知或未知的量(诸如值)。例如,在动态语言中,变量可绑定到数字并且随后重新绑定到串。同样,类型或对象系统可在运行时以动态语言被修改,如在本公开中使用的。这可意味着从运行时定义中或基于现有类型或对象的混合来生成新的对象。这也可意味着改变继承或类型树并改变现有类型表现的方式,例如对于方法的调用。
尽管本公开中许多示例与JavaScript相关,但是本领域技术人员可以认识到各示例也可以用其它动态编程语言来实现。这个定义内的动态编程语言的一些流行的示例包括以ECMAScript的形式(诸如ActionScript、JavaScript、和JScript)、PHP、Python、Perl、Ruby、VBScript、Common Lisp以及其它。
图2示出示例动态语言引擎200。引擎200可被实现为web浏览器子系统、操作系统的特征、或其它计算机应用。例如,JavaScript通常依赖于运行时环境,诸如web浏览器,来提供对象和方法,各应用可通过它们来与环境(诸如web页DOM文档对象模型)进行交互。引擎200包括一起工作以处理并执行用动态语言(诸如JavaScript代码)写的计算机程序的的若干组件。当引擎接收文件202时,诸如当web浏览器下载JavaScript文件时,文件的内容可被提供到解析器204来验证语法正确性。在一个示例中,解析器204提供应用于整个文件202的一个引擎操作,并且后续步骤可在包括全局函数的每个函数上单独地执行。由于函数要被执行,解析器204构建代码的抽象语法树(AST)206表示。AST 206表示被提供给字节码生成器208,其产生适于由解释器212执行的中间形式,诸如函数字节码210。在一个示例中,函数字节码210不适于直接由CPU执行。AST 206和函数字节码210两者可被保留在存储器(诸如存储器104)中,使得它们在后续执行上可被重新使用。解释器212被调用来运行来自字节码的函数。如所讨论的,应用字节码通过解释器的执行可导致随机器代码的执行的执行低效率。
引擎200包括解决执行字节码210的执行低效率的问题的组件。例如,随着解释器212执行单个操作,它也将关于它在操作中遇到的输入的类型的信息收集在简档中,对函数被调用几次、以及对确定字节码210是否可被编译到机器代码中或如何被编译到机器代码中有用的其它信息保持跟踪。在对函数的调用的次数达到特定阈值时,例如,解释器对特定函数字节码214进行排队以供用诸如即时(JIT)编译器216之类的编译器来进行编译。例如,如果函数被调用相对少的次数,诸如一次或两次,则对应的字节码可不被编译,因为编译花费的开销将超过任何来自解释的性能损害。在一个示例中,JIT编译器216可运行在分开的专用线程上来减少对脚本执行的干扰。JIT编译器216为编译队列中每个函数生成优化的机器代码218。一旦函数被编译,则机器代码218的可用性被信号化到主线程。在对经编译的函数的下一次调用之际,函数的入口点被重新定向到新编译的机器代码218,且执行220在诸如CPU之类的处理器222上直接进行。在一个示例中,机器代码218可以与字节码214同时执行。
引擎200可包括其他特征。JavaScript是受管理的运行时,因为存储器管理被向开发者隐藏,并由自动垃圾收集器(其周期性地运行以清理任何不再使用的对象)执行。垃圾收集器可包括保守的、准世代的、标记并扫除,垃圾收集器在专用线程上同时进行其大部分工作以最小化将打扰用户体验的脚本执行暂停。示例体系结构允许引擎200在页面加载期间几乎立刻开始执行JavaScript代码。此外,在密集JavaScript活动期间,引擎可通过同时运行脚本、编译并收集垃圾来并行化工作并使多个核饱和。
JIT编译器216生成基于简档的、类型指定的机器代码218。更具体地,JIT编译器216生成为特定形状和特定类型值的对象特制的机器代码218。为发出合适的机器代码218,信息被提供给JIT编译器216来确定期望什么类型的输入值。例如,在特性可被添加到对象之前,作出关于该特性是否在这个对象的全部原型上可写的判断。同样,在特性可从原型加载之前,作出关于该原型是否未在链中的更多导出的原型中被盖写的判断。此信息在动态语言的源代码中不可用,因此解释器212被适配来在运行时在运行时简档中收集它。当函数被安排用于编译时,JIT编译器216检查解释器212收集的运行时简档,并基于假设发送为预期输入定制的代码218。
尽管解释器212为其观察的运行收集信息,程序的执行可能导致违反在所收集的优化代码中作出的假设的运行时值。因此,对于作出的每个假设,JIT编译器216发出运行时检查或执行防护。如果稍后的执行导致未预期的值,则检查失败,并且执行跳出专用机器代码,并且在解释器中继续。跳出的原因即失败的检查被记录,并且解释器212收集附加的简档信息。函数可最终用不同假设来重新编译。
类型检查或形状检查已被使用作为执行防护的形式。在此方法中,每个对象被分配一个形状,其编码在对象的存储器中何处定位每个特性。形状检查的限制是它仅可验证对象的布局。例如,形状检查不确认对像的给定的特性是否可写。通常,一个以上的这样的检查必须(诸如在加载来自具有原型继承的语言中的原型的特性中)被执行。
图3示出了用于应用执行防护的过程300。在302,基于运行时简档,执行防护作为存储在数据结构中的值被创建,并代表发出的专用机器代码的给定假设、或预期、或假设或预期的集合。在304,当所发出的专用机器代码218后来基于那些假设被执行时,用于专用机器代码218的值与对应的执行防护中持有的值进行比较,以确定所假设的条件是否仍然有效。如果任何假设的条件改变了,则执行防护被无效。如果代表所预期条件的值对应于专用机器代码218中的实际值,则专用机器代码在306被执行。替换地,如果执行防护已经被无效,在308将执行从专用机器代码中跳出。执行防护可作为执行程序的某些其它部分的结果而被无效,执行程序的某些其它部分改变了专用机器代码假设的一个或多个条件。
再循环器可被用于在编译期间在存储器中分配防护,并且数据结构的地址被硬编码在专用机器代码中以允许快速访问。再循环器可将对象分配为防护。在一个示例中,预先确定的空隙,诸如对象的第一指针大小空隙,被用作防护值,对象内容的其余在比较中可以不相关。该示例提供了快速对象构造,其中构造器高速缓存被用作执行防护。使用对象的一部分来持有防护值减少了用于在执行期间检查防护的存储器引用的数量。防护的预期值可以是除了指示防护是无效的所选值之外的任何值。例如,值可以是预期类型,且指示防护是无效的所选值可以是零。
当稍后的执行代码遇到防护的地址时,执行代码中的值与防护的地址处的值进行比较。单个防护可被用来检查多个条件或多个特性。因此,单个比较操作可被用来验证关于特性列表的假设。这在将若干特性添加到对象时可以是有用的,这在构造器中常见。
如果任何特性的属性改变了,那么通过在防护的地址处写选择的无效值(诸如零)防护被无效。同样,防护可在其它或附加的情况下被无效,不考虑该情况是否与特性相关。例如,当构造器的原型改变时防护可被选择性地无效。再循环器可被用来从可能仍需要防护的任何机器代码跟踪对防护的引用。被无效的防护为仍使用该防护的活跃执行的任何代码或可能仍被执行的代码而保留在原地,但是没有新发出的代码可求助于被无效的防护。相反,再循环器为新生成的代码分配新防护,使得被无效的防护再也不被新发出的代码使用。这简化了确保没有依赖现在无效假设的代码将被执行的过程。这也消除了抢先跟踪这样的代码并通过某些外部装置显式地无效它(这对于已经在调用栈上的这样的代码而言将是特别麻烦的)的需求。任何现有代码一旦它遇到被无效的诸如对可恢复解释的处理例程的防护就将简单地跳出。
特性防护可在从原型加载特性时被实现。用动态语言编译器从原型加载特性的高效实现是硬编码从其加载特性的原型对象。防护可被用来检查对象是否仍包括特性并且该特性未被删除,或检查该特性是否还未被在更多导出的原型中被盖写。此外,防护可确定具有硬编码的原型的对象的类型是否是预期的。一个防护可被用来作出全部这些确定。
此外,防护可在向对象添加特性或特性集时被实现。防护可被用来验证对象的类型是如预期的并且要添加的全部的打算的特性在原型链上可写。再一次,单个防护可诸如在防护包含对象的预期类型时作出这些确定,并且如果任何特性变得只读就被注册失效。
防护也可在调用或进入方法的内联代码时被实现。例如,防护可被用来验证拥有该方法的对象的类型,并且对象上的该方法仍与硬编码方法匹配。再一次,这可用单个防护检查来确定,其中防护中的值是对象的类型并在方法被盖写时可被无效,诸如设为零。
此外,防护可在构建对象时被实现。在此上下文中,需要为对象分配合适数量的存储器,写要被添加到预定空隙的特性,并确定构造函数的原型是否未变。这可通过将构造器高速缓存它本身注册为针对被构造器添加的全部特性的特性防护来实现。如果构造器的原型被改变则防护可被显式地无效。在运行时,单个检查足以实现验证全部上述条件。
尽管此处说明并描述了具体实施例,但本领域技术人员可以理解,可用各种替换和/或等价实现来替换所示出并描述的具体实施例而不背离本发明的范围。本申请旨在覆盖在此讨论的具体实施例的任何改变或变型。因此,本发明旨在仅受权利要求及其等价物的限制。
Claims (12)
1.一种用于基于动态语言执行机器代码的方法,包括:
将防护创建为存储在数据结构中的值,且所述值代表所述机器代码的可重新使用部分的预期条件,其中创建所述防护包括在存储器中分配要作为防护的对象,其中对象的预先确定的空隙被用作所述防护;
将代表预期条件的值与稍后在所述机器代码的一部分的执行期间遇到的实际值进行比较,其中保留对象内容在将代表所述预期条件的值与稍后在所述机器代码的一部分的执行期间遇到的实际值进行比较中不相关;
如果所述实际值与代表所述预期条件的值相对应,则执行所述机器代码;以及
如果任何预期条件改变,则无效所述防护。
2.如权利要求1所述的方法,其特征在于,将代表所述预期条件的值与稍后在所述机器代码的一部分的执行期间遇到的实际值进行比较允许多个预期的同时验证。
3.如权利要求1所述的方法,其特征在于,如果多个预期条件的一个或多个改变则所述防护的无效发生。
4.如权利要求1所述的方法,其特征在于,无效所述防护包括选择性地无效所述防护。
5.如权利要求4所述的方法,其特征在于,在构造器的原型改变时所述防护的无效发生。
6.如权利要求1所述的方法,其特征在于,被无效的防护不再被重新生效。
7.如权利要求5所述的方法,其特征在于,一旦防护已经被无效就没有新生成的机器代码求助于该防护。
8.如权利要求1所述的方法,其特征在于,被无效的防护为了仍使用该防护的现有代码而保留在原地。
9.如权利要求8所述的方法,其特征在于,仍使用被无效的防护的现有代码在调用栈上。
10.如权利要求8所述的方法,其特征在于,遇到被无效的防护的机器代码跳出到处理例程。
11.如权利要求1所述的方法,其特征在于,所述机器代码用即时编译器从字节码中被编译。
12.如权利要求1所述的方法,其特征在于,创建所述防护包括用再循环器在存储器中分配要作为防护的对象。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/137,356 US9207914B2 (en) | 2013-12-20 | 2013-12-20 | Execution guards in dynamic programming |
US14/137,356 | 2013-12-20 | ||
PCT/US2014/071003 WO2015095428A1 (en) | 2013-12-20 | 2014-12-18 | Execution guards in dynamic programming |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105849698A CN105849698A (zh) | 2016-08-10 |
CN105849698B true CN105849698B (zh) | 2019-01-22 |
Family
ID=52358987
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480069786.0A Active CN105849698B (zh) | 2013-12-20 | 2014-12-18 | 动态编程中的执行防护 |
Country Status (4)
Country | Link |
---|---|
US (2) | US9207914B2 (zh) |
EP (1) | EP3084598B1 (zh) |
CN (1) | CN105849698B (zh) |
WO (1) | WO2015095428A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9195441B2 (en) * | 2013-07-30 | 2015-11-24 | Facebook, Inc. | Systems and methods for incremental compilation at runtime using relaxed guards |
US9207914B2 (en) | 2013-12-20 | 2015-12-08 | Microsoft Technology Licensing, Llc | Execution guards in dynamic programming |
US10203940B2 (en) * | 2016-12-15 | 2019-02-12 | Microsoft Technology Licensing, Llc | Compiler with type inference and target code generation |
US10592387B2 (en) | 2018-01-02 | 2020-03-17 | International Business Machines Corporation | Dataflow analysis to reduce the overhead of on stack replacement |
US11301539B2 (en) | 2019-02-21 | 2022-04-12 | Bank Of America Corporation | Just-in-time front end template generation using logical document object models |
CN111815310B (zh) * | 2020-08-31 | 2021-08-17 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和存储介质 |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2332085A1 (en) | 2001-01-23 | 2002-07-23 | Ibm Canada Limited-Ibm Canada Limitee | Adapting polymorphic inline caches for multithreaded computing |
CA2453776A1 (en) * | 2003-12-19 | 2005-06-19 | Ibm Canada Limited-Ibm Canada Limitee | Compiler optimization |
US7526760B1 (en) | 2004-03-17 | 2009-04-28 | Sun Microsystems, Inc. | Methods for implementing virtual method invocation with shared code |
CN101241444B (zh) * | 2008-02-21 | 2011-06-15 | 上海交通大学 | 用于动态二进制翻译的调试方法 |
US7493610B1 (en) | 2008-03-27 | 2009-02-17 | International Business Machines Corporation | Versioning optimization for dynamically-typed languages |
US8244775B1 (en) | 2008-05-13 | 2012-08-14 | Google Inc | Using map objects to access object properties in a dynamic object-oriented programming language |
US8392881B1 (en) | 2008-05-13 | 2013-03-05 | Google Inc. | Supporting efficient access to object properties in a dynamic object-oriented programming language |
GB2478098B (en) * | 2008-11-19 | 2013-07-10 | Secure Works Inc | System and method for run-time attack prevention |
US8522222B2 (en) * | 2010-06-21 | 2013-08-27 | Microsoft Corporation | Tracing just-in-time compilation with pointers to local variables |
CN101895554A (zh) * | 2010-07-26 | 2010-11-24 | 贵阳高新华美龙技术有限公司 | 一种动态码防伪方法及系统 |
KR101782995B1 (ko) | 2011-01-13 | 2017-09-29 | 삼성전자주식회사 | 자바스크립트 코드 저장 및 최적화를 통한 웹 브라우징 방법 및 장치 |
CN102136052A (zh) * | 2011-04-29 | 2011-07-27 | 北京深思洛克软件技术股份有限公司 | 一种软件的保护方法 |
US9342274B2 (en) | 2011-05-19 | 2016-05-17 | Microsoft Technology Licensing, Llc | Dynamic code generation and memory management for component object model data constructs |
US8555250B2 (en) * | 2011-05-31 | 2013-10-08 | Microsoft Corporation | Static semantic analysis of dynamic languages |
US8539463B2 (en) | 2011-07-28 | 2013-09-17 | Qualcomm Innovation Center, Inc. | Apparatus and method for improving the performance of compilers and interpreters of high level programming languages |
US10466989B2 (en) | 2011-09-02 | 2019-11-05 | Microsoft Technology Licensing, Llc. | Fast presentation of markup content having script code |
US8819649B2 (en) * | 2011-09-09 | 2014-08-26 | Microsoft Corporation | Profile guided just-in-time (JIT) compiler and byte code generation |
US8869106B2 (en) * | 2011-12-16 | 2014-10-21 | Microsoft Corporation | Language service provider management using application context |
US8972952B2 (en) | 2012-02-03 | 2015-03-03 | Apple Inc. | Tracer based runtime optimization for dynamic programming languages |
US20130205282A1 (en) | 2012-02-07 | 2013-08-08 | Microsoft Corporation | Transferring program execution from compiled code to interpreted code |
US9110751B2 (en) | 2012-02-13 | 2015-08-18 | Microsoft Technology Licensing, Llc | Generating and caching software code |
JP2013235386A (ja) | 2012-05-08 | 2013-11-21 | Internatl Business Mach Corp <Ibm> | 最適化装置、最適化方法、及び最適化プログラム |
US9104449B2 (en) | 2012-06-18 | 2015-08-11 | Google Inc. | Optimized execution of dynamic languages |
US9569342B2 (en) | 2012-12-20 | 2017-02-14 | Microsoft Technology Licensing, Llc | Test strategy for profile-guided code execution optimizers |
US9251071B2 (en) | 2013-08-30 | 2016-02-02 | Apple Inc. | Concurrent inline cache optimization in accessing dynamically typed objects |
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 |
-
2013
- 2013-12-20 US US14/137,356 patent/US9207914B2/en active Active
-
2014
- 2014-12-18 WO PCT/US2014/071003 patent/WO2015095428A1/en active Application Filing
- 2014-12-18 EP EP14828093.6A patent/EP3084598B1/en active Active
- 2014-12-18 CN CN201480069786.0A patent/CN105849698B/zh active Active
-
2015
- 2015-12-08 US US14/962,901 patent/US9424004B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
CN105849698A (zh) | 2016-08-10 |
US9424004B2 (en) | 2016-08-23 |
EP3084598B1 (en) | 2023-04-26 |
EP3084598A1 (en) | 2016-10-26 |
US20150178051A1 (en) | 2015-06-25 |
US20160092174A1 (en) | 2016-03-31 |
US9207914B2 (en) | 2015-12-08 |
WO2015095428A1 (en) | 2015-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105849698B (zh) | 动态编程中的执行防护 | |
US8495598B2 (en) | Control flow graph operating system configuration | |
Ŝevčik et al. | Relaxed-memory concurrency and verified compilation | |
US9170787B2 (en) | Componentization of compiler functionality | |
US8650537B2 (en) | Optimizing an object-oriented program by transforming invocations of synthetic accessor methods | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
US11397568B2 (en) | Escape analysis support for method redefinition | |
Zhao et al. | Haepg: An automatic multi-hop exploitation generation framework | |
Stilkerich et al. | Tailor‐made JVMs for statically configured embedded systems | |
US20150339139A1 (en) | Enhanced java array | |
US9141356B2 (en) | Process for generating dynamic type | |
US11915056B2 (en) | Combination of multiple data processing and machine learning frameworks for a target hardware | |
Fortier et al. | Dyninka: a FaaS framework for distributed dataflow applications | |
Singh et al. | Parallel chopped symbolic execution | |
US10379885B2 (en) | Enhanced local commoning | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
Batko et al. | Actor model of Anemone functional language | |
Batko et al. | Actor Model of a New Functional Language-Anemone | |
Tang et al. | Memory safety for safety critical java | |
US20170277552A1 (en) | Tracing method, computer-readable recording medium, and information processing apparatus | |
Ton et al. | A software/hardware cooperated stack operations folding model for Java processors | |
Wills et al. | Pointers and Unsafe Code | |
Jaber | Data-structure-aware computation offloading | |
Lu | Memory Management and Optimization in Lumousoft Visual Programming Language | |
Fan et al. | Advanced Memory Checking for MPI Parallel Applications Using MemPin |
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 |