CN105247483A - 应用内的带外框架库 - Google Patents

应用内的带外框架库 Download PDF

Info

Publication number
CN105247483A
CN105247483A CN201480026245.XA CN201480026245A CN105247483A CN 105247483 A CN105247483 A CN 105247483A CN 201480026245 A CN201480026245 A CN 201480026245A CN 105247483 A CN105247483 A CN 105247483A
Authority
CN
China
Prior art keywords
version
implicit expression
compilation part
compilation
code
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
Application number
CN201480026245.XA
Other languages
English (en)
Other versions
CN105247483B (zh
Inventor
E·圣约翰
M·R·博加尼
A·什里拉姆
D·基恩
D·斯瓦卡
K·G·康纳
G·O·考克
J·科塔斯
M·瑞海森
M·罗索斯
W·苏
M·C·科恩
Z·陈
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN105247483A publication Critical patent/CN105247483A/zh
Application granted granted Critical
Publication of CN105247483B publication Critical patent/CN105247483B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44536Selecting among different versions

Abstract

经增强的绑定器在选择要加载的软件库的版本时提供灵活性和确定性,且经增强的加载器阻止对安全漏洞脆弱的库版本被加载。该绑定器可执行统一、隐式覆盖、和/或重定向。隐式覆盖搜索因汇编件而异的位置以寻找隐式版本,并在隐式版本更大时用隐式版本覆盖先前选择的统一或其他版本。该隐式版本随着个体汇编件被更新,而统一版本随着框架被更新。重定向可覆盖隐式版本。与重定向不同,隐式版本不引述显示范围且在应用配置文件之外被找到。隐式版本由汇编件显式指定而无需XML声明。基于响应于已知带外汇编件、带外服务属性、或顾客服务库的列表而被放置的带外元数据,脆弱的库不被加载。

Description

应用内的带外框架库
背景
一些设备不包含软件,而一些设备仅包含在安装之后极少(即便有)修改的简单的嵌入式软件。但是如今使用的许多不同设备——诸如仅举数例:智能电话、平板计算机、膝上型计算机、以及当代汽车——包含复杂的软件,所述软件包括由一个或多个应用使用的独立的可更新库。在一些软件开发环境中,这些软件库中的一些或全部是框架的一部分。一些商业上可用的软件框架包括框架(Oracle美国公司的商标)、应用开发框架(Oracle美国公司的商标)、各种模型-视图-控制器(MVC)框架、各种web应用框架、以及广泛使用的.NETTM框架(微软公司的商标)。
使用可分开更新的库提升了代码重用,帮助限制改变源代码时需要的重编译,并且帮助按照使大型程序更易于开发和维护的方式组织大型程序。但是在应用被调用时遇到库的不同版本的可能性也增加了挑战。由于作为组来更新框架库的已建立实践、以及由于在一应用中使用的不同库通常由不同供应商提供以及更新的事实,这些挑战被复杂化。
概述
计算领域的技术人员将理解,本文描述的实施例中的一些涉及在选择要加载的软件库的版本以支持给定操作上下文内的应用时提供灵活性和确定性两者的技术问题。还要理解,一些实施例涉及高效且准确地确定已知对安全漏洞脆弱的库版本是否已在给定操作上下文中加载的技术问题。在仔细审阅本文档之后,本领域技术人员将知道,本文描述的实施例旨在且被约束为作为一个或多个计算系统内的计算组件(即,通过执行软件指令)而存在并操作。相应地,各实施例不能被非计算项实际取代,所述非计算项诸如人类的脑力过程,如仅仅是抽象或者如所传播的信号本身。
在计算系统中,当应用程序引用软件库时,绑定器选择要加载的库的版本以支持该应用。本文描述的一些实施例提供了包括隐式覆盖(override)部分的绑定器。隐式覆盖在本文中有时被称为“applocal(应用本地)”、“application-local(应用本地)”或“AppLocal”。
在一些实施例中,存储器与处理器可操作地通信,且驻留于存储器中的绑定器由隐式覆盖代码增强。绑定器被配置成与处理器和存储器交互来确定所引用的汇编件的哪个版本将向加载器标识以加载以支持应用的执行。术语“库”和“汇编件”在本文中可互换地使用以描述可个体地版本化的计算组件。具有一版本的给定汇编件可包括具有其自己的相应版本的其他汇编件和/或以其他方式依赖于所述其他汇编件。
在一些实施例中,隐式覆盖代码包括用于搜索至少一个因汇编件而异的位置中的“隐式版本(implicit_version)”的代码、用于在找到该隐式版本之后将该隐式版本与某个其他版本进行比较的代码、以及用于在该隐式版本大于所述其他版本时用该隐式版本有条件地覆盖所述其他版本的代码。版本号通常随时间增大,所以在汇编件的版本X比该汇编件的另一版本Y新时,版本X通常“大于”版本Y。
在一些实施例中,在隐式覆盖期间搜索的该一个或多个因汇编件而异的位置包括以下的至少一项:具有与该汇编件共用的名称以及位于该应用的目录内的文件、该应用的由搜索约定指定的子目录、在目录路径列表中指定的位置,该列表位于该应用的目录中、在文件名列表中指定的位置(该列表位于该应用的目录中)。
在一些实施例中,绑定器包括框架统一部分,该框架统一部分被馈送到隐式覆盖部分中。框架统一本身对于计算领域技术人员而言很熟悉。框架统一例如与.NETTM框架(微软公司的商标)一起使用以帮助确保相互一致的汇编件集合被加载。框架中的汇编件通常作为集合被版本化并发布。
在本上下文中,一些实施例提供了具有隐式覆盖代码并且还包括框架统一代码的绑定器。利用框架统一代码,绑定器被配置成检查汇编件是否在耦合到受管运行时的汇编件的预定义框架中。框架统一代码包括用于将所请求版本(requested_version)与统一版本(unification_version)进行比较并且在统一版本大于所请求版本且该汇编件位于该预定义框架中时用统一版本有条件地覆盖所请求版本。经增强的绑定器被配置成调用框架统一代码来获得统一阶段结果,并随后用该统一阶段结果调用该隐式覆盖代码来获得隐式覆盖阶段结果。
在一些实施例中,绑定器包括绑定重定向部分,该绑定重定向部分由该隐式覆盖部分馈送。绑定重定向本身对于计算领域技术人员而言很熟悉。XML绑定重定向命令以及发布者策略语句形式的绑定重定向可在例如使用.NETTM框架(微软公司的商标)的计算环境中找到。在熟悉的用途中,绑定重定向被用来修改框架统一的(一个或多个)结果。然而,在本文描述的一些实施例中,绑定重定向修改(一个或多个)隐式覆盖结果。即,在一些实施例中,隐式覆盖计算被注入到框架统一阶段和绑定重定向阶段之间。
在一些实施例中,用隐式覆盖代码增强的绑定器还包括被配置成检查绑定重定向命令的绑定重定向代码。绑定重定向代码包括用于响应于绑定重定向命令来覆盖隐式版本的代码,且绑定器被配置成在调用隐式覆盖代码之后调用绑定重定向代码。在一些实施例中,用隐式覆盖代码增强的绑定器还包括框架统一代码和隐式覆盖代码两者。
一些实施例的特征在于隐式覆盖阶段和绑定重定向阶段之间的一个或多个差别。在一些实施例中,隐式版本不引述显式范围,而绑定重定向则引述:如果当前选择的版本在范围X-Y中,则转而使用版本Z。在一些实施例中,隐式版本在该应用的配置文件之外被找到,但是绑定重定向在该配置文件内被指定。在一些实施例中,隐式版本由该汇编件隐式地指定而无需XML声明,而绑定重定向由XML声明指定。
一些实施例的特征在于隐式覆盖阶段和框架统一阶段之间的差别。具体而言,隐式版本随着个体汇编件被更新,而统一版本随着汇编件的框架被更新。使汇编件成为带外汇编件(不限于随框架更新的汇编件)允许该汇编件的更频繁的更新。框架更新往往以比个体汇编件的开发者有时偏好的间隔明显更长的间隔发生,但是这种不方便性被框架成员的益处(诸如框架汇编件的广泛兼容性测试)盖过。
上面标识的增强的绑定器变种帮助在选择要加载的软件库的版本以支持给定操作上下文中的应用时提供灵活性和确定性。该绑定器对操作上下文的各方面做出响应,诸如操作上下文的表示框架统一水平的统一版本,操作上下文的汇编件应当被当作关于框架在带外来对待的applocal指示,以及操作上下文的在应用的配置文件、机器配置、和/或发布者策略中的“最终字”绑定命令。
选择要加载哪个汇编件版本的绑定器通常与定位和加载所选择的版本的汇编器代码的加载器一起紧密工作。具体而言,加载器可确定该绑定器所选择的汇编件版本不应当被加载,因为该版本的汇编件代码具有已知安全漏洞。知道所关心的汇编件版本是否已经被审查可能是有用的。一些实施例使用一汇编件版本先前已在给定操作上下文中被加载的事实作为该汇编件版本不具有已知安全漏洞并且因此可被再次安全加载的指示——其已经被审查过了。给定操作上下文包括配置有软件和其他数据的给定机器或给定机器集合。
在一些实施例中,带外元数据条目被更新服务用来确定汇编件的脆弱版本是否曾经在该操作上下文中被加载。该带外元数据条目在本文中有时被非正式称为“面包屑”。该元数据条目可被实现为注册表键、文件系统日志条目或其他日志条目、树或列表中的元素,和/或通过使用适用于本文描述的用途的其他熟悉的机制。
具有app-local-enhanced(应用-本地-增强)的绑定器的一些实施例在汇编件被加载时放置将该汇编件标识为带外汇编件的面包屑。面包屑放置可基于例如已知带外汇编件的列表,或者汇编件的带外服务属性。在一些情况下,服务库放置面包屑。在一些情况下,应用安装包放置面包屑。在一些实施例中,脆弱汇编件列表和带外汇编件列表中的一个或两个可通过服务(servicing)来打补丁。
更正式地,一些实施例包括先前已在给定操作上下文中加载至少一次的汇编件。带外元数据的集合驻留于存储器中。该带外元数据集合包括针对先前加载的汇编件的条目。存储器还包括以下各项中的至少一者:(a)被配置成响应于在汇编件先前被加载时该汇编件至少部分匹配已知带外汇编件的列表而将该条目放置在该集合中的带外汇编件代码,(b)该先前加载的汇编件的带外服务属性。在一些实施例中,该存储器包括服务库,该服务库包括被配置成将该条目放置在该集合中的代码。
从规程角度,或从被配置的存储介质(如上所述,其不是所传播的信号本身)的角度,一些实施例导致用于确定所请求汇编件的哪个版本将向加载器标识以加载以支持应用的执行的技术过程的计算执行。在一些实施例中,该过程包括寻找在因汇编件而异的位置中的隐式版本,在找到隐式版本之后将该隐式版本与另一版本进行比较,以及在该隐式版本大于该另一版本时用该隐式版本来覆盖该另一版本。
在一些实施例中,该过程进一步包括执行所请求的汇编件的框架统一,且该框架统一产生要与该隐式版本进行比较的该另一版本。在一些实施例中,该过程进一步包括执行所请求的汇编件的绑定重定向,且该绑定重定向覆盖该隐式版本。一些实施例包括框架统一、隐式覆盖、以及绑定重定向。
一些实施例执行一个或多个步骤来放置带外元数据条目。条目放置包括创建、复制、或更新数据并将该数据放在该带外元数据集合中。在一些实施例中,即使在汇编件被列入对安全漏洞脆弱的黑名单中时,针对一汇编件版本的带外元数据条目也被放置。针对一汇编件版本的该带外元数据条目被针对正被加载的版本放置,即,在所有绑定阶段完成之后版本才被选择。
该带外元数据条目放置响应于该汇编件为带外汇编件的识别而进行。该识别可按各种方式来实现,诸如(a)将该汇编件与已知带外汇编件的列表至少部分匹配,并且作为响应将针对该汇编件的条目放置在该计算机系统上的元数据集合中;(b)在该汇编件中定位带外服务属性,并且作为响应将针对该汇编件的条目放置在该计算机系统上的元数据集合中;和/或(c)向该计算机系统提供服务包,且作为应用该服务包的一部分将针对该汇编件的条目放置在该计算机系统上的元数据集合中。
在一些实施例中,加载器将咨询脆弱汇编件身份的排除名单,并且如果所加载的汇编件匹配该排除名单中的条目,则该加载将被强行失败。更正式地,在一些实施例中,加载器过程没有找到该汇编件先前在给定机器上被加载的指示,确定该汇编件对安全漏洞是脆弱的,并且响应于该确定而使加载该汇编件失败。在没有有意迫使加载失败的情况下,加载正常情况下将已经成功。
所给出的示例只是说明性的。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。相反地,提供本发明内容是为了以简化的形式介绍将在以下具体实施方式中进一步描述的一些技术概念。本发明由权利要求书限定,在本发明内容与权利要求书有冲突的情况下,应该以权利要求书为准。
附图简述
将参考附图给出更具体的描述。这些附图只示出了选定的方面,且因此不完全确定覆盖或范围。
图1是示出具有至少一个处理器和至少一个存储器的计算机系统并且还示出经配置的存储介质(而不仅仅是信号)实施例的框图,该至少一个处理器和至少一个存储器在用于绑定和加载应用程序的汇编件和操作环境中可能存在于多个网络节点上的其他项的软件的控制下彼此交互;
图2是示出在示例架构中的增强的绑定和带外汇编件管理的各方面的框图;
图3是示出一些过程的步骤和经配置的存储介质实施例的流程图;
图4是进一步示出某一过程的步骤和经配置的存储介质实施例的流程图,其集中于绑定;以及
图5是进一步示出某一过程的步骤和经配置的存储介质实施例的流程图,其集中于带外汇编件管理。
详细描述
概览
在一些当前软件分发模型(诸如当前的.NETTM分发模型(微软公司的商标)),框架库被集中式安装并在机器范围内共享。汇编件绑定器遵从一策略来从中心位置,诸如全球汇编件高速缓存(GAC),定位这些框架汇编件。尽管此分发模型具有优点且被广泛使用,然而它也提出一些挑战。个体框架组件被迫等待中央发货工具(例如,重分发件(redistributables)、平台更新)来发布其新功能性,而不是按其自己的更快的节奏来发货新的发布版。而且,对框架库的更新影响安装在该机器上的所有应用。
本文描述的一些实施例使得应用能够承载框架库的应用本地(application-local)版本,如果所述框架库的应用本地版本具有比箱内副本的版本号更大的版本号则汇编件绑定器将偏爱它们。在一些实施例中,绑定器算法仍旧维护框架汇编件的现有列表(被熟知为“统一列表”)以用于兼容性,但却偏爱应用包中包括的库的版本(如果其存在且较新)而不是来自重分发件的版本。在一些实施例中,绑定器算法将禁止加载同一汇编件的多个版本。对于一些实施例,带外框架汇编件将与该应用包一起被发货和/或部署,而不是与框架发布一起。作为结果,个体框架组件的较新的带外版本可以在更大、较不频繁的、且具有更广泛影响的完整框架更新之外发货并且与应用包一起被部署。而且,应用开发者将不再被强迫实施平台更新先决条件或重新定位新框架版本来使用框架组件的新功能性。此外,在一些实施例中,使用框架组件的带外版本的影响将仅限于该应用本身的范围内,这避免了可能不想要的机器范围的行为改变。
此处描述的某些实施例可以在较宽泛的上下文中查看。例如,诸如绑定、框架、加载以及版本等概念可能与特定实施例有关。然而,并不能从宽泛上下文的可用性中得出此处对抽象概念寻求专有权;它们并不是专有的。相反,本发明聚焦于适当具体的实施例,其技术效果完全或部分地解决特定技术问题。涉及绑定、框架、加载以及版本的其他介质、系统和方法在本范围之外。因此,在对本发明的正确理解下,也避免了模糊性、抽象性、缺少技术性和附带的证据问题。
本文描述的实施例的技术特征对于本领域技术人员而言将显而易见,并且对于各种关注的读者而言也以各种方式显而易见。首先,一些实施例解决了诸如选择要绑定的汇编件版本或者确定被选择以进行绑定的汇编件版本是否也是安全的以便加载的技术问题。第二,一些实施例包括诸如计算硬件等技术组件,这些技术组件以除了通用计算机中的典型交互之外的方式与软件交互。例如,除了正常交互(诸如一般的存储器分配、一般的存储器读写、一般的指令执行、以及某种I/O)之外,本文描述的一些实施例还创建带外汇编件元数据条目,且一些实施例将应用本地版本与所请求或统一的版本比较以选择用于绑定的版本。第三,一些实施例所提供的技术效果包括带外元数据条目、脆弱汇编件的强迫加载失败、以及框架统一版本选择的覆盖。第四,一些实施例包括诸如对加载器的隐式覆盖增强、以及加载器中的带外汇编件支持等的技术适配。第五,一些实施例基于诸如汇编件版本和元数据条目等技术考虑来通过隐式覆盖功能性和/或通过带外汇编件检测和处理功能性来修改绑定器和/或加载器的技术功能性。第六,一些实施例的技术优点包括框架汇编件的更频繁的更新、用于选择要绑定的汇编件版本的改进的灵活性、以及对在带外汇编件中的安全漏洞的降低的脆弱性。
现在将参考诸如附图中所示出的那些示例性实施例,并使用特定语言来对其进行描述。但是,相关技术领域的且拥有本公开内容的技术人员将想到的对此处所示出的特征的更改和进一步的修改以及对此处的特定实施例所示的抽象原理的其他技术应用,都应该被视为在权利要求的范围内。
在本公开中阐明了各术语的含义,因此应该在仔细关注这些阐明的情况下阅读权利要求书。给出了具体示例,但是相关领域的技术人员将理解其他示例也可落在所使用的术语的含义范围内以及落在一个或多个权利要求的范围内。各术语不一定需要具有与它们在一般使用中(尤其在非技术使用中)或在特定行业使用中、或在特定字典或一组字典的使用中所具有的意义相同的意义。附图标记可以与各种措词一起使用,以帮助示出术语的广度。从给定文本片段中省略附图标记不一定意味着没有通过文本讨论附图的内容。发明人声明并行使他们对他们自己的词典的权利。这里可在具体实施方式中和/或在申请文件的别处显式地或隐式地定义术语。
如此处所使用的,“计算机系统”可包括例如一个或多个服务器、主板、处理节点、个人计算机(便携式或非便携式)、个人数字助理、智能电话、蜂窝或移动电话、至少具有处理器和存储器的其他移动设备、和/或提供至少部分地由指令来控制的一个或多个处理器的其他设备。指令可以采用存储器中的固件或其他软件和/或专用电路的形式。具体而言,虽然可发生许多实施例在工作站或膝上型计算机上运行,但是其他实施例也可以在其他计算设备上运行,并且任何一个或多个这样的设备都可以是给定实施例的一部分。
“多线程化”计算机系统是支持多个执行线程的计算机系统。术语“线程”应被理解为包括能够或经历调度(以及可能同步)的任何代码,并且也可以另一名称来为人所知,如“任务”、“进程”或“协同例程”等。线程可以并行地、按顺序、或以并行执行(例如,多处理)和顺序执行(例如,时间分片)的组合来运行。在各种配置中都已设计了多线程化环境。执行线程可以并行地运行,或者线程可以被组织为并行执行,但是实际上轮流按顺序执行。例如,多线程化可以通过在多处理环境中在不同核上运行不同线程、通过对单个处理器核上的不同线程进行时间分片、或者通过时间分片和多处理器线程化的某种组合来实现。线程上下文切换可以例如由内核的线程调度器、由用户空间信号、或由用户空间和内核操作的组合来发起。线程可以轮流对共享数据进行操作,或者例如每一线程都可以对其自己的数据进行操作。
“逻辑处理器”或“处理器”是单个独立硬件线程处理单元,如同时多线程实现中的核。作为另一示例,每核运行两个线程的超线程四核芯片具有8个逻辑处理器。逻辑处理器包括硬件。术语“逻辑”被用来防止给定芯片具有至多一个处理器的错误结论;“逻辑处理器”和“处理器”在此可互换地使用。处理器可以是通用的,或者它们可被定制用于特定用途,例如图形处理、信号处理、浮点算术处理、加密、I/O处理等等。
“多处理器”计算机系统是具有多个逻辑处理器的计算机系统。多处理器环境存在于各种配置中。在一给定配置中,所有处理器可在功能上相同,而在另一配置中,由于具有不同的硬件能力、不同的软件分配或两者,某些处理器可与其他处理器不同。取决于配置,处理器可在单个总线上紧密地彼此耦合,或它们可松散地耦合。在某些配置中,处理器共享一中央存储器,在某些配置中,它们各自具有自己的本地存储器,在某些配置中,存在共享和本地存储器两者。
“内核”包括操作系统、系统管理程序、虚拟机、BIOS代码、以及类似的硬件接口软件。
“代码”指的是处理器指令、数据(包括常量、变量、以及数据结构)、或指令和数据两者。
“程序”在本文中被广泛地使用以包括应用、内核、驱动程序、中断处理程序、库、以及程序员(也被成为开发者)编写的其他代码。
“供应商”意思是控制内容和/或代码分发的商业性或非商业性组织、个人、或其他主体。
如此处所使用的“包括”允许附加元素(即,包括意味着包含),除非另外指明。“由...构成”意味着基本上由...构成或完全由...构成。当X中的非Y部分(如果有的话)可以被自由更改、移除和/或添加而不在考虑所述权利要求时更改所要求保护的实施例的功能时,X基本上由Y构成。
“进程”在此有时被用作计算科学领域的术语,并且在该技术意义上涵盖资源使用者,即例如协同例程、线程、任务、中断处理程序、应用进程、内科进程、过程和对象方法。“进程”在此还可被用作本领域的专利法术语,例如,在描述与系统权利要求或制品(经配置的存储介质权利要求)相对的过程权利要求时。类似地,“方法”在此有时被用作计算科学领域内的技术术语(一种“例程”)并且还被用作本领域的专利法术语(“过程”)。技术人员将理解在特定实例中旨在是什么含义,并且还将理解给定所要求保护的过程或方法(在专利法的意义上)有时可使用一个或多个过程或方法(在计算科学意义上)来实现。
“自动地”指的是使用自动化(例如,由用于这里所讨论的特定操作和技术效果的软件配置的通用计算硬件),与没有自动化相对。具体而言,“自动”执行的步骤在理论上或在一个人的意识中不是用手执行的,但这些步骤可由人类来启动或由人类来交互式地引导。自动化步骤使用机器执行的以获得在没有由此提供的技术交互的情况下将不会实现的一个或多个技术效果。
技术人员理解技术效果是技术实施例的假定目标。仅仅是在一实施例中涉及计算并且这些计算也可以在没有技术组件(例如,通过纸和笔或甚至作为脑力步骤)的情况下执行的事实不会移除技术效果的存在或更改该实施例的具体且技术的特性。例如,某些熟悉的设备执行平衡计算来维持其平衡;一些示例包括移动机器人以及轮式个人移动设备(Segway公司的商标)。这些设备不是本文描述的实施例的一部分,但是它们示出了这一点:技术组件提供了技术效果,而不仅仅是思维步骤。平衡计算显然不能通过思维步骤或通过纸和笔来足够快速地执行以提供在许多移动机器人或轮式个人移动设备中存在的平衡。具有动态平衡设备的技术效果从而通过技术组件来提供,所述技术组件包括与平衡控制软件交互的处理器和存储器。
“在计算上”同样指的是使用计算设备(至少是处理器加上存储器),且排除了仅通过人类思考或仅通过单独的人类动作而获得结果。例如,用纸和笔作算术不是如本文所理解的在计算上作算术。计算结果更快、更宽泛、更深、更准确、更一致、更全面和/或以其他方式提供超出单独的人类表现范围的技术效果。“计算步骤”是通过计算执行的步骤。然而,“自动地”和“在计算上”都不一定意味着“立即”。“在计算上”和“自动地”在此可互换地使用。
“抢先式”意味着没有来自用户的直接请求。的确,用户甚至可能直到已经向该用户呈现一实施例中的抢先式步骤的结果才意识到该步骤是可能的。除非另外指明,否则此处描述的任何计算和/或自动化步骤都可以被抢先完成。
贯穿本文,对任选复数“(诸)”的使用意味着一个或多个所指示的特征存在。例如,“(诸)处理器”意味着“一个或多个处理器”或等效于“至少一个处理器”。
贯穿本文,除非另外明确表明,否则对过程中的某一步骤的任何引用都假定该步骤可直接由所关注的一方执行和/或由该方通过介入机制和/或介入实体而间接地执行,且仍然在该步骤的范围内。也就是说,除非直接执行是被明确表明的要求,否则并不要求由关注方对步骤的直接执行。例如,涉及某一利益相关方的关于目的地或其他主体的诸如应用、绑定、表征、检查、比较、配置、确定、执行(executing)、失败、寻找、迫使、标识、包括、调用、加载、定位、匹配、获得、覆盖、执行(performing)、放置、重定向、需要、驻留、搜索、服务、支持、更新(及其各种时态变形等)之类的动作的步骤可涉及:诸如由某一其他方执行的转发、复制、上传、下载、编码、解码、压缩、解压、加密、解密、认证、调用等中间动作,但仍然被理解为是由该利益相关方直接执行的。
在参考数据或指令时,要理解这些项目配置了计算机可读存储器和/或计算机可读存储介质,从而将其变换为特定物品,而非简单地存在于纸张上、人的头脑中、或仅仅作为例如线路上的传播的信号。除非在权利要求中另外指明,否则权利要求不涵盖信号本身。本说明书假定,存储器或其它计算机可读存储介质不是美国专利商标局(USPTO)对InreNuijten案例的解释下的可授予专利的主题的范围之外的传播信号或载波。
此外,尽管明显相反,但将理解一方面的(a)计算机可读存储介质和计算机可读存储器,和另一方面的(b)也被称为信号介质的传输介质之间的清楚区别。传输介质是传播信号或载波计算机可读介质。相反,计算机可读存储介质和计算机可读存储器不是传播信号或载波计算机可读介质。除非另外声明,否则“计算机可读介质”意味着计算机可读存储介质,而不是传播信号本身。
操作环境
参考图1,用于一个实施例的操作环境100可包括计算机系统102。计算机系统102可以是多处理器计算机系统,或者也可以不是。操作环境可包括给定计算机系统中的一个或多个机器,它们可以群集的、客户机-服务器联网的、和/或对等联网的。个体机器是一计算机系统,且一组协同操作的机器也是计算机系统。给定计算机系统102可以例如用应用被配置用于最终用户、用于管理员、作为服务器、作为分布式处理节点、和/或以其他方式配置。
人类用户104可以经由键入的文本、触摸、语音、移动、计算机视觉、姿势和/或其它形式的I/O,通过使用显示器、键盘和其它外围设备106来与计算机系统102交互。用户界面可支持实施例和一个或多个人类用户之间的交互。用户界面可包括命令行界面、图形用户界面(GUI)、自然用户界面(NUI)、语音命令界面和/或其它界面呈现。用户界面可以在本地台式计算机或例如智能电话上生成,或者它可以从web服务器生成并被发送到客户机。用户界面可被生成为服务的一部分并且它可以与诸如社交网络服务等其它服务集成。给定操作环境包括支持这些不同的用户界面生成选项和使用的设备和基础结构。
例如,自然用户界面(NUI)操作可使用例如语音识别、触摸和指示笔识别、屏幕上和屏幕附近的姿势识别、空中姿势、头部和眼睛跟踪、话音和语音、视觉、触摸、姿势、和/或机器智能的那些方法。NUI技术的一些示例包括触敏显示、话音和语音识别、意图和目的理解、使用深度相机(如立体相机系统、红外相机系统、RGB相机系统、以及这些的组合)的运动姿势检测、使用加速度计/陀螺仪的运动姿势检测、面部识别、3D显示、头部、眼睛和注视跟踪、浸入式增强现实和虚拟现实系统,所有这些都提供更自然的接口,以及用于使用电场传感电极(脑电仪和相关工具)的传感大脑活动的技术。
技术人员将认识到此处在“操作环境”下呈现的上述各方面和其它方面还可形成给定实施例的一部分。本文的标题不旨在提供将特征严格地归类成实施例和非实施例特征类别。
作为另一示例,游戏应用可以驻留在MicrosoftXBOX(微软公司的商标)服务器上。游戏可从控制台购买或者整体或部分在服务器上、在控制台上、或在两者上执行。多个用户可以使用标准控制器、空中姿势、语音或使用诸如智能电话或平板等附随设备来与该游戏交互。给定操作环境包括支持这些不同的使用场景的设备和基础结构。
系统管理员、开发人员、工程技术人员、以及最终用户各自都是特定类型的用户104。代表一个或多个人操作的自动化代理、脚本、回放软件等也可以是用户104。在某些实施例中,存储设备和/或联网设备可以被认为是外围设备。图1中未示出的其他计算机系统可以按技术方式与计算机系统102进行交互,或者例如通过网络接口设备使用到网络108的一个或多个连接与另一系统实施例进行交互。
计算机系统102包括至少一个逻辑处理器110。计算机系统102与其他合适的系统一样,还包括一个或多个计算机可读存储介质112。介质112可以是不同的物理类型。介质112可以是易失性存储器、非易失性存储器、固定在位的介质、可移动介质、磁介质、光学介质、和/或其他类型的物理可持续存储介质(而不仅仅是传播信号)。具体而言,诸如CD、DVD、记忆棒、或其他可移动非易失性存储器介质之类的经配置的介质114在被插入或以其他方式安装时可以在功能上变为计算机系统的一技术部分,从而使其内容可被访问以供交互以及由处理器110使用。可移动的经配置的介质114是计算机可读存储介质112的示例。计算机可读存储介质112的某些其他示例包括内置RAM、ROM、硬盘、以及其他不能被用户104轻松地移走的存储器存储设备。计算机可读介质或计算机可读存储器均不包括信号本身。
介质114用可由处理器110执行的指令116来配置;“可执行”在此以宽泛的意义被使用以包括机器代码、可解释代码、字节码和/或在例如虚拟机上运行的代码。介质114还被配置有数据118,该数据通过指令116的执行被创建、修改、引用和/或以别的方式用于技术效果。指令116和数据118配置它们所驻留的存储器或其它存储介质114;当该存储器或其它计算机可读存储介质是给定计算机系统的功能部分时,指令116和数据118还配置该计算机系统。在某些实施例中,数据118的一部分代表了诸如产品特征、清单、物理测量值、设定、图像、读数、目标、卷等等之类的现实世界的项。这一数据还通过备份、还原、提交、中止、重新格式化和/或其它技术操作来变换。
尽管一实施例可被描述为被实现为由计算设备(例如通用计算机、智能电话、或游戏控制台)中的一个或多个处理器执行的软件指令,但这一描述并非意味着穷尽所有可能的实施例。技术人员将会理解还可经常整体地或部分地直接用硬件逻辑来实现相同或相似功能,以提供相同或相似的技术效果。作为对软件实现的替换或补充,本文描述的技术功能可以至少部分地由一个或多个硬件逻辑组件来执行。作为示例并且不排除其它实现,一实施例可包括硬件逻辑组件,诸如现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统组件(SOC)、复杂可编程逻辑器件(CPLD)和类似组件。一实施例的组件可基于它们的输入、输出和/或它们的技术效果来被分组成各个交互功能模块。
在所示环境100中,具有一个或多个应用122的代码120库包括具有相应版本126的汇编件124(例如,DLL文件和其他库)。“DLL”代表“动态链接库”,也被称为“动态加载库”。汇编件124可以是框架142的一部分,该框架142是作为内部兼容组发布的汇编件集合,以支持来自多个供应商的多个应用122。框架汇编件通常是应用运行时144的一部分,该应用运行时提供主要(即便不是全部)由在给定系统102中运行的应用使用的服务。
软件开发工具128(诸如编译器130、调试器132、绑定器134、以及加载器136)通过产生和/或转换代码120以由处理器110执行来帮助软件开发。代码120、工具128、以及图中和本文中讨论的其他项可各自部分或全部驻留于一个或多个硬件存储介质112中,由此配置那些介质以实现所有硬件-软件合作操作中固有的“正常”(即,最小公分母)交互的技术效果。
除了处理器110(CPU、ALU、FPU和/或GPU)、存储器/存储介质112、显示器140和电池之外,操作环境还可包括其它硬件,诸如总线、电源、有线和无线网络接口卡和加速度计,这些硬件的各自操作在此被描述为并非已经对技术人员显而易见。CPU是中央处理单元、ALU是算术和逻辑单元、FPU是浮点处理单元而GPU是图形处理单元。
给定操作环境100可包括向开发者提供一组协调的软件开发工具的集成开发环境(IDE)138,其向开发者提供一组经协调的软件开发工具128,诸如编译器、源代码编辑器、剖析器、调试器等。具体而言,对于一些实施例,合适的操作环境中的一些包括或帮助创建被配置成支持程序开发的Visual开发环境(微软公司的商标)。一些合适的操作环境包括环境(OracleAmerica有限公司的商标),并且一些操作环境包括利用诸如C++或C#(“C-Sharp”)等语言的环境,但本文的教导适用于各种各样的程序设计语言、程序设计模型、以及程序,以及本质上适用于软件开发领域之外的使用内联的技术努力。
在图1中以轮廓形式示出了一个或多个项目来强调它们不一定是所示操作环境的一部分,但是可以与此处讨论的操作环境中的项目互操作。未采用轮廓形式的项在任何附图或任何实施例中也不一定是必需的。
系统
图2示出了适合与一些实施例一起使用的体系结构的各方面。通过附加上下文,在一些环境100中,在应用122被调用后,该应用所使用的汇编件124被加载到存储器112中以按需执行。这有时被称为汇编件的“延迟加载”或“懒加载”。在执行期间哪些汇编件实际被需要部分取决于在应用执行期间采用哪条路径来穿过应用代码以及其所加载的汇编件。当使用延迟加载时,不需要的汇编件不必被加载。
在执行期间,应用122请求汇编件124,例如foo.dll。该请求可由该应用直接做出,或者可由代表该应用运行的代码(诸如另一汇编件或运行时144)做出。该请求可以是主动(例如,应用可预先加载特定汇编件以避免稍后在执行期间的延迟)的,或者该请求可响应于在执行期间尝试引用该汇编件时发生的异常或另一事件来做出。在许多(但非全部)情况下,使用汇编件的请求将指定该汇编件的特定版本,例如,foo.dll版本2。在本讨论中,汇编件的所请求的版本被称为所请求版本且用参考标号202来表示。
在汇编件被请求之后,绑定器134确定该汇编件的哪个版本要被加载,且随后加载器136将该汇编件代码加载到存储器中所以其可以执行。该绑定器负责确定要使用该汇编件的哪个版本126、204。在一些环境中,该绑定器还负责在文件系统或其他存储内定位该版本,而在其他环境中,定位要加载的文件是加载器的责任。加载器136通常负责分配存储器112、将汇编件代码复制到存储器中、以及基于所复制的代码的存储器地址来调整代码内的指针。绑定器134和加载器136还可具有本文没有讨论的其他责任。
对于一些实施例,读者感兴趣的一点会是绑定器如何以及何时选择针对一应用的汇编件版本。至于何时,汇编件版本的选择在该应用的针对该汇编件的“绑定时间(bind-time)”期间做出。汇编件的绑定时间在对该汇编件的请求被该应用或代表该应用运行的代码作出时开始。汇编件的绑定时间在该绑定器已确定要使用该汇编件的哪个版本时结束。
至于如何选择版本,绑定可如本文所述地被增强以包括三个主要阶段,这些阶段在此处被称为框架统一、隐式覆盖、以及绑定重定向。所述阶段按该次序发生。但是在一些感兴趣的情形中,不发生绑定重定向,所以绑定仅包括框架统一阶段以及之后的隐式覆盖阶段。在其他感兴趣的情形中,绑定仅包括隐式覆盖和绑定重定向阶段。在又一些感兴趣的情形中,仅发生隐式覆盖阶段。
框架统一阶段有时被简称为“统一”。隐式覆盖阶段有时被称为“applocal(应用本地)”或“AppLocal(应用本地)”阶段。绑定重定向阶段有时使用用于绑定重定向的特定机制来指代,诸如应用配置(appconfiguration)或发布者策略(publisherpolicy)。
在包括增强的绑定器206的一些实施例中,框架统一规程或其他统一代码208对照统一版本210来检查该汇编件的所请求版本202。该汇编件的统一版本在该应用的绑定时间之前在框架142中被指定。如果所请求版本小于或等于统一版本,则框架统一代码208返回统一版本。即,增强的绑定的框架统一阶段产生统一版本作为其结果212。如果所请求版本大于统一版本,则框架统一失败。如果框架统一失败,则要么(a)绑定失败(在一些实现中),要么(b)绑定继续到隐式覆盖阶段(在其他实现中)。
在一些实施例中,框架142包括耦合到受管运行时144的汇编件124的集合。该框架的统一规程使用统一版本的保守值。即,该汇编件的统一版本与该框架中的所有其他汇编件正常工作。换言之,由统一制定的汇编件版本已经被对照彼此进行测试以帮助确保它们与彼此正确地互操作。
在一些实施例中,如果所请求的汇编件版本具有主要和次要部分等于或小于统一版本,则统一结果将是统一版本。例如,如果统一到4.0.0.0,则2.0.0.0或4.0.1.0将被重新确定目标到4.0.0.0,但是4.5.0.0和5.0.0.0将不会。主要和次要部分被不同供应商不同地定义,但是一般而言直到左边第一个(最左)小数点的数字是主要部分,而次要部分至少包括到该第一个小数点右侧的数字。在次要部分右侧的其他数字(如有存在)例如可以是构建号或修订号。
在一些实施例中,实现隐式覆盖阶段的代码238检查一个或多个因汇编件而异的位置214以得到隐式版本216值。例如对于汇编件foo.dll,隐式覆盖阶段可打开该应用的目录或由约定或者在指定位置213中的目录路径和/或文件名的列表指定的子目录中的foo.dll文件,例如,该应用的目录中的foo_versions(foo版本)文件。在一些实施例中,关于检查哪些位置以及以什么次序检查,隐式覆盖阶段与加载器探测阶段并行。如果找到隐式版本值,且该值大于统一版本,则经增强的绑定器206将选择该汇编件的隐式版本。否则,经增强的绑定器206不使用隐式版本值来覆盖统一版本。
在一些实施例中,实现绑定重定向阶段的代码236在应用配置文件218或发布者策略220中寻找汇编件绑定重定向命令240。绑定重定向命令具有以下形式:如果当前选择的版本在范围X-Y内,则转而使用版本Z。应用的应用配置文件中的汇编件的绑定重定向命令在该汇编件正被绑定到该应用时应用于该汇编件。发布者策略中的汇编件的绑定重定向命令在该汇编件正被绑定于该发布者策略的范围(即,给定机器)内的任何应用时应用于该汇编件。在一些实施例中,绑定重定向可降低要加载的汇编件的版本(例如,重定向版本2.0.0.0到1.0.0.0),而统一和隐式覆盖不能降低该版本号。
隐式覆盖阶段不同于框架统一阶段。第一,隐式覆盖阶段的结果部分取决于框架统一阶段的结果,因为隐式版本被与统一版本进行比较。第二,隐式版本随着个体汇编件被更新,而统一版本随着框架(即,随着汇编件的集合)被更新。
关于统一,本领域技术人员可能注意,应用本地绑定阶段在涉及加载作为框架142的一部分经受统一的汇编件以及涉及加载因为不是框架的一部分所以不被统一的汇编件这两种情况下都是有用的。即使不进行统一,应用本地绑定也是有价值的,因为它令应用122所使用的不同模块在操作上下文在运行时每个应用模块仅加载一个版本时引用汇编件的不同版本。例如,msbuild会在本地放置最新的依赖关系。应用本地还准许用户通过简单地复制、写入、或删除文件来指定版本,而不是通过更复杂的创作配置XML命令的步骤。
隐式覆盖阶段也不同于绑定重定向阶段。第一,隐式版本可被绑定重定向命令覆盖,所以添加隐式阶段添加新功能性,同时保留绑定重定向阶段的现有功能性。第二,隐式版本不引述显式范围,这与绑定重定向的形式形成对比,绑定重定向的形式引述:如果当前选择的版本在范围X-Y内,则转而使用版本Z。将隐式覆盖阶段与绑定重定向分开的另外两件事为:(1)版本由本地汇编件隐式指定,所以模块供应商可包括它们想要定位的汇编件而无需访问该应用的配置文件,以及(2)该版本由本地汇编件隐式指定,所以开发者不需要写出绑定重定向的XML声明(该过程可能是复杂且易于出错的)。
图1和2中示出的一些实施例至少部分如在以下伪代码中所描述地操作。本领域技术人员将理解,为了清楚,从此伪代码中省略了部分绑定器复杂度。例如,如果输出大于统一后的值,则绑定重定向能对预统一版本进行动作。
在绑定器134(其可以是经增强的绑定器206)确定应当加载哪个汇编件版本之后,加载器136定位包含该汇编件的该版本的文件。加载器136可以是经增强的加载器222,其确定该汇编件的该版本先前是否对于给定进程(在该术语的计算机科学意义上)加载过,例如,通过检查加载器高速缓存。经增强的加载器222检查已知对安全漏洞很脆弱的汇编件的列表224。如果此汇编件版本已知是脆弱的,则加载器迫使加载失败。作为优化,一些实施例仅在每个进程(在该术语的计算机科学意义上)上的第一次加载器期间检查列表224,并高速缓存列表224查找的结果。一些经增强的加载器检查带外元数据条目228(“面包屑”)的集合226来确定这是否是带外汇编件。如果此汇编件是带外汇编件,则该加载器检查该汇编件版本是否脆弱。否则,如果该汇编件版本先前已被加载且不在带外,或者如果该汇编件版本先前未被加载但是不脆弱,则准许该汇编件的加载。
在一些实施例中,带外元数据条目228的集合226包含(a)在该汇编件具有带外服务属性230时,(b)在服务库232被应用时,和/或(c)在该汇编件在带外汇编件的列表234(此列表例如通过框架设置或通过另一框架142初始化规程来维护)中被找到时作出的条目。从而,在一些实施例中,一些面包屑由加载器写入并由更新服务读取,如在下段中所述,而其他面包屑则是带外汇编件的列表234的一部分。
在一些实施例中,带外元数据条目228由更新服务读取,诸如 更新服务或Windows更新服务(微软公司的商标),以确定库的脆弱版是否曾经在给定机器或给定机器集合被加载。即,面包屑228是DLL文件或其他库的一版本在给定操作上下文(诸如一机器)中存在的指示符。
在一些实施例中,经增强的加载器222至少部分根据下面的伪代码操作。在此伪代码中,Is_OOB汇编件表示带外服务属性230,BreadcrumbNotExist指示针对正被加载的汇编件版本的带外元数据条目是否被发现,而Is_Vulnerable指示该汇编件版本是否已知对于安全漏洞是脆弱的:
将理解,在大多数而非全部实施例中,汇编件124对于应用的给定模块仅在该应用的寿命中被加载一次。一旦加载发生,则加载器和/或绑定器保留该状态,从而使其有效地意识到该汇编件先前已被加载过。从而,在一些实施例中,如果对加载一汇编件版本的尝试不是对该汇编件的该版本在此系统上的首次加载尝试,则该加载器检查汇编件元数据条目的集合。汇编件携带将其标识为带外汇编件的元数据(属性230)。面包屑228条目被写到存储112以指示此汇编件的加载。
参考图1和2,一些实施例提供了具有逻辑处理器110和存储器介质112的计算机系统102,该存储器介质由电路、固件和/或软件来配置以提供本文描述的技术效果。
在某些实施例中,诸如人类用户I/O设备之类的外围设备106(屏幕、键盘、鼠标、图形输入板、话筒、扬声器、运动传感器等等)将可以在操作上与一个或多个处理器110和存储器进行通信。然而,一实施例也可以深嵌入在技术系统中,以便没有人类用户104直接与该实施例进行交互。软件进程可以是用户104。
在某些实施例中,该系统包括通过网络连接的多个计算机。联网接口设备可以使用例如诸如分组交换网络接口卡、无线收发机或电话网络接口之类的项来提供对网络108的接入,并可存在于给定计算机系统中。然而,一实施例也可以通过直接存储器存取、可移动非易失性介质、或其他信息存储-检索和/或传输方法来传递技术数据和/或技术指令,或者,计算机系统中的一实施例可以在不与其他计算机系统进行通信的情况下操作。
某些实施例在“云”计算环境和/或“云”存储环境中操作,其中计算服务不是自有的,而是按需提供的。例如,汇编件(assembly)124可以在联网云的多个设备/系统102上,请求所述汇编件的应用122可以被存储在云中的又一些其他设备中,且增强的绑定器206和/或增强的加载器222可以配置再一些其他云设备/系统102上的存储器112。
过程
图3-5示出一些过程实施例,它们在流程图300中共同表示,并分别在图4和5的流程图400和500中详细描述。各附图中示出或以其他方式公开的技术过程可以在某些实施例中自动(例如由增强的绑定器206和增强的加载器222)执行,例如在脚本的控制下或以其他方式需要极少或不需要同时的实况用户输入。除非另外指明,否则过程也可以部分自动地且部分手动地执行。在一给定实施例中,可以重复过程的零个或更多个所示出的步骤,有可能利用不同的参数或数据来操作。一实施例中的步骤也可以按照与图3中展示的自顶向下次序不同的次序来执行。步骤可以串行地、以部分重叠的方式、或完全并行地执行。遍历流程图300以指出在过程中执行的步骤的次序可以在过程的一次执行与该过程的另一次执行之间不同。流程图遍历次序也可以在一个过程实施例与另一过程实施例之间不同。各步骤还可以被省略、组合、重命名、重组、或以其他方式偏离所示出的流程,只要所执行的过程是可操作的,并符合至少一个权利要求。
此处提供了帮助示出该技术的各方面的示例,但是在本文内给出的示例并未描述所有可能的实施例。实施例不仅限于此处所提供的具体实现、排列、显示、特征、方法或情形。给定实施例可包括例如附加的或不同的技术特征、机制、和/或数据结构,并可以以别的方式偏离此处所提供的示例。
图1和2中示出的系统实施例按照与图3到5中示出的过程实施例的至少一些方面一致的方式操作。例如,一些实施例搜索并找到302至少一个因汇编件而异的位置中的“隐式版本”、在找到该隐式版本之后将该隐式版本与某个其他版本进行比较、以及在该隐式版本大于所述其他版本时用该隐式版本有条件地覆盖所述其他版本。
在一些实施例中,经增强的绑定器206包括框架统一部分,该框架统一部分被馈送到隐式覆盖部分中。绑定器206检查334汇编件是否处于框架142中,例如通过检查由该框架的供应商维护的列表。为了执行308框架统一,一些实施例将所请求版本与统一版本进行比较304并且在统一版本大于所请求版本且该汇编件位于该框架中时用统一版本有条件地覆盖306所请求版本。经增强的绑定器调用框架统一代码来获得336统一阶段结果212,并随后用该统一阶段结果调用该隐式覆盖代码来获得隐式覆盖阶段结果212。在一些实施例中,隐式版本随着个体汇编件被更新328,而统一版本随着汇编件的框架142被更新330。
在一些实施例中,绑定器206包括绑定重定向部分,该绑定重定向部分由该隐式覆盖部分馈送。绑定重定向被执行310,从而修改隐式覆盖结果212。绑定重定向代码包括用于响应于绑定重定向命令240来覆盖306隐式版本的代码;该经增强的绑定器206被配置成在调用隐式覆盖代码之后调用绑定重定向代码。
寻找302、比较304、覆盖206、统一执行308、重定向执行310、以及执行312本文描述的指定动作或动作集合的其他步骤在一些实施例中可通过执行314被专门设计来提供所述计算系统功能性的软件来联合且若干次执行。该软件的示例包括经增强的绑定器206和其构成代码208、236、238、经增强的加载器222,以及实现例如本文提供的伪代码的代码。
在一些实施例中,带外元数据条目228(被称为面包屑)被更新服务用来确定汇编件124的脆弱版本是否曾经在给定操作上下文中被加载。一些实施例在汇编件被加载时放置322把该汇编件标识为带外汇编件的面包屑。面包屑放置可基于将该汇编件匹配316到已知带外汇编件的列表234,或者基于例如定位318该汇编件的带外服务属性230。在一些情况下,服务库232在服务库被应用320时放置322该面包屑。一些实施例使用在汇编件被加载时由该加载器更新的状态信息来检查324汇编件先前是否在给定操作上下文中被加载至少一次。
从规程角度,或从被配置的存储介质(如上所述,其不是所传播的信号本身)的角度,一些实施例导致用于确定332所请求汇编件(也被称为所引用402的汇编件)的哪个版本将向加载器标识406以加载以支持应用的执行的技术过程的计算执行。在一些实施例中,该过程包括检查404隐式版本,且在一些情况下在因汇编件而异的位置214中寻找302隐式版本,在该隐式版本被找到之后将该隐式版本与另一版本进行比较304,并在该隐式版本大于该另一版本时用该隐式版本来覆盖306该另一版本。
在一些实施例中,该过程进一步包括执行308所请求的汇编件的框架统一,且该框架统一产生要与该隐式版本进行比较的该另一版本。在一些实施例中,该过程进一步包括检查338应用配置文件或机器配置文件或全局汇编件高速缓存(或其他位置)以寻找应用绑定重定向、发布者策略220、机器绑定重定向、和/或其他绑定重定向命令240并在这些命令被找到时执行310所请求的汇编件的绑定重定向。如本文所使用的,“绑定重定向命令”意味着应用配置、机器配置、发布者策略、或另一形式的语句、策略、或其他命令,其指定汇编件绑定。该绑定重定向覆盖隐式版本。一些实施例包括框架统一、隐式覆盖、以及绑定重定向。
一些实施例执行一个或多个步骤来在带外元数据条目尚不存在508时放置322该条目。条目放置322包括创建、复制、或更新数据并将该数据放在该带外元数据集合226中。在一些实施例中,即使在汇编件被列入易于具有安全漏洞的黑名单中时,针对一汇编件版本的带外元数据条目被放置322。该带外元数据条目放置响应于该汇编件为带外汇编件的识别502而进行。该识别可以各种方式实现,诸如(a)将该汇编件至少部分匹配316到已知带外汇编件的列表,(b)在该汇编件中定位318带外服务属性,和/或(c)向该计算机系统应用320服务包。
在一些实施例中,在检查324汇编件先前未在该系统102上被加载之后,加载器将咨询脆弱汇编件身份的排除名单以确定326该汇编件是否是脆弱的。如果所加载的汇编件匹配该排除名单中的条目,则将迫使504加载失败,如果没有找到匹配则将准许506加载。
一些实施例提供了用于计算系统自动确定是否将已被标识的所请求的汇编件的一版本加载到加载器以加载以支持该计算系统中的应用的执行的技术过程。该过程包括在该计算系统中执行以下软件指令的计算步骤,其定位计算系统中的带外元数据集合226,确定以下带外汇编件条件中的至少一个被满足:(a)所请求的汇编件匹配已知带外汇编件的列表中的条目,(b)所请求的汇编件包含318带外服务属性,并随后响应于确定该带外汇编件条件中的至少一个被满足时将所请求的汇编件的条目放置322到该计算机系统上的带外元数据集合中。
在一些实施例中,所述技术过程还包括确定326所请求的汇编件对于安全漏洞是脆弱的且响应于该确定不能加载所请求的汇编件。在一些实施例中,该过程确定326不知道所请求的汇编件对于安全漏洞是脆弱的,并且响应于该确定准许506加载器加载所请求的汇编件。一些实施例通过读取带外元数据集合中的所请求的汇编件的条目来确定502所请求的汇编件是带外汇编件。
一些实施例(但并非全部)组合带外元数据集合226的使用与应用本地(app-local)统一的使用。相应地,在一些实施例中,上述带外元数据集合技术过程之一还包括应用本地统一步骤,诸如在该计算系统中执行在因汇编件而异的位置中寻找隐式版本的软件指令,以及在该计算系统中执行在找到该隐式版本之后将该隐式版本与其他版本相比较的软件指令。
经配置的介质
一些实施例包括经配置的计算机可读存储介质112。介质112可包括盘(磁盘、光盘,或其他)、RAM、EEPROM或其他ROM、和/或其他可配置存储器,特别包括计算机可读介质(而不仅仅是传播信号)。经配置的存储介质可以特别地是诸如CD、DVD或闪存之类的可移动存储介质114。可以是可移动或不可移动并且可以是易失性或非易失性的通用存储器可被配置成使用数据118和指令116形式的诸如经增强的绑定器206、隐式覆盖代码230、经增强的加载器222、元数据条目228的集合226、带外服务属性230、以及因汇编件而异的位置214的列表来从可移动介质114和/或诸如网络连接等另一源进行读取来形成经配置的介质的实施方式。经配置的介质112能够使计算机系统执行本文所述的用于绑定和加载的技术过程步骤。如此,图1到5帮助示出了经配置的存储介质实施例和过程实施例,以及系统和过程实施例。具体而言,图3到5所示或此处另外教示的过程步骤中的任一个可用于帮助配置存储介质来形成配置的介质实施例。
其它示例
下面提供了额外的细节和设计考虑。如同此处的其他示例,在给定实施例中,所描述的特征可以单独地使用和/或组合地使用,或根本不使用。
那些本领域的技术人员将理解,实现细节可以涉及诸如特定API和特定示例程序之类的特定代码,且因此不必出现在每个实施例中。本领域的技术人员还将理解,在讨论细节时所使用的程序标识符和某些其他术语是针对具体实现的,且如此不必涉及每个实施例。尽管如此,虽然它们不一定需要出现在这里,但是提供了这些细节,因为它们通过提供上下文可以帮助一些读者,和/或可以示出此处所讨论的技术的许多可能的实现中的一些。
以下讨论从应用本地统一(ALU)文档中得出。ALU指定已被微软公司原型化的软件。ALU程序和/或文档的各方面与在此描述的各实施方式的各方面相一致或以其它方式示出这些方面。然而,将理解,ALU文档和/或实现选择不一定要约束这些实施例的范围,且同样ALU和/或其文档也可包含位于这些实施例的范围之外的特征。将理解,以下讨论部分地作为对不一定是本领域普通技术人员的读者的帮助来提供的,且因此可包含和/或省略其在下文中的叙述不是支持本发明严格所需的细节。
DotNetTM框架(也被称为.NetTM框架,微软公司的商标)提供了稳定且安全的平台,开发者可在该平台上构建应用。在该框架的当前模型中,库被集中式安装且在机器范围内共享。然而,这种集中提出一些挑战。个体框架组件等待集中式发货车辆以便使其功能性发出,这可能抑制组件原本将创新的速率。作为框架发布的等待时间的结果,框架组件也被约束而不能如期望那么快地对顾客反馈作出反应。最终,因为框架的集中式性质,单一更新将影响机器范围的应用,其可以是干扰性的。
本文描述的一些实施例改变框架所用来加载库的机制,以允许基于版本优先级从应用本地位置以及现有中央共享位置加载库。这种改变允许框架库按其自己的节奏作为独立组件发货,并帮助加速其对顾客反馈的反应。
在一些实施例中,用于这些库的分发机制包括NuGet包管理器,其是被放到应用本地路径中的DLL文件的zip存档。可能看上去,库的这种本地化将使得对框架的集中式服务的传统方法崩溃。然而,一些实施例允许更新服务可靠地检测并更新被本地发货到该应用的框架库的简单方式。一些实施例还阻止未经服务的库被加载并提供用于扫清来自系统的死比特(deadbit)的机制。在一些实施例中,补丁可经由现有更新机制使用现有部署技术来发货,同时安装发布者策略220来向前滚动脆弱DLL到该库的服务版本。
通过背景,更新和更新服务(微软公司的商标)提供用于服务集中安装的组件的集中式机制。然而,它们不像此处针对非集中式组件描述的那样工作,因为这些更新服务不能在系统上运行扫描;它们仅能查看特定机器范围的已知位置以进行服务。
作为附加背景,在一些SQLCompact(微软公司的商标)环境中采用不同方式。它们跟踪一些本地库,但是受到限制,因为它们依赖已知库集合,所述已知库集合作为产品的一部分以便准许它们按照带外方式被更新。它们受限还在于跟踪代码居于该应用中。
作为附加背景,图形设备接口(GDI+,微软公司的商标)安全问题解决一些应用本地考虑,但是基于对整个系统的扫描(这是非常昂贵的)来完成。另一背景示例是C运行时(CRT),即,Visual运行时(微软公司的商标)。此运行时允许将本地链接加载到应用中或集中式加载;集中式服务的唯一模式是集中式加载模式。
本文描述的一些实施例改变绑定器来允许框架库在应用内发货并改变将被用来服务将与应用一起发货的框架库的机制。一些实施例的一个方面是概括DotNetTM框架绑定器(微软公司的商标)。当前框架具有刚性绑定模型,其规定其可在何处寻找共享库。一些改变包括概括绑定算法来扩展共享库可从其加载的位置的列表,以及改变绑定算法来使用版本优先级来从应用本地位置加载可共享库的最新代码。这些创新将允许可共享库发货并由应用使用,而不管可能在该盒子(即,该机器)上的该库的其他版本。
一些改变涉及使可共享库可集中式服务。移动至应用本地模型可使可共享库更难以服务。但是一些实施例定义了用于将库标识为应用本地框架库的模型、用于分类和检查324这些应用本地库的加载的模型,用于跟踪这些库的位置以供未来扫清的模型,用于允许所发布的框架库也被服务320的机制,以及用于使得安全上脆弱的库在首次加载时失败504的机制。
用于服务的传统方式依赖于具有库被安装的指示符的集中式位置。一些设置创作具有将汇编件/库放入集中式位置或者将元数据/注册表键写到已知位置的能力。然而,具有应用本地库的一些实施例不施加这样的部署考虑。一些假定应用连同其库将被简单地复制到客户端机器。在这样的环境中,没有将应用库复制到已知位置或者将注册表键/元数据写到已知位置的机制。相反,在运行时中的机制收集关于汇编件加载的此信息。
例如,考虑名称为“System.Foo.dll”的库,其已被加载至少一次。在一些实施例中,如果System.Foo.dll已经设置了组件元数据属性服务("真"),则在该汇编件的加载期间,将创建以下形式或功能上类似的形式的面包屑
C:\ProgramData\Microsoft\NetFramework\System.Foo,version1.0.0.0,cultureneutral,abbcdacc123.txt。
本领域技术人员将理解,此处示出的公式仅是非限制性示例。而且,在一些实施例中,没有汇编件身份的所有部分(例如,没有版本号)的面包屑被额外地创建,以允许对汇编件名称的更模糊匹配。在一些实施例中,该面包屑可被存储在注册表中,或在某个其他位置中。
在一些实施例中,如果System.Foo.dll具有在已知注册表中的条目hive,则在该汇编件的加载期间,将创建以下形式或功能上类似的形式的面包屑
HKLM\Software\Microsoft\NetFramework\System.Foo,version1.0.0.0,cultureneutral,abbcdacc123.txt。
在一些实施例中,如果System.Foo.dll对Microsoft.Servicing.dll具有依赖关系,则在该汇编件的加载期间,Microsoft.Servicing由于被编码到Microsoft.Servicing和System.Foo中的行为而被调用,且将创建以下形式或功能上类似的形式的面包屑
C:\ProgramData\Microsoft\NetFramework\System.Foo,version1.0.0.0,cultureneutral,abbcdacc123.txt。
这些方法均不依赖由在应用中使用System.Foo.dll的应用开发者所采用的任何特殊步骤。它们是可被用来解决确定应用本地库何时驻留于客户端机器上的技术问题的方式的示例。所示面包屑格式仅是示例;在其他实施例中可使用其他格式。
现在考虑阻止脆弱代码运行的技术问题,其在此处转换成阻止脆弱代码加载的技术问题。一些实施例在库首次加载时通过分析库元数据来确定该库处于带外库中。
在存在已知库元数据块时,在运行时中触发将汇编件身份信息写到机器范围位置中的逻辑。一些实施例在首次加载库汇编件时通过将该汇编件身份包括在已知数据存储中来确定该库是带外库。这允许汇编件可追溯地被选中以进行服务。在数据存储中存在汇编件身份时,在运行时中触发用于将汇编件身份信息写到机器范围位置的逻辑。
可关于选中以服务作出若干观察。在一些实施例中,为了使框架库可服务,其符合某些策略。为了支持标识新带外库,要被服务的所有框架库声明汇编件等级属性AssemblyServicable(“真”),公共语言运行时(CLR)加载器检查该属性。一种替代选项使用在汇编件头部中设置标志的伪定制属性。另一选项是使用AssemblyMetadata属性并将元数据添加到该汇编件中以选中以服务;问题的关键可以是“服务”且该值可以为真或假。然而,如果所使用的方式不是强类型的,则没有设计时实施或错误检查。另一选项是基于加载位置是否来自非GAC位置且要加载的该汇编件中的身份具有匹配框架汇编件的身份的公钥来自动标识带外库。此选项的优点在于其不对开发者施加限制,而是库应当用一框架密钥来签名。
现在将注意力转移到标识先前发布的带外库的技术问题。对于已经发布的不带此属性230的带外库,一些实施例创建选中列表234,其将被安装到注册表或文件系统中。此列表将包含已经被对待或以其他方式被表征为带外且希望能够服务的所有库。可使该列表安全(例如使用访问控制列表或其他机制)以便只有管理员能改变该列表。用于此列表的注册表键可被定位在例如
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NETFrameworkSetup\NDP\Servicing\<AssemblyIdentity>作为值,如果对其进行观察,则绑定器或加载器应当为其写入面包屑。
关于选中以可服务的应用,在使用带外库时,在一些实施例中,如果该应用选中到隐式覆盖绑定模型中,则该应用被自动选中到经增强的加载器222服务模型中。此方式不允许应用作出关于其是否应当被服务的决定。进行服务更新的选项留给机器的管理员,以经由熟悉的更新服务机制来下载或不下载可能被影响的所有应用的补丁。
关于选中以服务的影响,CLR绑定器在汇编件上看此属性230或在服务列表234上看汇编件名称的一个影响是向经增强的加载器222指示其正加载选中以服务的带外汇编件。为了对此进行注释,CLR绑定器应当将目录条目形式的面包屑写入到一位置中,诸如举例而言C:\ProgramData\Microsoft\CLR\<AssemblyName>_<PublicKeyToken>_<Major>_<Minor>_<Buid>_<Revision>\<UserNameHash>\BC.txt或C:\ProgramData\Microsoft\NetFramework\<AssemblyName>_<PublicKeyToken>_<Major>_<Minor>_<Buid>_<Revision>\<UserNameHash>\BC.txt,,这仅是为了给出许多可能的示例中的两个示例。
对于注册表,该结构看上去是这样:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NETFrameworkSetup\NDP\OOBServicing\<AssemblyName>_<PublicKeyToken>_<Major>_<Minor>_<Buid>_<Revision>
该目录条目的在<UserNameHash>\BC.txt之前的部分或寄存器条目键的在OOBServicing之后的部分的存在将向更新服务检测逻辑指示此汇编件的特定版本的确被加载。BC.txt的内容将包含从其加载该DLL的位置。
在一些实施例中,关于用于目录和/或注册表的ACL,创建该目录的用户账户将不能检测它;仅管理员可删除该面包屑。一个用户不能查看另一用户的面包屑信息。用户不能删除其自己的面包屑。如果担心隐私,则一实现可使用UserNameHash(用户名散列)而不是UserName(用户名)来编码该路径。在该面包屑例如由于磁盘空间问题或ACL问题而未被写入的情况下,绑定器继续加载该汇编件且不造成绑定失败,且可相应地作出诊断日志条目。
标识带外库的一些实施例进行以下动作。
在首次加载时,通过包括特定服务库232来确定该库为带外库。当此服务库被加载时,其写入关于将其包括到机器范围位置的汇编件的汇编件身份信息。在一些实施例中,此方式涉及构建需要被服务的任何其他框架库对其依赖的服务库。该机制使用初始化器,即,在汇编件加载时总是被调用的方法,来调用写入该面包屑的包。此机制使得带外库的标识成为库开发者的隐式动作并因此可为该目的取代属性230的使用。然而,此方式的问题在于其没有为服务库留下要服务的机制,这使其对于某些框架而言成为更高风险的特征,包括熟悉的.NETTM框架(微软公司的商标)。尽管如此,其可以是想要在存在某种更新服务分发机制时构建此功能性的第三方汇编件的可行选项。
一些实施例阻止脆弱库首次加载。在首次加载时,该运行时检查数据存储以寻找已知脆弱库的列表224。如果正被加载的库匹配脆弱库的身份,则使该加载失败504,在运行时中触发用于将汇编件身份信息写到机器范围位置的逻辑,且具有用于解决此问题的链接的错误消息被记录以供用户采取动作。具体而言,在一些实施例中,在加载器222加载所标识的带外库之前,加载器在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NETFrameworkSetup\NDP\OOBBlocklist\<AssemblyIdentityValue>hive中检查匹配正被加载的汇编件身份的值。如果找到匹配,则加载器222无法加载该汇编件(例如,使用熟悉的killbit机制)并使用相应的数据来抛出FileLoadException(文件加载异常)。该数据指向所建议的补丁的网站地址或其他统一资源定位符,其可被并入该异常消息中。所抛出的异常可以是SecurityException(安全异常),其已经是由Assembly.Load()抛出异常之一,元数据被加入其中。一些实施例抛出FileLoadException,其具有内部SecurityException。
对于在其首次运行时从而被加载的库,一些实施例具有内建于绑定器的特征,该特征将知道服务事件已经发生且将无法加载该汇编件。在此失败时,其会把面包屑写到已知位置并指向运行更新机制的地点,随后该更新机制将按照与基于面包屑的方式相同的方式运行并更新该库。
在一些实施例中,汇编件身份看上去像是:
System.Composition.AttributedModel,Version=1.0.16.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a.
在其他实施例中,可以是全局唯一标识符(GUID)的汇编件身份或者仅是例如汇编件的文件名或文件名和文件版本的组合。汇编件身份是一种唯一标识汇编件的给定版本的方式。
结语
虽然具体实施例在此处被明确示出并描述为进程、已配置的介质、或系统,但是可以理解,对一种类型的实施例的讨论也一般性地延伸到其他实施例类型。例如,结合图3到5的过程描述还帮助描述配置的介质,并帮助描述如结合其他附图讨论的那些技术效果效以及系统和制品等技术效果以及系统和制品的操作。对一个实施例的限制也不一定适用于另一个实施例。具体而言,进程不一定仅限于在讨论诸如已配置的存储器之类的系统或产品时呈现的数据结构和方案。
本文对具有某一特征X的实施例的引用以及本文别处对具有某一特征Y的实施例的应用不从具有特征X和特征Y两者的本公开的实施例中排除,除非这一排除在此被明确指明。术语“实施例”在此仅仅被用作“过程、系统、制品、经配置的计算机可读介质和/或此处如以与适用法律一致的方式应用的教导的其它示例”的更方便的形式。因此,给定“实施例”在该实施例与至少一个权利要求一致的情况下可包括此处所公开的特征的任何组合。
不是图中所示出的每一项都需要存在于每个实施例中。相反,实施例可以包含图中未显式地示出的项。虽然一些可能性在此处通过具体示例在文本和附图中示出,但是各实施例可以偏离这些示例。例如,一示例的具体技术效果或技术特征可以被省略、重命名、以不同的方式分组、重复、不同地以硬件和/或软件实例化,或是在两个或更多示例中出现的效果或特征的混合。在一些实施例中,在一个位置示出的功能也可以在不同位置提供;技术人员认识到在给定实现中功能模块能够以各种方式定义,而不必从作为一个整体来看的交互模块的集合中省略所需技术效果
通过附图标记参考了附图。在附图或文本中与给定附图标记相关联的措词中的任何显而易见的不一致性应该被理解为仅仅时拓宽该标记所引用的内容的范围。即使使用相同的附图标记,给定附图标记的不同实例也可以指不同的实施例。
如此处所使用的,诸如“一”和“该”等术语包括了所指示的项目或步骤中的一个或多个。具体而言,在权利要求书中,对一个项的引用一般表示至少一个这样的项存在,并且对一个步骤的引用表示执行该步骤的至少一个实例。
标题仅是为了方便;关于给定话题的信息可在其标题指示该话题的章节之外被寻找到。
所提交的所有权利要求和摘要是说明书的一部分。
尽管在附图中示出并在上文中描述了示例性实施例,但本领域普通技术人员将明白,可作出多种修改而不脱离权利要求书中阐明的原理和概念,且这些修改不需要涵盖整个抽象概念。尽管用结构特征和/或过程动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于权利要求书上面所描述的具体特征或动作。不一定在给定定义或示例中标识的每一个手段或方面或技术效果都在每个实施例中存在或使用。相反,所描述的具体特征和动作以及效果是作为供当实现权利要求书时考虑的示例来公开的。
无法包围整个抽象概念但落入权利要求的等效技术方案的意义和范围内的所有改变都在法律所准许的最大程度内被包含在其范围内。

Claims (10)

1.一种计算机系统,包括:
至少一个处理器;
与所述处理器操作地通信的存储器;以及
驻留于所述存储器中并具有隐式覆盖代码的绑定器,所述绑定器被配置成与所述处理器和存储器交互以确定所请求的汇编件的哪个版本将被标识给加载器以加载以支持应用的执行;
所述隐式覆盖代码包括用于搜索至少一个因汇编件而异的位置中的隐式版本的代码、所述隐式覆盖代码还包括用于在找到所述隐式版本之后将所述隐式版本与一其他版本进行比较的代码、所述隐式覆盖代码还包括用于在所述隐式版本大于所述其他版本时用所述隐式版本有条件地覆盖所述其他版本的代码。
2.如权利要求1所述的系统,其特征在于,所述绑定器还包括被配置成检查或绑定重定向命令的绑定重定向代码,所述绑定重定向代码包括用于响应于绑定重定向命令而覆盖所述隐式版本的代码,并且其中所述绑定器被配置成在调用所述隐式覆盖代码之后调用所述绑定重定向代码。
3.如权利要求1所述的系统,其特征在于,所述系统进一步包括先前已在所述系统上加载至少一次的汇编件,并且其中带外元数据的集合驻留于所述存储器中,所述带外元数据集合包括用于先前加载的汇编件的条目,且所述系统存储器还包括以下的至少一项:(a)被配置成响应于在所述汇编件先前被加载时所述汇编件至少部分匹配已知带外汇编件的列表而将所述条目放置在所述集合中的带外汇编件代码,(b)所述先前加载的汇编件的带外服务属性。
4.一种配置有数据和指令的计算机可读存储器介质,所述指令在由至少一个处理器执行时使所述处理器执行一种用于确定所请求的汇编件的哪个版本将被向加载器标识以加载以支持应用的执行的技术过程,所述过程包括以下计算步骤:
在因汇编件而异的位置中寻找隐式版本;
在找到所述隐式版本之后,将所述隐式版本与一其他版本进行比较;以及
当所述隐式版本大于所述其他版本时用所述隐式版本覆盖所述其他版本。
5.如权利要求4所述的经配置的存储介质,其特征在于,所述过程进一步包括执行所请求的汇编件的框架统一,且所述框架统一产生要与所述隐式版本进行比较的所述其他版本。
6.如权利要求4所述的经配置的存储介质,其特征在于,所述过程在计算机系统上进行,且所述过程进一步包括以下各项中的至少一者:
(a)将所述汇编件至少部分匹配到已知带外汇编件的列表,并且作为响应将针对所述汇编件的条目放置到所述计算机系统上的元数据集合中;
(b)在所述汇编件中定位带外服务属性,并且作为响应将针对所述汇编件的条目放置到所述计算机系统上的元数据集合中;
(c)向所述计算机系统应用服务包,并且作为应用所述服务包的一部分将针对所述汇编件的条目放置到所述计算机系统上的元数据集合中。
7.如权利要求4所述的经配置的存储介质,其特征在于,所述过程进一步包括确定所述汇编件对于安全漏洞是脆弱的且作为对所述确定的响应使加载所述汇编件失败。
8.如权利要求4所述的经配置的存储介质,其特征在于,所述寻找步骤在以下因汇编件而异的位置中的至少一个位置中寻找所述隐式版本:
与所述汇编件具有共同的名称且位于所述应用的目录中的文件;
由搜索约定指定的所述应用的子目录;
在目录路径的列表中指定的位置,所述列表位于所述应用的目录中;
在文件名的列表中指定的位置,所述列表位于所述应用的目录中;
9.如权利要求4所述的经配置的存储介质,其特征在于,所述过程包括执行所请求的汇编件的绑定重定向,且其中所述过程的特征进一步在于以下方式中的至少一个:
所述隐式版本不引述显式范围,且所述绑定重定向引述:如果当前选择的版本在范围X-Y中,则转而使用版本Z;
所述隐式版本在所述应用的配置文件之外被找到,并且所述绑定重定向在所述配置文件内被指定;
所述隐式版本由所述汇编件隐式地指定而无需XML声明,且所述绑定重定向由XML声明指定。
10.如权利要求4所述的经配置的存储介质,其特征在于,所述汇编件属于汇编件的框架,所述过程包括执行所请求的汇编件的框架统一,且所述过程的特征进一步在于所述隐式版本随着个体汇编件被更新,而所述统一版本随着汇编件的框架被更新。
CN201480026245.XA 2013-05-08 2014-05-07 应用内的带外框架库 Active CN105247483B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/889,469 US9009693B2 (en) 2013-05-08 2013-05-08 Out-of-band framework libraries within applications
US13/889,469 2013-05-08
PCT/US2014/037042 WO2014182752A1 (en) 2013-05-08 2014-05-07 Out-of-band framework libraries within applications

Publications (2)

Publication Number Publication Date
CN105247483A true CN105247483A (zh) 2016-01-13
CN105247483B CN105247483B (zh) 2018-11-06

Family

ID=50942848

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480026245.XA Active CN105247483B (zh) 2013-05-08 2014-05-07 应用内的带外框架库

Country Status (5)

Country Link
US (1) US9009693B2 (zh)
EP (1) EP2994829A1 (zh)
KR (1) KR102163501B1 (zh)
CN (1) CN105247483B (zh)
WO (1) WO2014182752A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112639782A (zh) * 2018-08-29 2021-04-09 微软技术许可有限责任公司 隐私保护部件隐患检测和处置

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9594545B2 (en) 2013-06-05 2017-03-14 Splunk Inc. System for displaying notification dependencies between component instances
US10061626B2 (en) 2013-06-05 2018-08-28 Splunk Inc. Application framework providing a registry for mapping names to component instances
US8756614B2 (en) 2013-06-05 2014-06-17 Splunk Inc. Central registry for binding features using dynamic pointers
US9686581B2 (en) 2013-11-07 2017-06-20 Cisco Technology, Inc. Second-screen TV bridge
US10222935B2 (en) 2014-04-23 2019-03-05 Cisco Technology Inc. Treemap-type user interface
KR101810536B1 (ko) * 2014-05-15 2017-12-20 에스케이테크엑스 주식회사 라이브러리 업데이트 방법, 이를 위한 단말 및 시스템
US9967906B2 (en) 2015-01-07 2018-05-08 Cisco Technology, Inc. Wireless roaming using a distributed store
US9536080B2 (en) 2015-05-29 2017-01-03 Apple Inc. Method for validating dynamically loaded libraries using team identifiers
US9985837B2 (en) * 2015-07-23 2018-05-29 Cisco Technology, Inc. Refresh of the binding tables between data-link-layer and network-layer addresses on mobility in a data center environment
US9904536B1 (en) 2015-09-18 2018-02-27 Quest Software Inc. Systems and methods for administering web widgets
US9843651B1 (en) * 2015-12-21 2017-12-12 Dell Software Inc. Systems and methods of localizing distributed software applications
US10326204B2 (en) 2016-09-07 2019-06-18 Cisco Technology, Inc. Switchable, oscillating near-field and far-field antenna
US10372520B2 (en) 2016-11-22 2019-08-06 Cisco Technology, Inc. Graphical user interface for visualizing a plurality of issues with an infrastructure
US10739943B2 (en) 2016-12-13 2020-08-11 Cisco Technology, Inc. Ordered list user interface
US10440723B2 (en) 2017-05-17 2019-10-08 Cisco Technology, Inc. Hierarchical channel assignment in wireless networks
US10555341B2 (en) 2017-07-11 2020-02-04 Cisco Technology, Inc. Wireless contention reduction
US10440031B2 (en) 2017-07-21 2019-10-08 Cisco Technology, Inc. Wireless network steering
US10735981B2 (en) 2017-10-10 2020-08-04 Cisco Technology, Inc. System and method for providing a layer 2 fast re-switch for a wireless controller
US10375667B2 (en) 2017-12-07 2019-08-06 Cisco Technology, Inc. Enhancing indoor positioning using RF multilateration and optical sensing
US10862867B2 (en) 2018-04-01 2020-12-08 Cisco Technology, Inc. Intelligent graphical user interface
US10673618B2 (en) 2018-06-08 2020-06-02 Cisco Technology, Inc. Provisioning network resources in a wireless network using a native blockchain platform
US10505718B1 (en) 2018-06-08 2019-12-10 Cisco Technology, Inc. Systems, devices, and techniques for registering user equipment (UE) in wireless networks using a native blockchain platform
US10873636B2 (en) 2018-07-09 2020-12-22 Cisco Technology, Inc. Session management in a forwarding plane
US10671462B2 (en) 2018-07-24 2020-06-02 Cisco Technology, Inc. System and method for message management across a network
US11252040B2 (en) 2018-07-31 2022-02-15 Cisco Technology, Inc. Advanced network tracing in the data plane
US10284429B1 (en) 2018-08-08 2019-05-07 Cisco Technology, Inc. System and method for sharing subscriber resources in a network environment
US10623949B2 (en) 2018-08-08 2020-04-14 Cisco Technology, Inc. Network-initiated recovery from a text message delivery failure
US10735209B2 (en) 2018-08-08 2020-08-04 Cisco Technology, Inc. Bitrate utilization feedback and control in 5G-NSA networks
US10949557B2 (en) 2018-08-20 2021-03-16 Cisco Technology, Inc. Blockchain-based auditing, instantiation and maintenance of 5G network slices
US10374749B1 (en) 2018-08-22 2019-08-06 Cisco Technology, Inc. Proactive interference avoidance for access points
US10567293B1 (en) 2018-08-23 2020-02-18 Cisco Technology, Inc. Mechanism to coordinate end to end quality of service between network nodes and service provider core
US10230605B1 (en) 2018-09-04 2019-03-12 Cisco Technology, Inc. Scalable distributed end-to-end performance delay measurement for segment routing policies
US10652152B2 (en) 2018-09-04 2020-05-12 Cisco Technology, Inc. Mobile core dynamic tunnel end-point processing
US10779188B2 (en) 2018-09-06 2020-09-15 Cisco Technology, Inc. Uplink bandwidth estimation over broadband cellular networks
US11558288B2 (en) 2018-09-21 2023-01-17 Cisco Technology, Inc. Scalable and programmable mechanism for targeted in-situ OAM implementation in segment routing networks
US10285155B1 (en) 2018-09-24 2019-05-07 Cisco Technology, Inc. Providing user equipment location information indication on user plane
US10601724B1 (en) 2018-11-01 2020-03-24 Cisco Technology, Inc. Scalable network slice based queuing using segment routing flexible algorithm
US11218427B1 (en) 2020-10-24 2022-01-04 Zscaler, Inc. Detecting lagging nodes in a time-synchronized distributed environment
US20230036739A1 (en) * 2021-07-28 2023-02-02 Red Hat, Inc. Secure container image builds

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050166196A1 (en) * 2000-04-24 2005-07-28 Microsoft Corporation Configuration for binding software assemblies to application programs
US20070180442A1 (en) * 2006-02-01 2007-08-02 Hirokazu Oi Execution apparatus and method

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2781582B1 (fr) * 1998-07-21 2001-01-12 Technical Maintenance Corp Systeme de telechargement d'objets ou de fichiers pour mise a jour de logiciels
US6550060B1 (en) * 1999-04-08 2003-04-15 Novadigm, Inc. Method and system for dynamic injection of dynamic link libraries into a windowed operating system
US6629111B1 (en) * 1999-10-13 2003-09-30 Cisco Technology, Inc. Memory allocation system
US7757225B2 (en) * 2001-06-29 2010-07-13 Microsoft Corporation Linktime recognition of alternative implementations of programmed functionality
US20060026584A1 (en) * 2004-07-27 2006-02-02 Muratori Richard D Explicit linking of dynamic link libraries
JP2008516324A (ja) * 2004-10-12 2008-05-15 ピクセル(リサーチ)リミテッド ランタイム動的リンキング
US7565686B1 (en) * 2004-11-08 2009-07-21 Symantec Corporation Preventing unauthorized loading of late binding code into a process
US7814471B2 (en) * 2004-12-16 2010-10-12 Microsoft Corporation Method and apparatus for providing DLL compatibility
US8065689B2 (en) * 2005-02-03 2011-11-22 Kyocera Mita Corporation Release-dependant filenames for device drivers
US8037453B1 (en) 2006-09-13 2011-10-11 Urbancode, Inc. System and method for continuous software configuration, test and build management
US8250558B2 (en) * 2006-11-30 2012-08-21 Microsoft Corporation Dynamic linked library add-on features
US8793676B2 (en) * 2007-02-15 2014-07-29 Microsoft Corporation Version-resilient loader for custom code runtimes
US8291401B2 (en) * 2008-08-07 2012-10-16 International Business Machines Corporation Processing symbols associated with shared assemblies
US20110239195A1 (en) 2010-03-25 2011-09-29 Microsoft Corporation Dependence-based software builds
US8381176B1 (en) 2010-06-08 2013-02-19 Bentley Systems, Incorporated Software build orchestration framework
US8595715B2 (en) * 2010-12-31 2013-11-26 International Business Machines Corporation Dynamic software version selection
US8863092B2 (en) 2011-02-10 2014-10-14 Microsoft Corporation Mechanism for compatibility and preserving framework refactoring
US9098317B2 (en) 2011-03-16 2015-08-04 Microsoft Technology Licensing Llc Optional retargeting of library references
US20120272204A1 (en) 2011-04-21 2012-10-25 Microsoft Corporation Uninterruptible upgrade for a build service engine
US8892954B1 (en) * 2011-12-29 2014-11-18 Google Inc. Managing groups of application versions
US8972969B2 (en) * 2012-06-08 2015-03-03 Adobe Systems Incorporated Out of band services updates

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050166196A1 (en) * 2000-04-24 2005-07-28 Microsoft Corporation Configuration for binding software assemblies to application programs
US20070180442A1 (en) * 2006-02-01 2007-08-02 Hirokazu Oi Execution apparatus and method

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112639782A (zh) * 2018-08-29 2021-04-09 微软技术许可有限责任公司 隐私保护部件隐患检测和处置

Also Published As

Publication number Publication date
US20140337824A1 (en) 2014-11-13
US9009693B2 (en) 2015-04-14
CN105247483B (zh) 2018-11-06
WO2014182752A1 (en) 2014-11-13
KR20160002888A (ko) 2016-01-08
EP2994829A1 (en) 2016-03-16
KR102163501B1 (ko) 2020-10-08

Similar Documents

Publication Publication Date Title
CN105247483A (zh) 应用内的带外框架库
US11573776B1 (en) Extensible data transformation authoring and validation system
US10152309B2 (en) Cross-library framework architecture feature sets
CN105723341B (zh) 用于布局引擎和脚本引擎的存储器模型的实现方法及系统
CN102402451B (zh) 用户定义类型的编译时边界检查
CN102902529A (zh) 变换的上下文知晓数据源管理
CN105830025A (zh) 动态类型化的编程语言中的属性访问
CN106133684A (zh) 支持静态编译程序中的动态行为
Nagel et al. Professional C# 2012 and. Net 4.5
US9442719B2 (en) Regression alerts
Wittek et al. Digital preservation in grids and clouds: a middleware approach
US9075679B1 (en) Creating a prerequisite checklist corresponding to a software application
Sur Visual Studio 2012 and. NET 4.5 Expert Development Cookbook
US20140129934A1 (en) Dynamic model-based management tooling
US20140129532A1 (en) Packaging, storing and distributing guidance packages
EP4170484A1 (en) Flexible provision of multi-application content
Duldulao et al. Spring Boot and Angular: Hands-on full stack web development with Java, Spring, and Angular
Murn Crucial Software‐related Terms to Understand
Manjunath Swamy A hybrid approach for extractive document summarization
Jackson et al. Watch Face Configuration Companion Activity: Google Mobile Services
García Ortega SimpleOpenCL: desenvolupament i documentació d'una llibreria que facilita la programació paral· lela en OpenCL
Damevski Tool Support for Efficient Programming of Graphics Processing Units

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