CN104380250B - 一种动态创建可附加和可拆除二进制文件的系统和方法 - Google Patents
一种动态创建可附加和可拆除二进制文件的系统和方法 Download PDFInfo
- Publication number
- CN104380250B CN104380250B CN201480001541.4A CN201480001541A CN104380250B CN 104380250 B CN104380250 B CN 104380250B CN 201480001541 A CN201480001541 A CN 201480001541A CN 104380250 B CN104380250 B CN 104380250B
- Authority
- CN
- China
- Prior art keywords
- code
- dfm
- labels
- feature
- program source
- 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
Landscapes
- Stored Programmes (AREA)
Abstract
公开的是一种动态创建可附加和可拆除二进制文件的技术。本发明提供了一种管理关于附加代码的现有代码基库有效机制,该附加代码为用作单一代码基库的特定特征所需。同时也为设计者提供了一种机制,甚至可在代码概念化之前规划此类特征。系统解析具有DFM标签的代码,以生成基础代码,其中,所述DFM标签隔离特征。基于DFM标签创建多个代码集合。生成特征变化表,并将其存入该系统中,所述特征变化表存储相对于所述代码集合中的特征发生变化的特征的信息。接着编译代码集合以生成二进制文件。通过特征变化表,确定并存储每个所述二进制文件之间的差异,以用来创建一个或多个微分二进制文件。
Description
技术领域
本申请总体涉及一种创建二进制文件的系统和方法,尤其涉及一种动态创建可附加和可拆除二进制文件的系统和方法。
背景技术
传统上,软件开发的过程具有非常严谨的生命周期。该过程的步骤,即固定顺序为编写代码、编译、调试并解决问题以及发布和部署。软件二进制或二进制文件一经使用,如不重新启动,则向运行中的二进制文件添加或从其中移除特征变得极其困难。即使重新启动,如果软件状态不得不恢复至初始状态,那么开销将非常庞大。
已经有一些方案可解决这一局限,但是每个方案均有各自的缺陷。例如,开发的软件可能具有模块,这些模块存储了日志级别信息、调试信息等,旨在基于如何编译或配置提供不同的功能。通过一些标志或配置值,可以在运行时间控制这些模块/文件的运行状态,但是必须使用整个二进制文件来创建软件代码。共享库或动态加载库也可用于管理此类特征,但是与库连接并管理库的代码应在最初编写的代码中。
现有技术提供了各种方案,可以在编写期间使用预处理宏配置调试和日志级别管理;或者在运行时间配置调试和日志级别管理只要预处理宏属于初始设计和代码的一部分。所述模块也可当做可动态加载的库,但是同样地,设计和编码这些模块必须在一开始完成,同时加载以及与正确库连接的附加代码必须在初始二进制文件中。另外,传统意义上这些应用设计具有各种日志级别、踪迹打印以及维护日志选项。上述选项应属于应用代码的一部分,因此编译的目 标代码应属于二进制文件或库的一部分。可以使用实时补丁应用添加附加代码,但是这些补丁需分别管理初始代码和新增代码,在理想情况下作为补丁或不同文件。进一步地,该补丁技术仅对缺陷修正或小升级适用。
管理这些模块或特征的另一方案具有稍微不同的功能,即在编译期间使用预处理宏。使用预处理宏将会清除由此产生的二进制文件中的备选流代码,随后将无法恢复,除非再次编译二进制文件。同样,通过在运行时间使用一些配置值,可以使能或去使能特征逻辑,但是只有通过选择备用码流或路径才实现,并且只有特征逻辑是初始设计、代码、以及随后的编译的目标代码的一部分,才可完成。
同样地,在一个方案中,这些模块也可当做可动态加载的库,关于库的软件设计同样应该在一开始完成,且与库连接的配套代码必须在软件中。
除上述提及的局限,现有技术的方案还具有各种其他制约因素。下面列举了其中一些因素:
1.使用附加特征或者使用发布的二进制文件每次部署时可能不使用的特征不支持单流开发。
2.如果单流代码开发可以使用实时补丁,需要分别维护和跟踪补丁或不同的文件。单个源码库在这类情况中不能被很好地支持。
3.因为上述局限和约束因素,降低了开发质量和效率。
4.此外,若有更大的应用规模,则维护需求非常高,且应用的规模使得对二进制文件作出较大变化变得困难。
尽管避免上述提及的局限和约束因素的技术日益发展,仍需要提供有效的技术方案,以克服上述的局限和约束因素。因此,亟需但仍未提供的一种技术 是动态创建可附加和可拆除微分二进制文件。通过减少现有二进制文件中任何特征的升级时间和成本,该技术提供了一种有效的解决方案。
发明内容
本发明内容介绍的概念涉及一种创建可执行二进制文件的系统和方法,为现有的二进制文件减少了开销,缩短升级时间,下面进一步具体描述所述概念。本发明内容不旨在确定所要求保护的本申请的必要特征,也不旨在确定或限定所要求保护的本申请的范围。
通过提供一种动态创建可附加和可拆除微分二进制文件的优化方法和系统,上述问题得以解决,并实现了一种技术方案。本发明通过提供一种有效的解决方案,减少了现有以及当前执行的二进制文件中现有或者需要新添加的任意特征的升级时间和成本。
因此,本发明的一个主要目的是提供一种动态创建可附加和可拆除微分二进制文件的系统和方法,为现有以及当前执行的二进制文件中的任意特征,或现有以及当前执行的二进制文件中添加的新特征,减少了开销,并缩短了升级时间,降低了成本。
本发明的另一目的是支持单流开发、基础特征以及附加特征,可在同一代码基库中进行隔离。
本发明的另一目的是无需维护补丁或微分代码文件等更新信息,同时实现在同一代码基库上的连续开发。
本发明的再一目的在于,通过本发明提出的减少现有以及当前执行的二进制文件中现有或者新添加的任意特征的升级时间和成本,从而提高软件开发的质量和效率。
本发明的又一目的在于,只有必要和要求的二进制代码段即优化占用空间,可以在目标运行时间环境中使用。只有当需要用做微分二进制文件时,附加特征才可被引进。
因此,在本发明的一个实施例中,公开了一种计算机系统,具有非临时性计算机可读介质,该计算机可读介质上包括已编码的计算机程序逻辑,当在所述系统上执行时提供一种创建并管理至少一个可执行微分二进制文件220的机制。所述系统进行解析至少一个具有至少一个动态特征管理器(DFM)标签的计算机程序源代码的操作。所述系统进行基于DFM标签创建多个代码集合的操作。所述代码集合包括:具有基础代码的第一代码集合,所述基础代码为无任何DFM标签的至少一个计算机程序源代码,以及具有所述基础代码和特征的至少一个第二代码集合,所述特征为码集。所述系统接着进行生成多个特征变化表216的操作,所述特征变化表216存储相对于所述代码集合中的特征发生变化的特征的信息。所述系统还进行清除所述计算机程序源代码中的所述DFM标签的操作,以生成所述基础代码,所述DFM标签用于表示所述特征与所述至少一个计算机程序源代码隔离。所述系统接着进行编译所述代码集合的操作,以生成多个二进制文件。通过所述特征变化表216,所述系统接着进行确定所述多个二进制文件中任意两个二进制文件之间的差异的操作,从而存储所述确定的差异。基于所述存储的差异,所述系统最后进行创建一个或多个微分二进制文件220的操作。在一种实现中,可以基于源代码中创建的多个特征变化表,确定所述多个二进制文件中任意两个二进制文件之间的差异,同时,可以只为在差异表中具有条目的部分确定该差异,所述差异表由DFM在解析代码时创建,从而优化并且避免了完全的二进制文件差异。
在本发明的另一实施例中,公开了一种创建并管理至少一个可执行的微分二进制文件220的过程。所述过程包括下列步骤:自动解析至少一个具有至少一个动态特征管理器(DFM)标签的计算机程序源代码;基于DFM标签,创建多个代码集合,其中,所述代码集合包括:具有基础代码的第一代码集合,所 述基础代码为无任何DFM标签的所述至少一个计算机程序源代码,以及具有所述基础代码和特征的至少一个第二代码集合,所述特征为码集;生成多个特征变化表216,所述特征变化表216存储相对于所述代码集合中的特征发生变化的特征的信息;清除所述计算机程序源代码中的所述DFM标签,以生成所述基础代码,所述DFM标签用于表示所述特征与所述至少一个计算机程序源代码隔离;编译所述代码集合,以生成多个二进制文件;通过所述特征变化表216,确定所述多个二进制文件中任意两个二进制文件之间的差异,从而存储所述确定的差异;基于所述存储的差异,创建一个或多个微分二进制文件220。在一种实现中,可以基于源代码中创建的多个特征变化表,确定所述多个二进制文件中任意两个二进制文件之间的差异,同时,可以只为在差异表中具有条目的部分确定该差异,所述差异表由DFM在解析代码时创建,从而优化并且避免了完全的二进制文件差异。
在本发明的另一实施例中,公开了一种创建并管理至少一个可执行微分二进制文件220的计算机系统202。所述计算机系统202包括处理器204,和耦合至所述处理器204的存储器208。所述处理器204能够执行所述存储器中的多个模块和多个指令。所述系统202中的所述多个模块包括分离器模块210、编译器打包器模块212和加载器模块218。所述分离器模块210用于解析至少一个具有至少一个动态特征管理器(DFM)标签的计算机程序源代码。进一步地,所述分离器模块210基于DFM标签创建多个代码集合,其中,所述代码集合包括具有基础代码的第一代码集合,所述基础代码为无任何DFM标签的至少一个计算机程序源代码,以及具有所述基础代码和特征的至少一个第二代码集合,所述特征为码集。所述分离器模块210接着生成多个特征变化表216,所述特征变化表216存储相对于所述代码集合中的特征发生变化的特征的信息。进一步的,所述分离器模块210清除所述计算机程序源代码中的所述DFM标签,以生成基础代码,所述DFM标签用于表示所述特征与所述至少一个计算机程序源代码隔离。所述编译器打包器模块212用于编译所述代码集合,以生成多个二进制文件。所述存储器中的多个指令用于通过所述特征变化表216,确定所述多个二进制文件中任意两个二进制文件之间的差异,从而存储所述确定的差异。基于所述存储的差异,所述系统202接着创建一个或多个微分二进制文件220。在一种实现中,可以基于源代码中创建的多个特征变化表,确定所述多个二进制文件中任意两个二进制文件之间的差异,同时,可以只为在差异表中具有条目的部分确定该差异,所述差异表由DFM在解析代码时创建,从而优化并且避免了完全的二进制文件差异。
根据下面实施例的详细描述(结合附图阅读),上述以及其他的特点和优点是显而易见的。
附图说明
结合附图进行具体描述。在附图中,图例编号最左边的数字表示所述图例编号在该附图中首次出现。附图使用的相同编号代表类似的特征和部件。
相应的引用字符在不同的视图中表示相应的部分。此处范例以一种形式说明了本发明的优选实施例,并此类范例不应被理解为以任何方式限制本发明的范围。
图1示出了本申请一个实施例的计算机系统202以及所述计算机系统202创建并管理至少一个可执行微分二进制文件220的详细流程;
图2示出了本申请一个实施例的一种创建并管理至少一个可执行微分二进制文件220的方法;
图3示出了本申请一个实施例的一种动态特征管理器的功能;
图4示出了本申请一个实施例的二进制文件的编译、生成以及更新;
图5(a)示出了本申请一个实施例的标准ELF文件内容;
图5(b)示出了本申请一个实施例的典型微分二进制文件内容。
应理解的是,所述附图旨在说明本发明的一些概念,可能不会进行延伸。
具体实施方式
为使上述的目的、本发明的技术方案以及优点更容易理解,下面将结合附图来描述实施例。
结合所附权利要求和附图,在下面具体实施方式中,本领域的技术人员将更明确本发明的目的、优点和其他创新性。
现在,结合所述附图,详细描述本发明的优选实施例。在附图部分,即使出现在不同的附图中,相同或相似的要素使用相同的图例编号表示。在下面描述中,当本文已知功能和配置的详细描述使本申请模糊时,将会省略该详细描述。
公开的是一种创建并管理一个或多个微分二进制文件220的系统和方法。使用类似C/C++编程语言中常见的预处理宏和标记的编程或编码语言标签来创建可附加和可拆除的二进制文件。要求用作可附加模块的代码功能块可以设置在这些标签之间。建议除流行的编译器之外还使用至少一个打包器,所述编译器可以基于附加标志位理解所述标签和生成微分二进制文件(代替单一二进制文件)。应理解的是,所述编译器可以从现有和已知的编译器中选择使用,例如“gcc”编译器。
相应地,公开的是一种创建并管理一个或多个微分二进制文件220的系统和方法。编程或编码语言需要时,可以使用一个或多个可执行微分二进制文件220。现有技术中普遍应用的实时补丁或热补丁技术可以使用所述一个或多个微 分二进制文件220。进一步地,对于存储器运行时的现有或者更新的二进制文件,所述系统和方法可以使用应用中的实时补丁技术加载和/或卸载生成的一个或多个微分二进制文件220。
在一种实现中,公开了一种计算机系统,具有非临时性计算机可读介质,该计算机可读介质上包括已编码的计算机程序逻辑,当在所述系统上执行时提供一种创建并管理至少一个可执行的微分二进制文件220的机制。所述系统进行解析至少一个具有至少一个动态特征管理器(DFM)标签的计算机程序源代码的操作。基于DFM标签,所述系统进行基于DFM标签创建多个代码集合的操作。所述代码集合包括:具有基础代码的第一代码集合,所述基础代码为无任何DFM标签的至少一个计算机程序源代码,以及具有所述基础代码和特征的至少一个第二代码集合,所述特征为码集。所述系统接着进行生成多个特征变化表216的操作,所述特征变化表216存储相对于所述代码集合中的特征发生变化的特征的信息。所述系统还进行清除所述计算机程序源代码中的所述DFM标签的操作,以生成所述基础代码,所述DFM标签用于表示所述特征与所述至少一个计算机程序源代码隔离。所述系统接着进行编译所述代码集合的操作,以生成多个二进制文件。通过所述特征变化表216,所述系统接着进行确定所述多个二进制文件中任意两个二进制文件之间的差异的操作,从而存储所述确定的差异。基于所述存储的差异,所述系统最后进行创建一个或多个微分二进制文件220的操作。在一种实现中,可以基于源代码中创建的多个特征变化表,确定所述多个二进制文件中任意两个二进制文件之间的差异,同时,可以只为在差异表中具有条目的部分确定该差异,所述差异表由DFM在解析代码时创建,从而优化并且避免了完全的二进制文件差异。在一种实现中,应理解的是,因为所述代码集合为递增集合,所述二进制文件也同样具有递增特征,所以每个二进制文件之间的差异可以确定。
尽管下面描述了本发明的示例实施例,应理解的是,没有规定的细节要求本发明也可以实现,同时可以为此处描述的本发明决定许多具体实现方式,以 实现开发者的具体目标,例如,遵循系统相关的和业务相关的约束,该约束将随系统的变化而变化,且开发工作复杂且耗时。然而,对于本领域的技术人员,掌握本发明公开的利益是一项常规工作。例如,所选方面都以框图形式而非细节形式示出,以避免对本发明造成模糊或者不适当限制。本领域的技术人员利用这些描述和表达,向本领域的其他技术人员描述以及传达工作实质。以下将结合附图描述本发明。
尽管所述一种动态创建并管理至少一个可执行微分二进制文件220的系统和方法的各方面可以以任何数量的不同计算机系统、环境和/或配置实现,所述实施例以下面示例系统为例进行描述。
参见图2,示出了本申请一个实施例的计算机系统202以及所述计算机系统202创建并管理至少一个可执行微分二进制文件220的详细流程。在一种实施例中,所述计算机系统202可以包括至少一个处理器204、输入/输出(I/O)接口206和存储器208。所述至少一个处理器204可以通过一个或多个微处理器、微型计算机、微型控制器、数字信号处理器、中央处理器、状态机、逻辑电路和/或任意基于操作指令操控信号的设备来实现。在其他能力中,所述至少一个处理器204用于获取和执行所述存储器208中存储的计算机可读指令。
所述I/O接口206可以包括各种软件和硬件接口,例如,web接口、图形用户接口等。所述I/O接口206可以允许所述计算机系统202直接和用户交互或者通过客户端设备和用户进行交互。进一步地,所述I/O接口206可以使所述计算机系统202和其他计算设备进行通信,如web服务器和外部数据服务器(未示出)。所述I/O接口206能够促进各种网络和协议类型间的多种通信,包括如LAN、线缆等有线网络和WLAN、蜂窝或卫星等无线网络。所述I/O接口206可以包括一个或多个端口,用以将一些设备互相连接或连接至其他服务器。在一种实现中,所述计算机系统202为用户提供接口206,可以帮助标记和维护编程代码,以及提交该编程代码进行编译。该计算机系统202也可以包含一个编 辑器和图形实用程序,可供开发者使用,但与本发明的范围不相关。
所述存储器208可以包括本领域已知的任意计算机可读介质,例如,包括易失性存储器,如静态随机存取存储器(SRAM)和动态随机存取存储器(DRAM),和/或非易失性存储器,如只读存储器(ROM)、可擦除可编程ROM、闪存、硬盘、光盘和磁带。所述存储器208可以包括多个模块和多个指令。
所述多个模块包括程序、对象、组件和数据结构等,可完成特殊任务或者实现特殊抽象数据类型。在一种实现中,所述模块可以包括分离器模块210、编译器打包器模块212、加载器模块218和标准编译器219。所述存储器也可以包括补充所述计算机系统202应用程序和功能的程序或者编码指令。所述分离器模块210还可以包括解析器214和特征变化表216。进一步地,可执行的且微分的二进制文件220,以下简称可执行微分二进制文件220,在所述计算机系统202整个处理过程中生成,并且也可以存储在所述存储器208或者也可以存储在外部存储器中。
可以理解的是,所述多个模块可以生成数据,此外,所述生成的数据可以用作数据库,存储上述公开的一个或多个模块处理、接收和生成的数据。进一步地,由执行所述存储器中一个或多个程序或编码指令而生成的数据也可以进行存储。
在一种实现中,所述存储器208耦合至处理器204,该处理器执行所述存储器208中的多个模块和多个指令。所述分离器模块210可以用于解析至少一个具有至少一个动态特征管理器(DFM)标签的计算机程序源代码。所述分离器模块210还基于所述DFM标签创建多个代码集合。所述代码集合可以包括具有所述基础代码的第一代码集合,其中,所述基础代码为无任何DFM标签的所述至少一个计算机程序源代码。所述代码集合也可以包括具有所述基础代码和特征的至少一个第二代码集合,其中,所述特征为码集。在一种实现中,所述DFM 标签遵循DFM_<the feature name>_start和DFM_<the feature name>_end语法来隔离所述特征。可以在编写所述计算机程序源代码,或向所述计算机程序源代码添加新代码或更新代码的同时,增加所述DFM标签。DFM标签所隔离的特征是从一个包括函数、全局变量和结构、常见宏、内嵌函数、静态变量、以及上述所有的组合的群组中选出。所述DFM标签遵循规则,其中每个特征中相应的‘end’DFM标签与‘start’DFM标签相配。所述模块210清除所述计算机程序源代码中的所述DFM标签,以生成基础代码,所述DFM标签用于表示所述特征与所述至少一个计算机程序源代码隔离。
在一种实现中,所述分离器模块210还用于检查所述DFM标签的嵌套,并创建所述计算机程序源代码的层级树,其中,所述层级树包括设置在最高层级的DFM无关标签,以及作为所述层级树中的下层节点的子标签和/或兄弟标签。DFM标签以下简称标签。
所述分离器模块210接着生成多个特征变化表216,所述特征变化表216存储相对于所述代码集合中的特征发生变化的特征的信息。
在一种实现中,所述分离器模块210可以用于解析具有至少一个标签的计算机程序源代码,以通过至少一个解析器214,在所述计算机程序源代码中搜索至少一个使用的标签。所述解析器214可以存储在所述存储器208中,可以在需要解析至少一个计算机程序源代码时获取。应理解的是,所述计算机系统202中使用的解析器214为现有技术中已有的解析器。所述分离器模块210还用于检查所述至少一个标签的嵌套,并创建所述具有至少一个标签的计算机程序源代码的层级树。所述至少一个标签的嵌套可以用来建立至少一个特征的叠加。因此,所述标签的嵌套可以创建多个新的二进制文件。所述创建的层级树可以包括设置在最高层级的至少一个无关标签,以及作为所述层级树中的下层节点的至少一个子标签和/或兄弟标签。所述至少一个无关标签为不依赖其他任何标签或自身的标签,所述至少一个子标签和/或兄弟标签为依赖任何其他标签或自 身的标签。基于层级树的每个节点,可以创建至少一个新的二进制文件。所述分离器模块210生成的特征变化表216可以用于存储相对于所述代码集合中的特征发生变化的特征的信息。所述变化特征是从一个包括函数、全局变量和结构、常见宏、内嵌函数、静态变量、和/或上述所有的组合的群组中选出,所述变化的特征是相对于所述代码集合中的特征发生变化或新引入或更新的特征。
所述编译器打包器模块212可以用于编译所述代码集合,以生成多个二进制文件。所述存储器中的多个指令然后通过所述特征变化表216,确定所述多个二进制文件中任意两个二进制文件之间的差异,从而存储所述确定的差异。所述系统接着基于所述存储的差异,创建一个或多个微分二进制文件220。在一种实现中,可以基于源代码中创建的多个特征变化表,确定所述多个二进制文件中任意两个二进制文件之间的差异,同时,可以只为在差异表中具有条目的部分确定该差异,所述差异表由DFM在解析代码时创建,从而优化并且避免了完全的二进制文件差异。在一种实现中,应理解的是,因为所述代码集合为递增集合,所述二进制文件也同样具有递增特征,所以每个二进制文件之间的差异可以确定。
所述加载器模块218可以用于管理所述一个或多个微分二进制文件220,其中,通过在所述存储器208上动态加载或卸载所述一个或多个微分二进制文件220,以及将所述一个或多个微分二进制文件220映射到执行中的二进制文件,管理所述所述一个或多个微分二进制文件220。
在一个例子中,可以在编写所述计算机程序源代码,或向所述计算机程序源代码添加新代码或更新代码的同时,增加所述至少一个标签。所述至少一个标签的嵌套遵循规则,其中每个特征中相应的‘end’标签与‘start’标签相匹配。
所述存储器208也可以包括所述多个指令。在执行所述指令时,通过所述 特征变化表216,所述指令基于每个所述二进制文件之间的差异生成可执行微分二进制文件220。所述指令可以从创建的至少一个新二进制文件中提取特定内容,该二进制文件造成确定的差异,其中,所述特定内容包括与所述创建的至少一个新二进制文件的至少一个特征相关的文本和数据。所述特定内容可以包括与所述创建的至少一个新二进制文件的至少一个特征相关的源代码。可以编译所述提取的特定内容,以创建至少一个可执行微分二进制文件220。所述至少一个可执行微分二进制文件220可以在所述编译提取的特定内容中创建,该内容可以包括将所述编译提取的特定内容连接至所述创建的至少一个新二进制文件,或者连接至新的计算机程序源代码,该计算机程序源代码在加载所述至少一个可执行微分二进制文件220到其中后生成。在一种实现中,可以基于源代码中创建的多个特征变化表,确定所述多个二进制文件中任意两个二进制文件之间的差异,同时,可以只为在差异表中具有条目的部分确定该差异,所述差异表由DFM在解析代码时创建,从而优化并且避免了完全的二进制文件差异。在一种实现中,应理解的是,因为所述代码集合为递增集合,所述二进制文件也同样具有递增特征,所以每个二进制文件之间的差异可以确定。
具有动态特征管理器功能的计算机系统202也可以包括软件方面的必要支持,该软件可以用来执行所述至少一个计算机程序源代码和二进制文件,该二进制文件在加载所述至少一个可执行微分二进制文件220到其中后生成。
本领域的技术人员应当很好地理解,所述标准编译器219和所述编译器打包器模块212可以提供程序功能,将高级语言(HLL)代码转译成机器语言(MLL)代码。所述模块212和标准编译器219可以检查所提供的软件程序中存在的各种限制、范围和错误等。所述编译器可以通过整个程序运作,然后将整个程序转译成机器代码。如果编译器在一台计算机上运行,并为该计算机生成机器代码,那么这被称为自编译器或常驻编译器。另一方面,如果编译器在一台计算机上运行,并为其他计算机生成所述机器代码,那么这被称为交叉编译器。
同样,本领域的技术人员应当很好地理解,所述加载器模块218可以提供程序功能,将程序的机器语言(MLL)代码加载到系统存储器中。加载器可以是操作系统的一部分,负责加载程序。这是开启程序过程中的重要阶段之一,因为它将程序置入存储器中,并为执行做好准备。加载软件程序代码包括将可执行文件内容读入存储器中。一旦完成加载,所述操作系统可以由加载的程序代码控制开启程序。所有支持程序加载的操作系统都可以具有加载器。在许多操作系统中,加载器常驻在存储器中。
在一种实现中,可以通过DFM使用现有技术中的二进制文件热补丁,在运行时间管理所述微分二进制文件。本发明采用标准方法,将已变化函数开始的跳跃指令引入至加载函数变化文本的新位置。
加载和执行二进制文件可以遵循所述操作系统标准过程。然而,微分二进制文件需要特殊处理。所述加载器模块218可以作为标准加载器或独立加载器的扩充,可能需要将微分二进制文件的特定部分加载至存储器中,并将该部分映射至已在执行中的基础二进制文件的地址空间。所述加载器模块218也可以在存储器中维护注册表,以记录给出的实例中加载的特征。在最常见的实现中,所述加载器模块218的主要任务即定位变化函数的原始文本部分,并插入正确的‘jmp’指令,以跳跃至加载更新函数文本的新地址。这样,该函数所有以前的引用将会首先调用原始函数,然后被立即重定向至新函数文本。然而,堆栈上可能存在附加函数帧的开销。对于数据中的变化,需要在基础二进制文件数据段替换和添加所更新和添加的符号,在实现中同时需要处理初始化值和未初始化值。所替换数据符号的原始类型和范围将被存储入DFM注册表中,以供需要卸载特征时使用。
至于卸载,只需将所插入的跳跃指令从原始函数占用空间中移除,就可返回至先前的函数。实现数据段变化的恢复更复杂。例如,可以通过存储在DFM注册表中的对应类型和范围,将数据变化恢复至原始值。
参见图3,示出了本申请一个实施例的一种创建并管理至少一个可执行微分二进制文件220的方法/过程。可以在计算机可执行指令的一般背景下描述该方法。一般来讲,所述计算机可执行指令包括例程程序、程序、对象、组件、数据结构、规程、模块和函数等,可执行特殊函数或者实现特殊抽象数据类型。所述方法也可在分布式计算环境中实现,其中函数由通过通信网络连接的远程处理设备执行。在分布式计算环境中,所述计算机可执行指令可以位于包括存储器存储设备的本地和远程计算机存储介质中。
描述所述方法/过程的顺序不应理解为限制,并且任何数量的所述方法块都可以按任何顺序组合来实现本方法或替代方法。另外,在不脱离本申请描述的精神和范围下,单独的方法块可从本方法中删除。此外,本方法可以由任何合适的硬件、软件、固件或其组合实现。但是,为方便解释,下述实施例中本方法可认为是由上述计算机系统202实现。
方法块302,可以通过所述计算机系统202提供的接口206接收计算机程序源代码。通过分离器模块210,解析具有至少一个标签的至少一个计算机程序源代码。在解析过程中,在至少一个标签中搜索计算机程序源代码中使用的至少一个标签。进一步地,在计算机程序源代码中检查至少一个标签的嵌套,随后创建具有至少一个标签的计算机程序源代码的层级树。所述层级树可以包括可设置在最高层级的至少一个无关标签,以及可作为所述层级树中的下层节点的至少一个子标签和/或兄弟标签。所述至少一个无关标签为不依赖其他任何标签或自身的标签,所述至少一个子标签和/或兄弟标签为依赖任何其他标签或自身的标签。所述至少一个标签的嵌套遵循规则,其中每个特征的相应的‘end’标签与‘start’标签相匹配。
方法块304,生成基于DFM标签的多个代码集合。所述代码集合可以包括:具有基础代码的第一代码集合,所述基础代码为无任何DFM标签的所述至少一个计算机程序源代码,以及具有所述基础代码和特征的至少一个第二代码集合, 所述特征为码集。
方法块306,生成多个特征变化表216。所述特征变化表216存储相对于所述代码集合中的特征发生变化的特征的信息。所述特征是从一个包括函数、全局变量和结构、常见宏、内嵌函数、静态变量以及上述所有的组合的群组中选出。
步骤308,清除计算机程序源代码中的DFM标签,以生成基础代码。所述DFM标签可以将特征与所述至少一个计算机程序源代码隔离。在编写所述计算机程序源代码,或向所述计算机程序源代码添加新代码或更新代码的同时,可以添加至少一个标签。清除所述计算机程序源代码中的至少一个标签之后,编译至少一个计算机程序源代码。可以通过上述公开的内置解析器清除计算机程序源代码。
步骤310,编译代码集合,以生成多个二进制文件。
步骤312,通过特征变化表216,确定每个所述二进制文件之间的差异,并存储所述确定的差异。
步骤314,基于存储的差异,创建一个或多个微分二进制文件220。
参见图3,示出了本申请一个实施例的一种动态特征管理器的功能。在一种实现中,动态特征管理器(DFM)可为本发明提供实用程序和框架。DFM可以主要包括如DFM自身的特征管理实用程序;为开发者和DFM用户编译提供接口的DFM编译打包器;如加载器或DFM加载器的运行时间特征管理实用程序,帮助用户加载和卸载可插入特征或运行时创建的可执行二进制文件;如DFM分离器,帮助DFM识别基于DFM标签的代码中发现的微分功能块。
动态特征管理器可为用户提供接口206,帮助标记和维护代码,以及提交该 代码进行编译。该特征可包含一个编辑器和图形实用程序供开发者使用,但与本发明的范围不相关。
DFM编译打包器即为编译器模块212,可以作为开发者和编译器的中介。编译打包器也涉及编译阶段,用来提供与编码中使用的DFM标签所隐含的限制相关的编译错误和警告。至于编码中的功能块,也帮助管理DFM标签的统计信息和差异信息。
DFM加载器即为加载器模块212,可以作为实用程序在运行时管理delta特征或创建的新二进制文件的特征。为用户提供接口,以在存储器中动态加载或卸载delta功能块或可执行二进制文件。使用现有技术参考文件所列出的任意普遍应用的热补丁技术,可加载和卸载存储器中的动态特征。
DFM分离器即为分离器模块210,解析代码中的DFM标签,至于所发现的每个有效特征标签,创建代码中所观察的变化分类列表。同时在不同的工作区创建阶段式代码集合,这些工作区用来生成与每个特征对应的二进制文件。
本发明使用DFM标签隔离代码的附加功能块。这可能涉及给特定的语言定义语法和附加构造。下面以使用C语言和Gnu编译器套装作为编译器的细节为例证明该提议的实施性。
可以使用DFM标签在编写原始代码时隔离特定特征,或者将作为特征的代码添加至现有的代码基库时。DFM标签需要遵循DFM_<the feature name>_start和DFM_<thefeature name>_end语法来隔离功能块。可能存在多个功能块,具有相同特征并跨越整个代码基库,直至每个功能块清晰地与特定特征以‘start’标签和‘end’标签隔离。也需要确保跨越代码基库的相同特征的特征标签集合没有将不一致带入现有代码或附加代码中。
作为描述特征叠加的例子,通过DFM标签,提供原始代码片段和一小部分 附加代码(表示附加特征):
原始代码,只需输入并显示数字:
#include<stdio.h>#include<stdlib.h>int main(){long int Result=0
long Sum_dig=0;
printf("\n Enter Number:");scanf(\"%ld\",&Num);
Result=Num;
printf("\n the Result is:%ld",Result);return(0);
}
如果add sum是一个特征,
采用DFM_SUM_start和DFM_SUM_end作为标签:
#include<stdio.h>
#include<stdlib.h>
DFM_SUM_start
#include<ctype.h>#include<math.h>long int Sum_of_Digits(long intNumber)
{static long int sum=0;if(Number==0)
{return(sum);
}else
{
sum=sum+Number%10+Sum_of_Digits(Number/10);
}
return(sum);
}
DFM_SUM_end
int main(){long int Result=0
long Sum_dig=0;
printf("\n Enter Number:");scanf(\"%ld\",&Num);
DFM_SUM_start
Sum_dig=Sum_of_Digits(Num);
Result=Sum_dig;
DFM_SUM_end
printf("\n the Result is:%ld",result);return(0);
}
鉴于本文将进一步地包含细节,DFM管理器将为每个特征(或特征集合)在内部创建工作区,所谈及的基础二进制文件叫做Bb,附加特征叫做f1,f2等。
这是理解整个过程最简单的示例,且不应限制本发明的范围,当使用代码 集合这一术语时,指对文件、文件夹和相关性不造成限制的代码基库。
可以嵌套DFM标签以建立特征的叠加,从而使DFM能够创建多个delta二进制文件,该二进制文件可在运行时按需接连相互加载。DFM特征的嵌套应遵循一个简单的规则,即相应的特征‘end’标签与出现的每个特征的‘start’标签相匹配。例如,下面为代表多个互相嵌套特征的代码片段:
因此,除SUM外,引进另一个名为DEBUGPRINT的特征。
DFM_DEBUGPRINT_start和DFM_DEBUGPRINT_end用作标签:
#include<stdio.h>
#include<stdlib.h>
DFM_SUM_start//sum feature
#include<ctype.h>
#include<math.h>
long int Sum_of_Digits(long int Number)
{
static long int sum=0;if(Number==0)
{return(sum);
}else{
sum=sum+Number%10+Sum_of_Digits(Number/10);
}
return(sum);
}
DFM_SUM_end
DFM_DEBUGPRINT_start//debugprint feature
#define DEBUGPRINT(msg)\
printf(“debug print from file-%s,and line-%d,as-%s/n”,__FILE__,__LINE__,msg);
DFM_DEBUGPRINT_end
int main(){long int Result=0
long Sum_dig=0;
printf("\n Enter Number:");scanf(\"%ld\",&Num);
DFM_SUM_start
Sum_dig=Sum_of_Digits(Num);
DFM_DEBUGPRINT_start
DEBUGPRINT(“sum of digits introduced”);
DFM_DEBUGPRINT_end
Result=Sum_dig;
DFM_SUM_end
printf("\n the Result is:%ld",result);return(0);
}
参见图4,示出了本申请一个实施例的二进制文件的编译、生成以及更新。在一种实现中,在最初编写代码时,或在向一开始没有紧跟DFM标签的现有代码基库中添加新特征时,开发者可能需要使用DFM标签将特征与基库隔离。开发者也应当遵从前面部分所列举的匹配标签和管理叠加特征的准则。可以接着提交代码进行编译,编译时使用表示隔离叠加的特征的标志;或者提交代码用于生成默认二进制文件。根据本发明,下列语法可以用来将标志提交至DFM:
为特征f1至fn生成可执行基础二进制文件和附加二进制文件:
使用标志–dfm_overlay f1f2…fn
生成一个单一可执行二进制文件:
删除标志–dfm_overlay
图5演示了运行时二进制文件的编译、生成和更新,该流程描述如下:
下面说明的是DFM分离器以及如何从代码中提取特征信息。
在一种实现中,根据为编译过程提供的特征标签,并使用–dfm_overlay标志的参数,附加代码分离器隔离代码基库。该分离器使用下列方法:
创建基础代码集合,清除其中的包括标签的任何DFM标签中所有代码。
解析代码原始原本,搜索标签使用和任何嵌套的合法性;如果发现非法使用或非法嵌套标签,向用户返回错误并停止进一步解析。
随后创建嵌套标签的层级树,所有不相关标签在最高层级中,所有子标签和/或兄弟标签作为层级树中的下层节点。
在步骤1创建的基础代码集合基础上,使用从广度上优先遍历的层级树的每个节点添加的代码创建代码集合,随后叠加在创建的每一上级代码集合上。在创建这些集合时,可以通过给层级树的每个节点分配独立工作区来完成,且可在工作区内管理具有合适变化的代码文件集。
与上述步骤并行的是,向标准编译器提交每个节点代码集合,以进行编译。每个集合的编译可以同时进行,因为代码逻辑上是隔离的。如果任何编译步骤返回错误,向用户返回该错误并停止下一步。
上述提及的算法可能是实现代码层级特征隔离的最简单方法,凭直觉便可以推断出许多优化方法,例如,将层级树同一层级的多个特征合并到单一特征集合中。
结合上述公开的实现,下面说明的是微分二进制文件的创建以及所生成的二进制文件的布局。
动态特征管理器了解提交给自身的标签和代码,可具备一个非常简单的解析器,可以是分离器的一部分。根据上一实施例所列的算法,分离器可以使用该解析器来隔离代码并生成微分代码集合。在不同工作区创建的代码集合可以提交至标准编译器,以进行编译。成功编译所有集合后,在同等数量的工作区可总共生成n+1个二进制文件,其中,n为所出现的不同特征标签的数量。除向编译器提交代码集合外,该分离器也可生成特征变化表。这些表可以存储每个特征的字符串变化。这些表将存储关于函数、全局变量和结构、常见宏、内嵌函数、静态变量等信息,相对于所述代码集合中的特征发生变化或新引入的特征的信息。一个表格可以对应添加至对应基础代码集合顶部的特征之间的差异。
动态特征管理器可以采用下列方法生成微分二进制文件,该方法使用ELF文件格式作为参考,但不仅限于该格式:
将Bb作为生成的基础二进制文件,[Bb+f1]作为使用基础代码集合和特征1代码生成的二进制文件,[Bb+f1+f2]作为使用基础代码集合、特征1代码和特征2代码生成的二进制文件,以此类推。
1.Bb为基础二进制文件,使用时将不做改变。
2.对于特征1,查看表格T1(关于基础集合和具有基址和特征1的代码集合之间变化的列表)。
打开新的二进制文件进行编写(微分二进制目标文件—Bf1);存储具有DFM信息的elf头结构。
关于T1列表中每个变化条目:
a.在二进制elf文件中搜索对应生成的目标代码。需要查阅的部分将对应于文本和数据。
b.如果该变化列表关于函数,为新微分二进制目标文件Bf1中的文本存储程序头结构。从[Bb+f1]的文本部分提取更新函数的全部占用空间,并将其存入与该程序头对应的部分。
c.如果该变化列表关于全局结构或全局变量,引用相同的全局结构或全局变量的所有函数需按照上一步骤存储进Bf1中。需要为更新的数据添加附加程序头和相应的节段。单一数据段可以存储全局数据中的所有变化。图5(a)示出了elf文件的微分二进制文件的示例格式。
d.如果该变化列表关于宏或内嵌函数,引用相同的宏或内嵌函数的所有函 数需按照第二步存储进Bf1中。
3.可以按照所述生成特征1的相同步骤,生成随后的特征2、特征3等和Bf2、Bf3等的微分二进制文件。
本领域的技术人员应理解,在新函数占用空间中,数据和调用函数的外部符号引用需要在创建的基础二进制文件中编址。因此,例如Bf1中的存储段和所有连续的微分二进制文件也应处理所述外部符号编址。在存储器中加载重定位条目和修补时,也需要编址。为详细说明使用ELF文件示例,在基础二进制文件的.rel.txt和.rela.txt的elf部分识别所有代码重定位。新函数占用空间中的外部符号引用应该在存储进微分二进制文件前更新为正确的地址。同样,如果该符号来自动态加载的共享目标,则修补地址为基础二进制文件的PLT(过程链接表)中的对应条目,且应在新函数占用空间中正确更新。
关于全局变量和结构的数据段更新更为复杂,尤其因为与每个及局部更新相关的类型可能在结构中生成。尽管可以实现更新,为行文简洁,此处不再说明elf格式的实现例子。
应理解的是,上面提供的例子为具体实现的示例,且旨在使本发明清晰。进一步地,值得注意的是,本发明并未在现有编译器中引入任何变化,且提交至DFM的标志仅为该DFM所使用。
参见图5(a),示出了本申请一个实施例的标准ELF文件内容。
图5(b)示出了本申请一个实施例的示例性的微分二进制文件内容。
虽然已经用结构特征和/或方法特有的语言描述了为现有二进制文件创建具有较少开销和更短升级时间的可执行二进制文件的实现方式,应理解的是,所附权利要求并不局限于所述具体特征和方法。相反,公开所述具体特征和方法, 用来作为实现为现有二进制文件创建具有较少开销和更短更新时间的可执行二进制文件的例子。
在一个例子中,通过特征变化表216,可提取所存储的每个所述二进制文件之间的差异,并按照某一elf文件格式和系统命名法存储到新的文件中。这就是微分二进制文件,并将作为可执行微分二进制文件220。
上述示例实施例可以具有某些优点。尽管不需要实现本发明公开的各方面,但这些优点可以包括:
1.本发明以命令式以及某种程度的面向对象语言的目标二进制目标的形式,提供了一种动态二进制文件特征更新以及特征隔离的机制(面向对象编程语言不具备这种机制)。
2.本发明将有助于使用这些语言编写和维护代码,尤其对此类语言的遗留代码无疑有利。
3.本发明提供了可更新版本的附加特征,以及较新版本的所述特征的运行时间。
4.本发明公开了一种可解析计算机程序代码和理解特征标签的解析器。
5.本发明提供了按需动态加载和卸载微分特征的方法。
最后应理解的是,以上实施例仅用以说明,而非限制本申请的技术方案。尽管本申请的详细描述参照上述优选实施例,应当理解的是,在不脱离本申请和权利要求所覆盖的范围条件下,本领域技术人员依然可以做出各种修改、改变或者等同替换。
Claims (28)
1.一种计算机系统(202),其特征在于,具有非临时性计算机可读介质,该计算机可读介质上包括已编码的计算机程序逻辑,当在所述系统(202)上执行时提供一种创建并管理一个或多个可执行微分二进制文件(220)的机制,使所述系统(202)执行以下操作:
解析至少一个计算机程序源代码,其中所述计算机程序源代码具有至少一个动态特征管理器DFM标签;
基于所述DFM标签创建多个代码集合,其中,所述代码集合包括:具有基础代码的第一代码集合,所述基础代码为无任何DFM标签的所述至少一个计算机程序源代码,以及具有所述基础代码和特征的至少一个第二代码集合,所述特征为码集;
生成一个或多个特征变化表(216),所述特征变化表(216)存储相对于所述代码集合中的特征发生变化的特征的信息;
清除计算机程序源代码中的所述DFM标签,以生成所述基础代码,所述DFM标签用于表示所述特征与所述至少一个计算机程序源代码隔离;
编译所述代码集合,以生成多个二进制文件;
通过所述特征变化表(216),确定所述多个二进制文件中任意两个二进制文件之间的差异;
基于所述确定的差异,创建一个或多个微分二进制文件220,所述一个或多个可执行微分二进制文件(220)包括所述创建的一个或多个微分二进制文件(220)。
2.根据权利要求1所述的计算机系统(202),其特征在于,所述DFM标签遵循DFM_<thefeature name>_start和DFM_<the feature name>_end语法来隔离所述特征。
3.根据权利要求2所述的计算机系统(202),其特征在于,在编写所述计算机程序源代码时添加所述DFM标签。
4.根据权利要求1至3任一项所述的计算机系统(202),其特征在于,在向所述计算机程序源代码添加新代码或更新代码时增加所述DFM标签。
5.根据权利要求1或2所述的计算机系统(202),其特征在于,所述特征包括函数、全局变量和结构、常见宏、内嵌函数、静态变量中的一个或多个。
6.根据权利要求1至3任一项所述的计算机系统(202),其特征在于,在所述解析至少一个具有至少一个动态特征管理器DFM标签的计算机程序源代码时,所述计算机系统(202)还用于执行以下操作:
解析至少一个具有至少一个动态特征管理器DFM标签的计算机程序源代码,以检查所述DFM标签的嵌套,并创建所述计算机程序源代码的层级树,其中,所述层级树包括设置在最高层级的DFM无关标签,以及作为所述层级树中的下层节点的子标签和/或兄弟标签。
7.根据权利要求1所述的计算机系统(202),其特征在于,所述变化的特征包括函数、全局变量和结构、常见宏、内嵌函数、静态变量中的一个或多个,所述变化的特征是相对于所述代码集合中的特征发生变化或新引入或更新的特征。
8.根据权利要求1至3任一项所述的计算机系统(202),其特征在于,所述DFM标签遵循规则,其中每个特征相应的‘end’DFM标签与‘start’DFM标签相匹配。
9.根据权利要求1所述的计算机系统(202),其特征在于,所述系统(202)还用于执行以下操作:将所述一个或多个微分二进制文件(220)加载到存储器中,并将所述一个或多个微分二进制文件(220)映射到执行中的二进制文件。
10.一种创建并管理至少一个可执行微分二进制文件(220)的方法,其特征在于,所述方法包括:
解析至少一个具有至少一个动态特征管理器DFM标签的计算机程序源代码;
基于所述DFM标签创建多个代码集合,其中,所述代码集合包括:具有基础代码的第一代码集合,所述基础代码为无任何DFM标签的所述至少一个计算机程序源代码,以及具有所述基础代码和特征的至少一个第二代码集合,所述特征为码集;
生成一个或多个特征变化表(216),所述特征变化表(216)存储相对于所述代码集合中的特征发生变化的特征的信息;
清除所述计算机程序源代码中的所述DFM标签,以生成基础代码,其中所述DFM标签用于表示所述特征与所述至少一个计算机程序源代码隔离;
编译所述代码集合,以生成多个二进制文件;
通过所述特征变化表(216),确定所述多个二进制文件中任意两个二进制文件之间的差异;
基于所述确定的差异,创建一个或多个微分二进制文件(220),所述一个或多个可执行微分二进制文件(220)包括所述创建的一个或多个微分二进制文件(220)。
11.根据权利要求10所述的方法,其特征在于,所述DFM标签采遵循DFM_<the featurename>_start和DFM_<the feature name>_end语法来隔离所述特征。
12.根据权利要求11所述的方法,其特征在于,在编写所述计算机程序源代码时添加所述DFM标签。
13.根据权利要求10至12任一项所述的方法,其特征在于,在向所述计算机程序源代码添加新代码或更新代码时增加所述DFM标签。
14.根据权利要求10或11所述的方法,其特征在于,所述特征包括函数、全局变量和结构、常见宏、内嵌函数、静态变量中的一个或多个。
15.根据权利要求10至12任一项所述的方法,其特征在于,
所述解析至少一个具有至少一个动态特征管理器DFM标签的计算机程序源代码包括:
解析至少一个具有至少一个动态特征管理器DFM标签的计算机程序源代码,以检查所述DFM标签的嵌套,并创建所述计算机程序源代码的层级树,其中,所述层级树包括设置在最高层级的DFM无关标签,以及作为所述层级树中的下层节点的子标签和/或兄弟标签。
16.根据权利要求11所述的方法,其特征在于,所述变化的特征函数、全局变量和结构、常见宏、内嵌函数、静态变量中的一个或多个,所述变化的特 征是相对于所述代码集合中的特征发生变化或新引入或更新的特征。
17.根据权利要求10至12任一项所述的方法,其特征在于,所述DFM标签遵循规则,其中每个特征相应的‘end’DFM标签与‘start’DFM标签相匹配。
18.根据权利要求10所述的方法,其特征在于,所述方法还包括:
将所述一个或多个微分二进制文件(220)加载到存储器中,并将所述一个或多个微分二进制文件(220)映射到执行中的二进制文件。
19.一种创建并管理至少一个可执行微分二进制文件(220)的计算机系统(202),其特征在于,所述计算机系统(202)包括:
处理器(204)和耦合至所述处理器(204)的存储器(208),该处理器用于执行所述存储器中的多个模块和多个指令,其中,所述多个模块包括:
分离器模块(210),用于:解析至少一个具有至少一个动态特征管理器DFM标签的计算机程序源代码;
基于所述DFM标签创建多个代码集合,其中,所述代码集合包括:
具有基础代码的第一代码集合,所述基础代码为无任何DFM标签的所述至少一个计算机程序源代码,
以及具有所述基础代码和特征的至少一个第二代码集合,所述特征为码集;
生成多个特征变化表(216),所述程序变化表(216)存储相对于所述第一代码集合和所述第二代码集合中的特征发生变化的特征的信息;
清除所述计算机程序源代码中的所述DFM标签,以生成基础代码,所述DFM标签用于表示将所述特征与所述至少一个计算机程序源代码隔离;
编译器打包器模块(212),用于编译所述第一代码集合和所述第二代码集合,以生成多个二进制文件;
所述多个指令用于:通过所述特征变化表(216),确定所述多个二进制文件中任意两个二进制文件之间的差异;基于所述确定的差异,创建一个或多个微分二进制文件(220),所述一个或多个可执行微分二进制文件(220)包括所述创建的一个或多个微分二进制文件(220)。
20.根据权利要求19所述的计算机系统(202),其特征在于,还包括加载器 模块(218),用于管理所述一个或多个微分二进制文件(220),其中,通过加载所述一个或多个微分二进制文件(220)至所述存储器(208),以及将所述一个或多个微分二进制文件(220)映射到执行中的二进制文件,管理所述所述一个或多个微分二进制文件(220)。
21.根据权利要求19或20所述的计算机系统(202),其特征在于,还包括加载器模块(218),用于管理所述一个或多个微分二进制文件(220),其中,通过从所述存储器(208)中卸载所述一个或多个微分二进制文件(220),管理所述一个或多个微分二进制文件(220)。
22.根据权利要求19所述的计算机系统(202),其特征在于,所述DFM标签遵循DFM_<thefeature name>_start和DFM_<the feature name>_end语法来隔离所述特征。
23.根据权利要求19或22所述的计算机系统(202),其特征在于,在编写所述计算机程序源代码时增加所述DFM标签。
24.根据权利要求19或22所述的计算机系统(202),其特征在于,在向所述计算机程序源代码添加新代码或更新代码时增加所述DFM标签。
25.根据权利要求19或22所述的计算机系统(202),其特征在于,所述特征包括函数、全局变量和结构、常见宏、内嵌函数、静态变量中的一个或多个。
26.根据权利要求19或22所述的计算机系统(202),其特征在于,在所述解析至少一个具有至少一个动态特征管理器DFM标签的计算机程序源代码时,所述分离器模块(210)还用于解析至少一个具有至少一个动态特征管理器DFM标签的计算机程序源代码,以检查所述DFM标签的嵌套,并创建所述计算机程序源代码的层级树,其中,所述层级树包括设置在最高层级的DFM无关标签,以及作为所述层级树中的下层节点的子标签和/或兄弟标签。
27.根据权利要求19所述的计算机系统(202),其特征在于,所述变化的特征包括函数、全局变量和结构、常见宏、内嵌函数、静态变量中的一个或多个,所述变化的特征是相对于所述代码集合中的特征发生变化或新引入或更新的特征。
28.根据权利要求19或22所述的计算机系统(202),所述DFM标签遵循规则, 其中每个特征相应的‘end’DFM标签与‘start’DFM标签相匹配。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
IN2531CH2014 | 2014-05-21 | ||
ININ2531/CHE/2014 | 2014-05-21 | ||
IN2531/CHE/2014 | 2014-05-21 | ||
PCT/CN2014/089761 WO2015176492A1 (en) | 2014-05-21 | 2014-10-29 | A system and method thereof for creating dynamically attachable and detachable binary files |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104380250A CN104380250A (zh) | 2015-02-25 |
CN104380250B true CN104380250B (zh) | 2017-09-08 |
Family
ID=52557536
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480001541.4A Active CN104380250B (zh) | 2014-05-21 | 2014-10-29 | 一种动态创建可附加和可拆除二进制文件的系统和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104380250B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11106439B2 (en) * | 2018-05-09 | 2021-08-31 | Nippon Telegraph And Telephone Corporation | Offload server and offload program |
CN111258629B (zh) * | 2018-11-30 | 2023-08-11 | 苏州新看点信息技术有限公司 | 一种手机代码转码方法、存储介质、电子设备及系统 |
CN112837565B (zh) * | 2021-01-20 | 2022-11-11 | 山东师范大学 | 一种散点图的多标签教学演示系统及方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101286119A (zh) * | 2008-05-27 | 2008-10-15 | 华耀环宇科技(北京)有限公司 | 一种通过分析代码变化确定功能点变化的方法 |
CN101315599A (zh) * | 2007-05-29 | 2008-12-03 | 北京航空航天大学 | 源程序相似度检测方法及装置 |
CN101963914A (zh) * | 2010-11-12 | 2011-02-02 | 南京大学 | 一种基于字节码文件重构的Java类在线更新方法 |
CN103279377A (zh) * | 2013-05-09 | 2013-09-04 | 北京百度网讯科技有限公司 | 代码差异度比较方法及装置 |
CN103559449A (zh) * | 2013-11-15 | 2014-02-05 | 华为技术有限公司 | 一种代码改动的检测方法及装置 |
-
2014
- 2014-10-29 CN CN201480001541.4A patent/CN104380250B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101315599A (zh) * | 2007-05-29 | 2008-12-03 | 北京航空航天大学 | 源程序相似度检测方法及装置 |
CN101286119A (zh) * | 2008-05-27 | 2008-10-15 | 华耀环宇科技(北京)有限公司 | 一种通过分析代码变化确定功能点变化的方法 |
CN101963914A (zh) * | 2010-11-12 | 2011-02-02 | 南京大学 | 一种基于字节码文件重构的Java类在线更新方法 |
CN103279377A (zh) * | 2013-05-09 | 2013-09-04 | 北京百度网讯科技有限公司 | 代码差异度比较方法及装置 |
CN103559449A (zh) * | 2013-11-15 | 2014-02-05 | 华为技术有限公司 | 一种代码改动的检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104380250A (zh) | 2015-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI566180B (zh) | 一種動態創建可附加和可拆除二進位檔案的系統和方法 | |
US9213707B2 (en) | Ordered access of interrelated data files | |
CN107506219A (zh) | 一种基于Android系统的通用版本升级方法 | |
US5367683A (en) | Smart recompilation of performing matchup/difference after code generation | |
EP2098954B1 (en) | Systems and methods for template reverse engineering | |
CN108647025A (zh) | 文档对象模型中节点的处理方法及装置、电子和存储设备 | |
CN107924326A (zh) | 对经更新的类型的迁移方法进行覆盖 | |
CN103885770A (zh) | 单片机从可执行文件找回汇编文件的实现方法 | |
US11029934B2 (en) | Method and system for updating legacy software | |
CN104380250B (zh) | 一种动态创建可附加和可拆除二进制文件的系统和方法 | |
Demuth et al. | Supporting the co-evolution of metamodels and constraints through incremental constraint management | |
CN115756451A (zh) | 一种多项目代码文件重用的方法、装置、设备、存储介质 | |
CN116974620A (zh) | 应用程序的生成方法、运行方法以及相应的装置 | |
Swe et al. | XVCL: a tutorial | |
Buchmann et al. | Using triple graph grammars to realise incremental round‐trip engineering | |
JP4724387B2 (ja) | プログラム変換プログラム、プログラム変換装置およびプログラム変換方法 | |
van Der Storm et al. | Object grammars: Compositional and bidirectional mapping between text and graphs | |
CN114924767A (zh) | 一种基于对齐空洞的内核数据类型动态扩展热补方法 | |
Van Gorp et al. | Copying subgraphs within model repositories | |
Fujiwara et al. | Reverse engineering from mainframe assembly to C codes in legacy migration | |
Sacerdoti Coen | A plugin to export Coq libraries to XML | |
Annenkov et al. | Generation technique for Django MVC web framework using the stratego transformation language | |
Horpácsi | Extending erlang by utilising refactorerl | |
US12032941B2 (en) | Method and system for updating legacy software | |
Riddle et al. | Tools for software system construction |
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 |