CN104137062A - 将代码动态注入到运行中的进程 - Google Patents
将代码动态注入到运行中的进程 Download PDFInfo
- Publication number
- CN104137062A CN104137062A CN201380008946.6A CN201380008946A CN104137062A CN 104137062 A CN104137062 A CN 104137062A CN 201380008946 A CN201380008946 A CN 201380008946A CN 104137062 A CN104137062 A CN 104137062A
- Authority
- CN
- China
- Prior art keywords
- code
- module
- target process
- message
- arbitrary
- 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.)
- Granted
Links
Classifications
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- 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/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
本文描述了能够将代码动态注入到运行中进程的技术。例如,所述技术能够响应于在该进程正在运行时从该进程外接收到用于动态执行任意代码的请求而致使该任意代码在该进程正在运行时在该进程中被激活。
Description
背景
诸如计算机程序(例如软件应用)或其一部分等进程可执行针对另一进程的操作。执行操作的进程被称为请求进程,而针对其执行操作的进程被称为目标进程。传统上,为了使请求进程附接到目标进程,目标进程在其中执行的运行时环境的贡献者为请求进程提供一组目标服务,或者提供了用于实例化目标进程内的代码的激活机制。例如,贡献者可以是操作系统、分层运行时(例如,微软公司发布的公共语言运行时(CLR)、Oracle公司发布的Java虚拟机(JVM)等)、主机可执行件(例如,浏览器)、集成框架(例如,视窗呈现基础(WPF))等。在激活机制实例化目标进程内的代码(例如,对象)时,该代码通常是接收通知的回调代码或者是用对提供对数据和/或服务的访问的主机对象的引用来调用的。传统上,这种激活机制通过咨询机器配置信息(诸如在目标进程启动时的注册表或环境变量)来提供。随后相关代码被基于此信息实例化并且被用主机提供的相关数据来初始化。
然而,用于在目标进程启动时激活目标进程中的代码的技术具有限制。例如,如果目标进程不是用引用代码的配置来启动的,则通常在引用该代码的配置被设置之后重启目标进程。重启目标进程可能在激活代码的用户体验中引入附加的成本和/或步骤。而且,一旦目标进程被重启,在目标进程在运行中时存在的情形可能难以被重新创建。例如,诸如线程竞争状态、花费数天才强迫错误的缓慢内存泄漏等是相对严重的但是可能难以重现。在另一示例中,通过重新配置目标进程所暗示的执行环境的更改可能完全阻止问题的重现。
对请求进程的代码提供应用编程接口(API)功能可能相对代价昂贵。例如,文档的生成和维护、向前兼容性等可能增加平台提供的API的成本。平台或框架的辅助功能(诸如工具功能)通常被认为具有比平台或框架的中心功能相对更低的优先级。相应地,要被执行以提供辅助功能的工作可能被推迟。对于相对复杂的平台或框架,用于提供核心平台服务的专家知识与用于提供附加服务的专家知识可能不重叠。这些问题可能限制关于辅助服务的开发和/或创新。不是严格用于平台和/或可能需要执行任意代码(例如,任意工具代码)的代码(例如,公共扩展点就是这种情况)引起大量的安全风险,这些安全风险可以通过仔细的审阅和/或实现来缓解。最后,应用或框架所提供的API可能带来服务和/或版本化问题。例如,请求进程的提供者通常对其代码做出调整以试图与对平台的改变保持同步,这可能重新编译和/或重写代码以计入这些改变。
概述
本文描述了用于将代码动态注入运行中进程和其他目的的各种方法。例如,这些方法能够致使响应于在进程正在运行时从该进程外接收到动态执行任意代码的请求而在该进程正在运行时在该进程中激活该任意代码。这些方法可致使按各种方式中的任何方式来在该进程中激活该任意代码,包括但不限于:致使操作系统(OS)应用编程接口从注册表查找包括该任意代码的代码容器的位置,经由该消息所指示的路径将该任意代码从代码容器加载到该消息所指示的位置处的共享库中并且调用该共享库来执行该任意代码值,从该消息所指示的代码容器获得该任意代码并在该进程的该消息所指定的进入点处激活该任意代码,等等。
描述了用于将代码动态注入到运行中进程的方法。根据该方法,在目标进程正在运行时,在该目标进程中从在该目标进程外部的请求进程接收消息。该消息请求在该目标进程中动态执行任意代码。该消息包括标识该任意代码的代码标识符。基于该代码标识符,在该目标进程正在运行时致使该任意代码在该目标进程中被定位并激活以提供经激活的代码。
描述了包括接口模块和致使模块的系统。该接口模块被配置为在目标进程正在运行时,在该目标进程中从在该目标进程外部的请求进程接收消息。该消息请求在该目标进程中动态执行任意代码。该消息包括标识该任意代码的代码标识符。该致使模块被配置为基于该代码标识符,在该目标进程正在运行时致使该任意代码在该目标进程中被定位并激活以提供经激活的代码。
描述了一种计算机程序产品,其包括具有记录于其上的用于使基于处理器的系统能够将代码动态注入到运行中进程的计算机程序逻辑的计算机可读介质。该计算机程序产品包括程序逻辑模块。该程序逻辑模块用于使得该基于处理器的系统能够:基于目标进程正在执行时在该目标进程中从该目标进程外部的请求进程接收到消息,致使任意代码在目标进程正在运行时在该目标进程中被定位被激活以提供经激活的代码。该消息请求在该目标进程中动态执行该任意代码。该消息包括标识该任意代码的代码标识符。该代码标识符能被用来定位和激活该任意代码。
提供本概述是为了以简化的形式介绍将在以下具体实施方式中进一步描述的概念选择。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。此外,注意到本发明不限于在详细描述和/或本文的其它章节中所述的特定实施例。本文呈现这些实施例仅用于说明性的用途。基于本文所包含的描述,其它实施例对于相关领域的技术人员将是显而易见的。
附图说明
本文结合的并且组成本说明书的一部分的附图示出了本发明的各实施例,并且还与本描述一起用于解释所涉及的原理以及使相关领域的技术人员能够实现和使用所公开的技术。
图1是根据一实施例的示例计算机系统的框图。
图2示出根据一实施例的用于动态激活目标进程的代码的示例方法的流程图。
图3是根据一实施例的图1中示出的请求模块的示例实现的框图。
图4和6示出根据各实施例的用于将代码动态注入到运行中进程的示例方法的流程图。
图5和7是根据各实施例的图1中示出的进程中注入模块的示例实现的框图。
图8和9示出根据各实施例的用于致使任意代码被定位和激活的示例方法的流程图。
图10是根据一实施例的图7中示出的致使模块的示例实现的框图。
图11描绘了其中可实现各实施例的示例计算机。
通过下面的结合附图对本发明进行的详细说明,所公开的技术的特点和优点将变得更加显而易见,在附图中,类似的附图标记在整个说明书中标识对应的元素。在附图中,相同的参考标号一般指相同的、功能上相似的和/或结构上相似的元素。其中元素第一次出现的附图由对应的参考标号中最左侧的数字指示。
具体实施方式
I.引言
以下详细描述参考示出本发明的示例性实施例的附图。但是,本发明的范围不限于这些实施例,而是由所附权利要求书定义。因此,诸如所示实施例的修改版本之类的在附图所示之外的实施例仍然由本发明所包含。
本说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指的是所述实施例可包括特定的特征、结构或特点,但是每一实施例不一定包括该特定的特征、结构或特点。此外,这些短语不一定指相同的实施例。此外,当结合实施例描述具体特征、结构或特性时,应当理解在相关领域的技术人员的知识范围内能够结合其他实施例来实现具体特征、结构或特性,无论是否被显式地描述。
II.示例实施例
本文描述的示例实施例能够将代码动态注入到运行中的进程。例如,这些示例实施例能够使得响应于在进程正在运行时接收到来自该进程外的动态执行任意代码的请求而在该进程正在运行时激活该任意代码。这些示例实施例可使得按各种方式中的任何方式来在该进程中激活该任意代码,包括但不限于:致使操作系统(OS)应用编程接口(API)从注册表中查找包括该任意代码的代码容器的位置,在确定位置后激活来自该代码容器的该任意代码,以及向提供该请求的调用者提供对该任意代码的引用;经由该消息所指示的路径将该任意代码从代码容器加载到该消息所指示的位置处的共享库中并且调用该共享库来执行该任意代码值;从该消息所指示的代码容器获得该任意代码并在该进程的该消息所指定的进入点处激活该任意代码,等等。
与用于执行进程中的代码的常规技术相比,本文描述的示例技术具有多种益处。例如,本示例技术可自组织地“附接”到运行中的目标进程以便使请求进程的代码靠在目标进程上。本示例技术可传递量化任意代码的实例化的数据来允许该任意代码的参数化激活。该实例化可用各种任意方式中的任一者量化(例如,通过访问从请求进程接收的数据)。一旦将任意代码注入到运行中的目标进程,可关于目标进程和/或目标进程运行的环境(例如,编程运行时环境)在带外(即,在目标进程和/或前述环境之外)服务(例如,更新)该任意代码。
与用于执行进程中的代码的传统技术相比,本示例技术可减少激活代码的用户体验和/或开发者体验的成本和/或步骤数量。例如,本示例技术不需要必然向请求进程的代码提供API功能。根据此示例,关于此类API功能的文档的开发和维护、前向兼容性等可能不是必须的。进一步根据此示例,可避免与此类API功能相关联的服务和/或版本化问题。被注入到运行中进程的任意代码可提供API,提供对动态执行该任意代码的请求的调用者可利用该API通信。关于该任意代码被注入的进程,这可提供更大的灵活性和/或控制。在另一示例中,在目标进程启动时不需要特定配置。例如,如果目标进程不是用引用该代码的配置来启动的,则不需要用引用该代码的配置来重启该目标进程。相应地,在目标进程正在运行时存在的情形(例如,问题)不需要被重新创建。在又一示例中,请求进程的提供者不需要必然对请求进程的代码做出调整以便与对目标进程的改变保持同步。
图1是根据一实施例的示例计算机系统100的框图。一般来说,计算机系统100操作来响应于从用户(例如,应用开发者)接收的请求(如超文本传输协议(HTTP)请求)向所述用户提供信息。信息可包括文档(如网页、图像、视频文件等等)、可执行程序的输出、和/或任何其他合适类型的信息。根据本文描述的示例实施例,计算机系统100将代码动态注入到运行中的进程。例如,如果应用开发者使用计算机系统100开发了一个应用,则计算机系统100可在该应用正在运行时将代码动态注入该应用以便针对该应用进行故障排除。在以下讨论中提供了关于用于将代码动态注入到运行中进程的技术的细节。
如图1所示,计算机系统100包括多个用户系统102A-102M、网络104、以及多个服务器106A-106N。用户系统102A-102M与服务器106A-106N之间的通信是使用公知的网络通信协议通过网络104执行的。网络104可以是广域网(如因特网)、局域网(LAN)、另一类型的网络、或它们的组合。
用户系统102A-102M是能够与服务器106A-106N通信的处理系统。处理系统的示例是包括能够根据指令集操纵数据的至少一个处理器的系统。例如,处理系统可以是计算机、个人数字助理等。用户系统102A-102M被配置成向服务器106A-106N提供请求来请求存储在服务器106A-106N上(或经服务器以其他方式可访问)的信息。例如,用户可使用用户所拥有的或以其他方式可访问的用户系统102上部署的客户端(如web浏览器、web爬行器、或其他类型的客户端)来发起执行计算机程序的请求。根据一些示例实施例,用户系统102A-102M能够访问由服务器104A-104N托管(host)的域(如网站),使得用户系统102A-102M可访问通过所述域可用的信息。这样的域包括网页,所述网页可作为超文本标记语言(HTML)文档和在其中被链接的对象(如文件)来提供。
将认识到,任何一个或多个用户系统102A-102M都可与任何一个或多个服务器106A-106N通信。尽管图1中用户系统102A-102M被描绘为台式计算机,但是相关领域的技术人员将理解用户系统102A-102M可包括任何启用客户端的系统或设备,包括但不限于台式计算机、膝上型计算机、平板计算机、个人数字助理、蜂窝电话等等。
服务器106A-106N是能够与用户系统102A-102M通信的处理系统。服务器106A-106N被配置成执行响应于从用户接收到请求而向用户提供信息的计算机程序。例如,信息可包括文档(如网页、图像、视频文件等等)、可执行程序的输出、和/或任何其他合适类型的信息。根据某些示例实施例,服务器106A-106N被配置成托管各个网站,使得网站可由计算机系统100的用户访问。
出于解说目的,第一服务器106A被显示为包括请求模块112和目标模块114。请求模块112被配置为执行请求进程(例如,请求软件程序),该请求进程位于目标模块所执行的目标进程外部。该请求进程能够生成请求在目标模块114执行的目标进程中动态执行任意代码的消息。请求进程的一种示例类型被称为工具进程。工具进程是一种能够被用来针对目标进程执行诊断操作(例如,标识问题来源、调试、剖析、控制等)的请求进程。工具进程的示例包括但不限于:web开发程序(例如,Windows AzureAmazon WebGoogle App等)以及集成开发环境(例如,Microsoft VisualEclipsePlatformTM等)。
目标模块114被配置为执行目标进程(例如,目标软件应用)。目标进程的示例包括但不限于:web浏览器(例如,InternetGoogle等)、游戏(例如,在线游戏或控制台游戏)等。在一个示例实施例中,目标进程在编程运行时环境中运行。例如,该编程运行时环境可由包括目标模块114的运行时模块执行。编程运行时环境是一种软件组件,其通过将中间语言(IL)指令翻译为机器指令来支持用指定计算机编程语言编写的计算机程序的执行。例如,由Sun Microsystems有限公司(如今的OracleAmerica有限公司)开发并发布的Java Runtime(Java运行时环境)(JRE)是支持用编程语言编写的计算机程序的执行的编程运行时环境的示例。由微软公司开发并发布的Common Language(公共语言运行时)(CLR)是支持用各种语言编写的计算机程序的执行的编程运行时环境的示例。然而,要意识到,目标进程不需要必然在编程运行时环境中运行。
目标模块114包括进程中(in–process)注入模块110。进程中注入模块110被配置为将任意代码注入到目标模块114所执行的目标进程中以满足来自请求模块112的对其的请求。例如,进程中注入模块110能够在该目标进程正在运行时致使该任意代码在该目标进程中被定位并激活,从而导致被激活的代码。根据此示例,基于在目标进程正在运行时在该目标进程中接收到来自请求进程的消息而致使任意代码在目标进程中被定位并激活。来自请求进程的(诸)消息请求在该目标进程中动态执行该任意代码。进一步根据此示例,(诸)消息可包括(诸)代码标识符,所述代表标识符标识相应的任意代码并能被用来定位和激活该任意代码。来自请求进程的(诸)消息可由目标进程直接从请求进程接收,或者间接从请求进程接收。例如,(诸)消息中的一个或多个消息可经由一个或多个中间进程和/或模块接收。在从请求进程或从另一中间进程、模块和/或机器接收到(诸)消息之后,此类中间进程和/或模块可将(诸)消息转发到目标进程。下面参考图2-10更详细地讨论用于将代码动态注入到运行中进程中的一些示例技术。
出于说明性目的而不旨在构成限制,进程中注入模块110、请求模块112和目标模块114被示为并入到(诸)第一服务器106A中。要认识到,进程中注入模块110、请求模块112和/或目标模块114(或其任何(诸)部分)可被并入任何一个或多个用户系统102A-102M中。例如,进程中注入模块110、请求模块112和/或目标模块114的客户端侧方面可被并入一个或多个用户系统102A-102M中,而进程中注入模块110、请求模块112和/或目标模块114的服务器侧方面可被并入(诸)第一服务器106A中。在另一示例中,进程中注入模块110、请求模块112和/或目标模块114可分布在用户系统102A-102M中。在又一示例中,进程中注入模块110、请求模块112和/或目标模块114可被并入在用户系统102A-102M中的单一用户系统中。在又一示例中,进程中注入模块110、请求模块112和/或目标模块114(或其任何(诸)部分)可被并入在经由有线或无线连接来本地连接到用户系统的设备中。例如,目标模块114(包括进程中注入模块110)可被并入到经由通信链路耦合到用户系统102A的移动设备,而请求模块112可被并入到用户系统102A中。
进程中注入模块110可按各种方式实现来将代码动态注入到运行中进程中,包括用硬件、软件、固件或其任何组合来实现。例如,进程中注入模块110可以被实现为被配置为在一个或多个处理器中执行的计算机程序代码。在另一示例中,进程中注入模块110可以被实现为硬件逻辑/电路。在一实施例中,进程中注入模块110可被实现在片上系统(SoC)中。每个SoC可包括一集成电路芯片,该集成电路芯片包括以下一个或多个:处理器(如微控制器、微处理器、数字信号处理器(DSP)等等)、存储器、一个或多个通信接口、和/或用于执行其功能的进一步的电路和/或嵌入的固件。
下面是计算机系统100可在其中使用的两个示例场景。在第一个场景中,顾客可能正在使用由请求模块112执行的请求进程。该顾客可选择在请求进程的上下文中提供的“调试”菜单上的“附接到联网机器上的运行中进程”条目。请求模块112可检索正在该联网机器上运行的进程的列表。该用户可以从该进程列表中选择目标进程并例如按下“附接”按钮。请求模块112可打包消息并将该消息发送到该运行中目标进程以便在该运行中目标进程中激活调试组件。进程中注入模块110可针对该调试组件执行全局注册操作以使得请求模块112能够响应于从请求模块112接收该消息而访问(例如,附接于)该调试组件。
在第二个场景中,请求模块112枚举经由通用串行总线(USB)电缆附接到本地计算机的平板上运行的所有进程。在此场景中,没有将工具代码下载到平板本身。请求模块112选择平板上正在运行的目标进程并打包激活消息以发送到该平板。该激活消息包括指定代码容器的位置的代码位置标识符。例如,该代码位置标识符可指定与从该平板可查看的信息相对应的统一资源定位符(URL)。在接收该激活消息后,进程中注入模块110从该代码位置标识符所指定的位置检索该代码容器并激活包括在该代码容器中的任意代码来提供实例化的代码。进程中注入模块110向请求模块112提供指向实例化的代码的指针。注意,如果实例化的代码被表示为支持信号编集(marshalling)的组件对象模型(COM)对象,则请求模块112可直接调用到该实例化的代码中。进程中注入模块110可用关于该实例化的代码的对其执行环境有用的信息来初始化该实例化的代码
上面提及的示例场景是仅出于说明的目的来提供的,并且不旨在进行限制。应该意识到,在此描述的示例技术可应用于各种场景中的任何场景。
图2示出根据一实施例的用于动态激活目标进程的代码的示例方法的流程图200。流程图200可以由例如图1所示的系统100的请求模块112来执行。为了说明的目的,根据一实施例参考图3中示出的请求模块300描述了流程图200,请求模块300是请求模块112的示例。如图3中所示,请求模块300包括标识模块302、生成模块304、供应模块306、以及接收模块308。基于有关流程图200的讨论,其他结构及操作的实施例对于相关领域的技术人员将是显而易见的。
如图2所示,流程图200的方法在步骤202处开始。在步骤202中,标识目标进程。在一示例实现中,标识模块302标识该目标进程。
在步骤204,生成包括关于代码的激活数据的消息。在一示例实现中,生成模块304生成该消息。
在步骤206,该消息被发送到该目标进程。在一示例实现中,供应模块306将该消息发送到该目标进程。
在步骤208,接收指示该激活是否成功的响应。例如,如果激活不成功,可接收出错消息。根据此示例,出错消息可指定发生了与该代码的激活有关的错误。在另一示例中,如果激活成功,可接收成功消息。根据此示例,成功消息可指示请求模块300能够访问该代码。例如,成功消息可包括对该代码的引用,其能用于调用到该代码中。在一示例实现中,接收模块308接收该响应。
在某些示例实施例中,可以不执行流程图200中的一个或多个步骤202、204、206和/或208。此外,可以执行除步骤202、204、206和/或208以外的步骤或代替这些步骤的步骤。
将认识到,请求模块300可以不包括标识模块302、生成模块304、供应模块306和/或接收模块308中的一个或多个。此外,请求模块300可包括附加于或替代标识模块302、生成模块304、供应模块306和/或接收模块308的模块。
图4示出根据一实施例的用于将代码动态注入到运行中进程中的示例方法的流程图400。流程图400可以由例如图1所示的系统100的进程中注入模块110来执行。为了说明的目的,根据一实施例,参考图5中示出的进程中注入模块500描述了流程图400,进程中注入模块500是进程中注入模块110的示例。如图5中所示,进程中注入模块500包括接口模块502、激活确定模块504、供应模块506、状态确定模块508、状态推送模块510、解包模块512、可用性确定模块514、路径确定模块516、激活模块518、初始化模块520、注册模块522、打包模块524、弹出确定模块526、以及状态弹出模块528。基于有关流程图400的讨论,其他结构及操作的实施例对于相关领域的技术人员将是显而易见的。
如图4所示,流程图400的方法在步骤402处开始。在步骤402中,接收包括关于代码的激活数据的消息。在一示例实现中,接口模块502接收该消息。
在步骤404,做出激活是否被禁用的判定。如果激活被禁用,则该代码不能被激活。如果激活没有被禁用,则如果根据本文描述的(诸)技术执行了适当的激活操作,则该代码可被激活。如果激活被禁用,流程继续至步骤406。否则,流程继续至步骤408。在一示例实现中,激活确定模块504确定激活是否被禁用。注意,在一些实施例中,激活可由一实体(诸如系统管理员)在“启用”和“禁用”间切换。根据这些实施例,将激活从“禁用”切换到“启用”可使得代码能够在根据本文描述的(诸)技术执行了适当的激活操作时被激活。
在步骤406,提供失败消息。该失败消息指示激活被禁用。在一示例实现中,供应模块506提供该失败消息。在步骤406完成后,流程图400结束。
在步骤408,做出配置状态是否存在的判定。例如,该配置状态可由与该代码相关联的(诸)环境变量指定。根据此示例,如果该(些)环境变量指定该配置状态,则称该配置状态存在。如果不存在该(些)环境变量或该(些)环境变量没有指定配置状态,则称该配置状态不存在。如果配置状态存在,则流程继续至步骤410。否则,流程继续至步骤412。在一示例实现中,状态确定模块508确定配置状态是否存在。
在步骤410,该配置状态被推送。“推送”该配置状态意味着“维持”该配置状态以在一未来时间还原该配置状态。例如,推送该配置状态可导致编码方便性,诸如允许重用在该代码开始时提供的相同的代码位置和/或激活机制。在一示例实现中,状态推送模块510推送该配置状态。在完成步骤410之后,流程继续至步骤412。
在步骤412,该激活数据被从该消息解包。在一示例实现中,解包模块512将该激活数据从该消息解包。
在步骤414,做出标识该代码的标识符是否可用的判定。如果标识该代码的标识符可用,则流程继续至步骤416。否则,流程继续至步骤406。在一示例实现中,可用性确定模块514确定标识该代码的标识符是否可用。
在步骤416,做出指示至该代码的路径的指示符是否可用的判定。例如,该路径可以是网络位置、关于一本地机器的信息、指向可经由网络(例如因特网)下载的文件的统一资源标识符(URI)等。根据此示例,该URI可以是统一资源定位符(URL)或统一资源名称(URN)。如果指示至该代码的路径的指示符可用,则流程继续至步骤418。否则,流程继续至步骤420。在一示例实现中,路径确定模块516确定指示至该代码的路径的指示符是否可用。
在步骤418,该代码被从由该路径指定的位置激活(例如,加载和/或至少部分执行)。在一示例实现中,激活模块518从由该路径指定的位置激活该代码。在完成步骤418之后,流程继续至步骤422。
在步骤420,基于标识该代码的标识符激活该代码。在一示例实现中,激活模块518基于标识该代码的标识符激活该代码。在完成步骤420之后,流程继续至步骤422。
要认识到,执行步骤418、420、和/或422的不成功的尝试将导致错误状态,在这种情况下,流程可继续至步骤406。例如,在步骤418或420,该代码的激活可能失败。在另一示例中,在步骤422,经激活的代码的初始化可能失败。根据此示例,如果初始化失败,经激活的代码可以被“清除”。
在步骤422,经激活的代码被初始化。例如,初始化可涉及审阅环境变量中的量化该代码的激活的信息、要求该经激活代码实现指定的接口、要求与该经激活代码相关联的代码容器暴露可被调用的名称的进入点、从该消息解包任意初始化数据等。在一示例实现中,初始化模块520初始化该经激活代码。
在步骤424,该经激活代码被注册。在一示例实现中,注册模块522注册该经激活代码。
在步骤426,激活结果被打包。在一示例实现中,打包模块524将激活结果打包。
在步骤428,做出该配置状态是否要被弹出的判定。如果该配置状态要被弹出,则流程继续至步骤430。否则,流程继续至步骤432。在一示例实现中,弹出确定模块526确定该配置状态是否要被弹出。
在步骤430,该配置状态被弹出。“弹出”配置状态意味着“还原”在步骤410推送的配置状态。在一示例实现中,状态弹出模块528弹出该配置状态。在完成步骤430之后,流程继续至步骤432。
在步骤432,激活结果被返回。在一示例实现中,供应模块506将激活结果返回。在步骤432完成后,流程图400结束。
在一些示例实施例中,可不执行流程图400中的一个或多个步骤402、404、406、408、410、412、414、416、418、420、422、424、426、428、430和/或432。而且,可执行附加于或代替步骤402、404、406、408、410、412、414、416、418、420、422、424、426、428和/或430之外的步骤。
要认识到,进程中注入模块500可不包括接口模块502、激活确定模块504、供应模块506、状态确定模块508、状态推送模块510、解包模块512、可用性确定模块514、路径确定模块516、激活模块518、初始化模块520、注册模块522、打包模块524、弹出确定模块526、和/或状态弹出模块528中的一个或多个。而且,进程中注入模块500可包括附加于或代替接口模块502、激活确定模块504、供应模块506、状态确定模块508、状态推送模块510、解包模块512、可用性确定模块514、路径确定模块516、激活模块518、初始化模块520、注册模块522、打包模块524、弹出确定模块526、和/或状态弹出模块528的模块。
图6示出根据一实施例的用于将代码动态注入到运行中进程中的另一示例方法的流程图600。流程图600可以由例如图1所示的系统100的进程中注入模块110来执行。为了说明的目的,根据一实施例,关于图7中示出的进程中注入模块700描述了流程图600,进程中注入模块700是进程中注入模块110的示例。如图7中所示,进程中注入模块700包括接口模块702、致使模块704、标识模块706、失效模块708、以及启动模块710。基于有关流程图600的讨论,其他结构及操作的实施例对于相关领域的技术人员将是显而易见的。
如图6所示,流程图600的方法在步骤602处开始。在步骤602中,在一目标进程正在运行时,在该目标进程中,从在该目标进程外部的请求进程接收消息。要认识到,该消息可在该目标进程中直接或间接地从该请求进程接收。该消息包括代码标识符并且请求在该目标进程中动态执行任意代码。该代码标识符标识该任意代码。该代码标识符能用来定位和激活该任意代码。该请求进程可以是工具进程,诸如web开发程序或集成开发环境,而该示例实施例的范围在此方面不受限制。在一示例实现中,在该目标进程正在运行时,接口模块702在该目标进程中从该请求进程接收消息。
在一示例实施例中,该代码标识符包含要被编译并随后在该目标进程执行的源代码。在另一示例实施例中,该代码标识符是URI和/或返回源代码以供编译的web服务调用。在又一示例实施例中,该代码标识符包含未被编译的脚本代码以在该目标进程中执行。
在步骤604,在该目标进程正在运行时,基于该代码标识符,致使该任意代码在该目标进程中被定位并激活(例如,加载和/或至少部分激活)以提供经激活代码。在一示例实现中,在该目标进程正在运行时,致使模块704致使该任意代码在该目标进程中被定位并激活。
在一示例实施例中,步骤604包括致使操作系统(OS)应用编程接口(API)基于该代码标识符从注册表中查找包括该任意代码的代码容器的位置。例如,可致使该操作系统应用编程接口使用该代码标识符作为键来查找该代码容器的位置。该代码标识符可以使用例如全局唯一标识符(GUID)来表示。例如,该操作系统应用编程接口可以是CoCreateInstance组件对象模型(COM)函数。要认识到,该代码容器可以是二进制容器或cab或要从中提取该代码的其他压缩容器。根据此实施例中,该代码标识符被提供至该操作系统应用编程接口。
在另一示例实施例中,步骤604包括向该任意代码提供任意数据以初始化该任意代码。根据此实施例,该任意数据被包括在在步骤602在该目标进程中接收的消息中。
在又一示例实施例中,步骤604包括将该目标进程中除与该经激活代码相关联的线程之外的所有线程停止。
在再一示例实施例中,该消息中的代码标识符和/或其他数据指定该任意代码的单元素实例。例如,该代码标识符和/或其他数据可请求:如果该任意代码的一实例尚未存在则创建这样一个实例,和/或否则返回该任意代码的先前构造的实例。为此目的,对象注册机制可被重用。
在步骤606,已实例化的代码(其针对该目标进程被实例化)被标识。该已实例化代码包括该经激活代码。在一示例实现中,标识模块706标识该已实例化代码,该已实例化代码针对该目标进程被实例化。
在步骤608,接收失效消息。例如,失效消息可由该目标进程或由该请求进程生成。在一方面,该失效消息可指示该目标进程中或该请求进程中已发生错误。在另一方面,该失效消息可指示该目标进程或该请求进程要被中断。例如,该失效消息可响应于用户退出该目标进程而被接收。根据此示例,该失效消息可在该目标进程的关闭序列期间被接收。例如,该目标进程可以检测到该用户已退出该目标进程并且基于此来生成该失效消息。在一示例实现中,接口模块702接收该失效消息。
在步骤610,该已实例化代码被失效。例如,该已实例化代码可被丢弃、从存储器移除、被调用于其中以便该已实例化代码可执行其自己的去初始化和/或关闭工作等。根据此示例,对该已实例化代码的引用可被删除、停用等。在一示例实现中,失效模块708使该经激活代码失效。
在一示例实施例中,该消息可包括与该任意代码的高速缓存有关的(诸)量化器。例如,该消息可指示该任意代码要被检索,即使该任意代码已被检索并高速缓存在本地。根据此示例,该代码标识符可引用一URI,诸如URL或URN。在一方面,致使模块704可咨询一表格,该表格指示该任意代码是否已被检索并高速缓存在本地。如果该任意代码尚未被检索并高速缓存在本地,则致使模块704可从该表检索该任意代码。在另一方面,致使模块704可知晓致使模块704是否已经编译作为先前消息中的源代码递送的代码容器。注意,消息可包括要与该任意代码相关联的GUID连同用于要被该GUID标识的该任意代码的源代码。
因为用每个消息传送源代码的成本,该请求进程可请求指定GUID的激活。激活可能因为无法定位该代码容器而失败。该请求进程可继续有请求激活相同GUID的消息,并且这次将该源代码与该消息绑定在一起。致使模块704可编译并高速缓存并激活该任意代码。该请求进程可用请求该任意代码的另一消息继续,从而提供该GUID而不提供该源代码。这一次,致使模块704可定位并激活该任意代码的其高速缓存的已编译版本。实现上述方案的一个可能原因在于:多个请求进程可能正在提供请求在该目标进程中执行相同任意代码的消息。
将认识到,目标进程所接收的消息可包括实例化(例如初始化)多于一个单一代码对象的请求,该单一代码对象可被包括在单一代码容器中或跨越多个代码容器。在提供返回引用的情况下,保持结果的数据结构可包含对各已实例化对象的引用的有序集合。
在某些示例实施例中,可以不执行流程图600的一个或多个步骤602、604、606、608和/或610。此外,可以执行除步骤602、604、606、608和/或610以外的或代替这些步骤的步骤。例如,在一示例实施例中,流程图600包括向该经激活代码提供该目标进程中所包括的代码的可访问性。该目标进程中的代码的可访问性可以被提供给该经激活代码,尽管被包括在目标进程中的该代码的一部分被配置为对该例如该目标进程以外的实体而言是不可访问的。根据此实施例,致使模块704可向该经激活代码提供该目标进程中所包括的该代码的可访问性。
在另一示例实施例中,流程图600包括确定与该任意代码相关联的环境变量。该环境变量被配置为参数化该任意代码的加载。例如,启动模块710可确定与该任意代码相关联的环境变量。根据此实施例中,根据该环境变量将该任意代码在该目标进程的启动期间激活。例如,启动模块710可在该目标进程的启动期间激活该任意代码。进一步根据此实施例,响应于在该目标进程的启动期间该任意代码的激活完成而执行步骤604。例如,致使模块704可响应于在该目标进程的启动期间该任意代码的激活完成而执行步骤604。
在又一示例实施例中,流程图600包括提供引用该经激活代码的值。该值能够在该目标进程继续运行时被该请求进程调用来与该目标进程交互。可用该值填充该请求进程所提供的数据结构,而该示例实施例的范围在此方面不受限制。在一个示例中,致使模块704可提供引用该经激活代码的值。根据此示例,致使模块704可生成该值。
在前述实施例的一个方面中,该请求进程可以具有同步代码激活体验,该同步代码激活体验进而给予该请求进程对该值的访问(例如,相对立即的访问),该值担当对该经激活代码的可调用引用。在另一方面,该经激活代码可以按照以下方式注册:致使该经激活代码变得对该请求进程而言可访问。例如,该经激活代码可使用存储器段注册,该存储器段在该目标进程和该请求进程之间共享。
要意识到,进程中注入模块700可不包括接口模块702、致使模块704、标识模块706、失效模块708和/或启动模块710中的一个或多个。而且,进程中注入模块700可包括附加于或代替接口模块702、致使模块704、标识模块706、失效模块708和/或启动模块710的模块。
图8和9示出根据(诸)实施例的用于致使该任意代码被定位并激活的示例方法的流程图800和900。相应地,流程图800和900示出流程图600的步骤604可执行的示例方式。流程图800和900可由例如图7中所示的进程中注入模块700的致使模块704来执行。出于说明性的目的,根据一实施例,流程图800和900是针对图10中所示的致使模块1000来描述的,该致使模块1000是致使模块704的示例。如图10中所示,致使模块1000包括激活逻辑1002、调用逻辑1004、以及获取逻辑1006。基于有关流程图800和900的讨论,进一步的结构及操作的实施例对于相关领域的技术人员将是显而易见的。
如图8所示,流程图800的方法在步骤802处开始。在步骤802中,基于该消息中的位置标识符所指示的位置以及该消息中的路径信息所指示的路径,从一代码容器中将该任意代码加载到一共享库。例如,该共享库可以是动态链接库(DLL)。在另一示例中,该位置标识符可以是统一资源标识符(URI),诸如统一资源定位符(URL)或统一资源名称(URN)。在一示例实现中,激活逻辑1002将该任意代码从该代码容器加载到该共享库中。例如,激活逻辑1002可从在包括致使模块1000的设备外部的源下载该共享库。
在步骤804,对该共享库做出调用以执行该任意代码。在一示例实现中,调用逻辑1004调用到该共享库中以执行该任意代码。
在一些示例性实施例中,可以不执行流程图800的一个或多个步骤802和/或804。此外,可以执行除步骤802和/或804以外的或代替这些步骤的步骤。
如图9所示,流程图900的方法在步骤902处开始。在步骤902中,从该代码标识符所指示的代码容器获取该任意代码。该代码标识符可以被指定为例如MyDll.dll#MyCodeActivatingEntryPoint。在一示例实现中,获取逻辑1006从该代码容器获取该任意代码。
在步骤904,在该目标进程的进入点处激活该任意代码。该进入点由该代码标识符指定。例如,该代码标识符可包括要被加载到存储器中的DLL、为访问该任意代码要对其中做出调用的进入点、以及标识要被用于调用到该任意代码中的接口的合约名。根据此示例,该DLL暴露该进入点。该进入点可被诸如例如MyDll.dll#MyCodeActivatingEntryPoint等标识符来指定。在此示例中,为解说目的而非旨在限制,该标识符的初始部分“MyDll”代表文件名。要意识到,该标识符的初始部分可以是到磁盘上的二进制代码的全称路径或者与该任意代码的位置相对应的另一URI。在一示例实现中,激活逻辑1002在该目标进程的由该代码标识符所指定的进入点处激活该任意代码。
在一些示例实施例中,可以不执行流程图900的一个或多个步骤902和/或904。此外,可以执行除步骤902和/或904以外的或代替这些步骤的步骤。
要意识到,致使模块1000可不包括激活逻辑1002、调用逻辑1004、和/或获取逻辑1006中的一个或多个。而且,致使模块1000可包括附加于或代替激活逻辑1002、调用逻辑1004、和/或获取逻辑1006的模块。
进程中注入模块110、请求模块112、目标模块114、标识模块302、生成模块304、供应模块306、接收模块308、接口模块502、激活确定模块504、供应模块506、状态确定模块508、状态推送模块510、解包模块512、可用性确定模块514、路径确定模块516、激活模块518、初始化模块520、注册模块522、打包模块524、弹出确定模块526、状态弹出模块528、接口模块702、致使模块704、标识模块706、失效模块708、启动模块710、激活逻辑1002、调用逻辑1004、获取逻辑1006、流程图200、流程图400、流程图600、流程图800、以及流程图900可以用硬件、软件、固件或其任何组合来实现。
例如,进程中注入模块110、请求模块112、目标模块114、标识模块302、生成模块304、供应模块306、接收模块308、接口模块502、激活确定模块504、供应模块506、状态确定模块508、状态推送模块510、解包模块512、可用性确定模块514、路径确定模块516、激活模块518、初始化模块520、注册模块522、打包模块524、弹出确定模块526、状态弹出模块528、接口模块702、致使模块704、标识模块706、失效模块708、启动模块710、激活逻辑1002、调用逻辑1004、获取逻辑1006、流程图200、流程图400、流程图600、流程图800、和/或流程图900可以被实现为被配置为在一个或多个处理器中执行的计算机程序代码。
在另一示例中,进程中注入模块110、请求模块112、目标模块114、标识模块302、生成模块304、供应模块306、接收模块308、接口模块502、激活确定模块504、供应模块506、状态确定模块508、状态推送模块510、解包模块512、可用性确定模块514、路径确定模块516、激活模块518、初始化模块520、注册模块522、打包模块524、弹出确定模块526、状态弹出模块528、接口模块702、致使模块704、标识模块706、失效模块708、启动模块710、激活逻辑1002、调用逻辑1004、获取逻辑1006、流程图200、流程图400、流程图600、流程图800、和/或流程图900可以被实现为硬件逻辑/电路。
例如,在一实施例中,进程中注入模块110、请求模块112、目标模块114、标识模块302、生成模块304、供应模块306、接收模块308、接口模块502、激活确定模块504、供应模块506、状态确定模块508、状态推送模块510、解包模块512、可用性确定模块514、路径确定模块516、激活模块518、初始化模块520、注册模块522、打包模块524、弹出确定模块526、状态弹出模块528、接口模块702、致使模块704、标识模块706、失效模块708、启动模块710、激活逻辑1002、调用逻辑1004、获取逻辑1006、流程图200、流程图400、流程图600、流程图800、和/或流程图900中的一个或多个可被实现为片上系统(SoC)。SoC可包括集成电路芯片,该集成电路芯片包括以下一个或多个:处理器(如微控制器、微处理器、数字信号处理器(DSP)等等)、存储器、一个或多个通信接口、和/或用于执行其功能的进一步的电路和/或嵌入的固件。
图11描绘其中可实现各实施例的示例计算机1100。图1中所示的客户端102A-102M中的任何一个或多个或服务器106A-106N中的任何一个或多个(或图1、3、5、7和10中所示的它们的任何一个或多个子组件)可使用计算机1100来实现,包括计算机1100的一个或多个特征和/或替代特征。计算机1100可以是例如常规个人计算机、移动计算机或工作站形式的通用计算设备,或者计算机1100可以是专用计算设备。此处所提供的对计算机1100的描述只是为了说明,并不是限制性的。实施例也可以在相关领域的技术人员所知的其它类型的计算机系统中实现。
如图11所示,计算机1100包括处理单元1102、系统存储器1104和总线1106,总线1106将包括系统存储器1104在内的各种系统组件耦合到处理单元1102。总线1106表示若干类型的总线结构中的任何一种总线结构的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口,以及处理器或使用各种总线体系结构中的任何一种的局部总线。系统存储器1104包括只读存储器(ROM)1108和随机存取存储器(RAM)1110。基本输入/输出系统1112(BIOS)储存在ROM 1108中。
计算机1100还具有一个或多个以下驱动器:用于读写硬盘的硬盘驱动器1114、用于读或写可移动磁盘1118的磁盘驱动器1116、以及用于读或写诸如CD ROM、DVD ROM或其他光介质之类的可移动光盘1122的光盘驱动器1120。硬盘驱动器1114、磁盘驱动器1116,以及光驱动器1120分别通过硬盘驱动器接口1124、磁盘驱动器接口1126,以及光盘驱动器接口1128连接到总线1106。驱动器以及它们相关联的计算机可读存储介质为计算机提供了对计算机可读指令、数据结构、程序模块,及其他数据的非易失存储器。虽然描述了硬盘、可移动磁盘和可移动光盘,但是,也可以使用诸如闪存卡、数字视频盘、随机存取存储器(RAM)、只读存储器(ROM)等等之类的其他类型的计算机可读存储介质来储存数据。
数个程序模块可被储存在硬盘、磁盘、光盘、ROM或RAM上。这些程序包括操作系统1130、一个或多个应用程序1132、其他程序模块1134以及程序数据1136。应用程序1132或程序模块1134可包括例如用于实现如本文所述的进程中注入模块110、请求模块112、目标模块114、标识模块302、生成模块304、供应模块306、接收模块308、接口模块502、激活确定模块504、供应模块506、状态确定模块508、状态推送模块510、解包模块512、可用性确定模块514、路径确定模块516、激活模块518、初始化模块520、注册模块522、打包模块524、弹出确定模块526、状态弹出模块528、接口模块702、致使模块704、标识模块706、失效模块708、启动模块710、激活逻辑1002、调用逻辑1004、获取逻辑1006、流程图200(包括流程图200的任何步骤)、流程图400(包括流程图200的任何步骤)、流程图600(包括流程图200的任何步骤)、流程图800(包括流程图200的任何步骤)、和/或流程图900(包括流程图200的任何步骤)的计算机程序逻辑。
用户可以通过诸如键盘1138和定点设备1140之类的输入设备向计算机1100中输入命令和信息。其它输入设备(未示出)可包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、触敏屏、相机、加速度计、陀螺仪等等。这些及其他输入设备常常通过耦合到总线1106的串行端口接口1142连接到处理单元1102,但是,也可以通过其他接口,诸如并行端口、游戏端口、通用串行总线(USB)端口,来进行连接。
显示设备1144(例如监视器)也通过诸如视频适配器1146之类的接口连接到总线1106。除了显示设备1144之外,计算机1100还可包括其他外围输出设备(未示出),如扬声器和打印机。
计算机1100通过网络接口或适配器1150、调制解调器1152、或用于通过网络建立通信的其他装置连接到网络1148(例如,因特网)。调制解调器1152(可以是内置的或外置的)通过串行端口接口1142连接到总线1106。
如此处所用的,术语“计算机程序介质”以及“计算机可读介质”被用于泛指非瞬态介质,诸如与硬盘驱动器1114相关联的硬盘、可移动磁盘1118、可移动光盘1122,以及其他非易失性介质,诸如闪存卡、数字视频盘、随机读取存储器(RAM)、只读存储器(ROM)等。这些计算机可读存储介质与通信介质相区别且不重叠。通信介质通常在诸如载波等已调制数据信号中承载计算机可读指令、数据结构、程序模块或者其它数据。术语“已调制数据信号”是指使得以在信号中编码信息的方式来设置或改变其一个或多个特征的信号。作为示例而非限制,通信介质包括无线介质,如声学、RF、红外和其它无线介质。示例实施例也针对这些通信介质。
如上文所指示的,计算机程序和模块(包括应用程序1132及其他程序模块1134)可被储存在硬盘、磁盘、光盘、ROM或RAM上。这样的计算机程序也可以通过网络接口1150或串行端口接口1142来接收。这些计算机程序在由应用程序执行或加载时使得计算机1100能够实现此处所讨论的实施例的特征。相应地,这样的计算机程序表示计算机1100的控制器。
示例实施例还涉及包括存储在任何计算机可用介质上的软件(例如计算机可读指令)的计算机程序产品。这样的软件,当在一个或多个数据处理设备中执行时,使数据处理设备如此处所描述的那样操作。实施例可使用现在已知或将来知晓的任何计算机可使用或计算机可读介质。计算机可读介质的例子包括但不限于存储设备,诸如RAM、硬盘、软盘、CD ROM、DVD ROM、Zip盘、磁带、磁存储设备、光存储设备、基于MEMS的存储设备、基于纳米技术的存储设备,等等。
III.结语
虽然以上描述了不同的实施例,但应当理解的是它们只是作为示例而非限制。对于相关领域的技术人员显而易见的是,可以对其做出各种改变而不背离本发明的精神和范围。因此,本发明的宽度和范围不应被上述所公开的示例性实施例所限制,而应当仅根据所附权利要求书及其等同替换来定义。
Claims (10)
1.一种方法,包括:
在目标进程正在运行时,在所述目标进程中从位于所述目标进程外部的请求进程接收消息,所述消息请求在所述目标进程中动态执行任意代码,所述消息包括标识所述任意代码的代码标识符,所述代码标识符能用于定位和激活所述任意代码;以及
基于所述代码标识符,在所述目标进程正在运行时,致使所述任意代码在所述目标进程中被定位并激活,以提供经激活代码。
2.如权利要求1所述的方法,其特征在于,致使所述任意代码被定位和激活包括:
致使操作系统应用编程接口基于所述代码标识符从注册表中查找包括所述任意代码的代码容器的位置;以及
其中致使所述操作系统应用编程接口查找所述代码容器包括:
向所述操作系统应用编程接口提供所述代码标识符。
3.如权利要求1所述的方法,其特征在于,接收所述消息包括:
接收路径信息和位置标识符,所述路径信息指示至代码容器的路径,所述位置标识符指示共享库的位置;以及
其中致使所述任意代码被定位和激活包括:
基于所述位置标识符所指示的位置并且进一步基于所述路径信息所指示的路径,将所述任意代码从所述代码容器加载到所述共享库中;以及
调用到所述共享库中以执行所述任意代码。
4.如权利要求1所述的方法,其特征在于,所述代码标识符包含要被编译并随后在所述目标进程中执行的源代码。
5.如权利要求1所述的方法,其特征在于,还包括:
提供引用所述经激活代码的值,所述值能够被所述请求进程调用以在所述目标进程继续运行时与所述目标进程交互。
6.一种系统,包括:
接口模块,所述接口模块被配置为在目标进程正在运行时,在所述目标进程中从位于所述目标进程外部的请求进程接收消息,所述消息请求在所述目标进程中动态执行任意代码,所述消息包括标识所述任意代码的代码标识符,所述代码标识符能用于定位和激活所述任意代码;以及
致使模块,所述致使模块被配置为基于所述代码标识符,在所述目标进程正在运行时,致使所述任意代码在所述目标进程中被定位并激活,以提供经激活代码。
7.如权利要求6所述的系统,其特征在于,所述致使模块包括:
获取逻辑,所述获取逻辑被配置为从由所述代码标识符指示的代码容器获取所述任意代码;以及
激活逻辑,所述激活逻辑被配置为在所述目标进程的进入点处激活所述任意代码,所述进入点由所述代码标识符指定。
8.如权利要求6所述的系统,其特征在于,还包括:
标识模块,所述标识模块被配置为标识已实例化代码,所述已实例化代码针对所述目标模块被实例化,所述已实例化代码包括所述经激活代码;以及
失效模块,所述失效模块被配置为响应于接收到失效消息使所述已实例化代码失效。
9.如权利要求6所述的系统,其特征在于,所述致使模块被配置为在所述目标进程中加载所述任意代码期间将所述目标进程中除与所述经激活代码相关联的线程之外的所有线程停止。
10.一种包括计算机可读介质的计算机程序产品,所述计算机可读介质上记录了计算机程序逻辑,所述计算机程序逻辑用于使得基于处理器的系统能够将代码动态注入到运行中进程中,所述计算机程序产品包括:
第一程序逻辑模块,用于使得所述基于处理器的系统能够:基于在目标进程正在运行时在所述目标进程中从位于所述目标进程外部的请求进程接收到消息,致使任意代码能在所述目标进程正在运行时在所述目标进程中被定位并激活,所述消息请求在所述目标进程中动态执行所述任意代码,所述消息包括标识所述任意代码的代码标识符,所述代码标识符能用于定位和激活所述任意代码;以及
第二程序逻辑模块,用于使得所述基于处理器的系统能够提供引用所述经激活代码的值,所述值能够被所述请求进程调用以在所述目标进程继续运行时与所述目标进程交互。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/370,126 | 2012-02-09 | ||
US13/370,126 US8539506B2 (en) | 2012-02-09 | 2012-02-09 | Dynamic injection of code into running process |
PCT/US2013/024558 WO2013119481A1 (en) | 2012-02-09 | 2013-02-04 | Dynamic injection of code into running process |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104137062A true CN104137062A (zh) | 2014-11-05 |
CN104137062B CN104137062B (zh) | 2017-08-15 |
Family
ID=48946753
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380008946.6A Active CN104137062B (zh) | 2012-02-09 | 2013-02-04 | 将代码动态注入到运行中的进程 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8539506B2 (zh) |
EP (1) | EP2812794A4 (zh) |
JP (1) | JP6182160B2 (zh) |
KR (1) | KR102023223B1 (zh) |
CN (1) | CN104137062B (zh) |
WO (1) | WO2013119481A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107153536A (zh) * | 2017-03-31 | 2017-09-12 | 北京三快在线科技有限公司 | 一种应用处理方法及装置 |
CN108664390A (zh) * | 2017-03-31 | 2018-10-16 | 华为技术有限公司 | 一种内存泄露检测方法及设备 |
CN111475229A (zh) * | 2020-04-09 | 2020-07-31 | 广州锦行网络科技有限公司 | 一种Windows平台下的dll注入方法及系统 |
CN111488282A (zh) * | 2020-04-13 | 2020-08-04 | 龙芯中科技术有限公司 | 业务功能处理方法、装置、电子设备及存储介质 |
CN112631891A (zh) * | 2021-01-05 | 2021-04-09 | 网易(杭州)网络有限公司 | 性能剖析方法及装置、电子设备、存储介质 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9720809B2 (en) | 2012-02-17 | 2017-08-01 | Microsoft Technology Licensing, Llc | Dynamically enabling debugging over the internet |
US20150007156A1 (en) * | 2013-06-26 | 2015-01-01 | Sap Ag | Injecting patch code at runtime |
US10516733B2 (en) | 2014-11-25 | 2019-12-24 | Auth0, Inc. | Multi-tenancy via code encapsulated in server requests |
CN111133412A (zh) | 2017-07-25 | 2020-05-08 | 奥罗拉实验室有限公司 | 基于工具链构建车辆ecu软件的软件增量更新和异常检测 |
US11169858B2 (en) * | 2018-06-15 | 2021-11-09 | Nvidia Corporation | Faster game enablement utilizing virtual machine reuse |
US11983094B2 (en) | 2019-12-05 | 2024-05-14 | Microsoft Technology Licensing, Llc | Software diagnostic context selection and use |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5802367A (en) * | 1995-07-07 | 1998-09-01 | Microsoft Corporation | Method and system for transparently executing code using a surrogate process |
US20060206585A1 (en) * | 2005-03-07 | 2006-09-14 | Nextwave Media Group, Llc | System and method for publishing targeted copy in a previously opened document independent of a user-initiated submission |
US20080256513A1 (en) * | 2007-04-10 | 2008-10-16 | Microsoft Corporation | Interruptible client-side scripts |
US20080307391A1 (en) * | 2007-06-11 | 2008-12-11 | Microsoft Corporation | Acquiring coverage data from a script |
WO2011055945A2 (ko) * | 2009-11-03 | 2011-05-12 | 주식회사 안철수연구소 | 악성 사이트 검출 장치 및 방법 |
CN102314561A (zh) * | 2010-07-01 | 2012-01-11 | 电子科技大学 | 基于api hook的恶意代码自动分析方法和系统 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6463583B1 (en) | 1999-04-08 | 2002-10-08 | Novadigm, Inc. | Dynamic injection of execution logic into main dynamic link library function of the original kernel of a windowed operating system |
US7886287B1 (en) | 2003-08-27 | 2011-02-08 | Avaya Inc. | Method and apparatus for hot updating of running processes |
US7360027B2 (en) * | 2004-10-15 | 2008-04-15 | Intel Corporation | Method and apparatus for initiating CPU data prefetches by an external agent |
US7694341B2 (en) | 2005-06-03 | 2010-04-06 | Apple Inc. | Run-time code injection to perform checks |
US7669186B2 (en) * | 2005-11-16 | 2010-02-23 | Sun Microsystems, Inc. | Debugging applications at resource constrained virtual machines using dynamically installable lightweight agents |
US8769672B2 (en) * | 2006-08-03 | 2014-07-01 | Symantec Corporation | Code injection prevention |
US8151277B2 (en) | 2007-05-15 | 2012-04-03 | Dynatrace Software Gmbh | Method and system for dynamic remote injection of in-process agents into virtual machine based applications |
US8060858B2 (en) * | 2006-12-29 | 2011-11-15 | Sap Ag | Injection library |
US20090024986A1 (en) | 2007-07-19 | 2009-01-22 | Microsoft Corporation | Runtime code modification |
JP2010191658A (ja) * | 2009-02-18 | 2010-09-02 | Meidensha Corp | アプリケーション・プログラムのメンテナンス方法 |
CN102023848A (zh) * | 2009-09-10 | 2011-04-20 | 联想(北京)有限公司 | 一种任务栏按钮的管理方法及装置 |
-
2012
- 2012-02-09 US US13/370,126 patent/US8539506B2/en active Active
-
2013
- 2013-02-04 JP JP2014556586A patent/JP6182160B2/ja active Active
- 2013-02-04 KR KR1020147022177A patent/KR102023223B1/ko active IP Right Grant
- 2013-02-04 WO PCT/US2013/024558 patent/WO2013119481A1/en active Application Filing
- 2013-02-04 CN CN201380008946.6A patent/CN104137062B/zh active Active
- 2013-02-04 EP EP13746698.3A patent/EP2812794A4/en not_active Ceased
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5802367A (en) * | 1995-07-07 | 1998-09-01 | Microsoft Corporation | Method and system for transparently executing code using a surrogate process |
US20060206585A1 (en) * | 2005-03-07 | 2006-09-14 | Nextwave Media Group, Llc | System and method for publishing targeted copy in a previously opened document independent of a user-initiated submission |
US20080256513A1 (en) * | 2007-04-10 | 2008-10-16 | Microsoft Corporation | Interruptible client-side scripts |
US20080307391A1 (en) * | 2007-06-11 | 2008-12-11 | Microsoft Corporation | Acquiring coverage data from a script |
WO2011055945A2 (ko) * | 2009-11-03 | 2011-05-12 | 주식회사 안철수연구소 | 악성 사이트 검출 장치 및 방법 |
CN102314561A (zh) * | 2010-07-01 | 2012-01-11 | 电子科技大学 | 基于api hook的恶意代码自动分析方法和系统 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107153536A (zh) * | 2017-03-31 | 2017-09-12 | 北京三快在线科技有限公司 | 一种应用处理方法及装置 |
CN108664390A (zh) * | 2017-03-31 | 2018-10-16 | 华为技术有限公司 | 一种内存泄露检测方法及设备 |
CN108664390B (zh) * | 2017-03-31 | 2021-10-01 | 华为技术有限公司 | 一种内存泄露检测方法及设备 |
CN111475229A (zh) * | 2020-04-09 | 2020-07-31 | 广州锦行网络科技有限公司 | 一种Windows平台下的dll注入方法及系统 |
CN111475229B (zh) * | 2020-04-09 | 2021-01-15 | 广州锦行网络科技有限公司 | 一种Windows平台下的dll注入方法及系统 |
CN111488282A (zh) * | 2020-04-13 | 2020-08-04 | 龙芯中科技术有限公司 | 业务功能处理方法、装置、电子设备及存储介质 |
CN111488282B (zh) * | 2020-04-13 | 2023-11-07 | 龙芯中科技术股份有限公司 | 业务功能处理方法、装置、电子设备及存储介质 |
CN112631891A (zh) * | 2021-01-05 | 2021-04-09 | 网易(杭州)网络有限公司 | 性能剖析方法及装置、电子设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2013119481A1 (en) | 2013-08-15 |
EP2812794A4 (en) | 2016-05-18 |
CN104137062B (zh) | 2017-08-15 |
JP6182160B2 (ja) | 2017-08-16 |
KR102023223B1 (ko) | 2019-11-04 |
US8539506B2 (en) | 2013-09-17 |
US20130212595A1 (en) | 2013-08-15 |
JP2015507298A (ja) | 2015-03-05 |
EP2812794A1 (en) | 2014-12-17 |
KR20140123521A (ko) | 2014-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104137062A (zh) | 将代码动态注入到运行中的进程 | |
CN102193824B (zh) | 虚拟机均质化以实现跨异构型计算机的迁移 | |
US9798555B2 (en) | Application implementation method and apparatus | |
US11385903B2 (en) | Firmware update patch | |
CN111527474B (zh) | 软件功能的动态交付 | |
US20150220308A1 (en) | Model-based development | |
CN103229142A (zh) | 管理软件产品虚拟镜像的先决条件的方法、计算机程序和系统 | |
CN105144093A (zh) | 使用基础设施管理代理供应的工作负荷部署 | |
US11327816B2 (en) | Monitoring components in a service framework | |
CN110214314B (zh) | 操作系统验证 | |
US9811347B2 (en) | Managing dependencies for human interface infrastructure (HII) devices | |
US20070220249A1 (en) | Data structure and method for managing modules associated with a kernel | |
US8484616B1 (en) | Universal module model | |
CN112394906B (zh) | 一种应用切换运行的方法及设备 | |
CN116301596A (zh) | 一种软件raid构建方法、装置、设备及存储介质 | |
JP5840290B2 (ja) | ソフトウェア操作性サービス | |
CN114880073A (zh) | 一种对用户屏蔽Web框架的云应用引擎部署方法、装置、设备和存储介质 | |
CN114816445A (zh) | 系统平台架构、函数发布方法及装置、平台及存储介质 | |
KR101420026B1 (ko) | 부팅 프로세스 중에 파일들을 로딩하기 위한 방법, 장치 및 컴퓨터 판독가능 저장 매체 | |
US8615736B2 (en) | Module facility for JAVASCRIPT language | |
US20240152371A1 (en) | Dynamic re-execution of parts of a containerized application pipeline | |
CN114579160A (zh) | 前端组件在线更新方法、装置、设备及存储介质 | |
CN115840617A (zh) | 一种调试方法、系统及相关装置 | |
CN117407023A (zh) | 低代码平台应用版本自动化升级方法、装置、设备及介质 | |
CN115390804A (zh) | 虚拟环境集成方法、计算设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150803 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20150803 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |