CN108762825A - 动态库重载的实现方法及系统 - Google Patents

动态库重载的实现方法及系统 Download PDF

Info

Publication number
CN108762825A
CN108762825A CN201810361898.3A CN201810361898A CN108762825A CN 108762825 A CN108762825 A CN 108762825A CN 201810361898 A CN201810361898 A CN 201810361898A CN 108762825 A CN108762825 A CN 108762825A
Authority
CN
China
Prior art keywords
dynamic base
function
update
address
heavy duty
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
CN201810361898.3A
Other languages
English (en)
Other versions
CN108762825B (zh
Inventor
宋保科
童思鸣
王鹏飞
尹玮
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.)
Fiberhome Telecommunication Technologies Co Ltd
Original Assignee
Fiberhome Telecommunication Technologies Co Ltd
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 Fiberhome Telecommunication Technologies Co Ltd filed Critical Fiberhome Telecommunication Technologies Co Ltd
Priority to CN201810361898.3A priority Critical patent/CN108762825B/zh
Publication of CN108762825A publication Critical patent/CN108762825A/zh
Application granted granted Critical
Publication of CN108762825B publication Critical patent/CN108762825B/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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种动态库重载的实现方法及系统,涉及动态库更新领域。该方法包括以下步骤:暂停进程的调度,卸载旧动态库,对新动态库进行预加载,保证在正式加载时所有依赖元素都成立;对新动态库的合法性进行标识;根据动态库之间的依赖关系,重载动态库;更新多级回调指针引用,逐级检索所有回调指针使用并更新;恢复进程的调度运行,系统重启后,动态库更新继续生效。本发明能实现动态库升级后重载时动态地更新引用关系,从而在系统不重启的情况下也能继续运行,那么系统中已有的手工配置就不需要重新配置,提升了升级效率,减少了更换软件版本的时间和人力成本。

Description

动态库重载的实现方法及系统
技术领域
本发明涉及动态库更新领域,具体是涉及一种动态库重载的实现方法及系统。
背景技术
程序编译一般需经预处理、编译、汇编和链接几个步骤。在应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中。这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。
动态库又称为DLL(Dynamic Link Library,动态链接库),DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL副本的内容。DLL是一个包含可由多个程序同时使用的代码和数据的库。Windows下动态库为.dll后缀,在linux环境中动态库为.so后缀。
静态库和动态库是两种共享程序代码的方式,它们的区别是:静态库在程序的链接阶段被复制到了程序中,和程序运行的时候没有关系;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的副本,因此节省了很多内存。
动态库存放系统运行过程中所产生的所有信息,包括用户输入的信息、推理的中间结果和推理过程的纪录。动态库中由各种事实、命题和关系组成的状态,既是推理机选用知识的依据,也是解释机制获得推理路径的来源。
在产品的开发、测试或运行过程中,有时需要对进程运行依赖的动态库进行替换,但有的开发运行环境比较复杂,例如路由器产品很多情况下需要手工下达很多配置后进行测试。如果整体更换软件版本,那么之前的手工配置就会全部丢失,需要重新部署后再次下达配置,这无疑大大增加了时间和人力成本,而且影响设备运行;如果进行动态库的局部替换,则因为现有技术下动态库之间的引用关系不能动态更新,简单替换后继续运行将引起调用错误,需要系统重启或所有相关进程重启才能正常运行,同样可能导致手工配置的丢失和重新配置。因此,在现有技术下,动态库替换的时间和人力成本很高。这种问题在Linux系统环境和Windows系统环境下均存在。
发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种动态库重载的实现方法及系统,能实现动态库替换后重载时动态地更新引用关系,从而在系统不重启的情况下也能继续运行,那么手工配置就不需要重新配置,也就提升了升级效率,减少了时间和人力成本。
本发明提供一种动态库重载的实现方法,包括以下步骤:
暂停进程的调度,卸载旧动态库,对新动态库进行预加载,保证在正式加载时所有依赖元素都成立;对新动态库的合法性进行标识;
根据动态库之间的依赖关系,重载动态库;
更新多级回调指针引用,逐级检索所有回调指针使用并更新;
恢复进程的调度运行,系统重启后,动态库更新继续生效。
在上述技术方案的基础上,所述对新动态库的合法性进行标识的过程为:
在每个新动态库内都生成一个由固定规则生成的校验码,该校验码是根据新动态库的名称进行加密,用于验证动态库是否完整,确保原来库文件提供的函数在新动态库内都存在。
在上述技术方案的基础上,所述更新多级回调指针引用的过程为:
确定第一级引用,所有右端为第一级引用的函数指针在第一级引用值更新时进行同步更新;每一级都要向前回溯,直到每一级引用都更新;根据二元组<旧引用地址,新引用地址>,在发现旧引用地址时,自动更新为新引用地址。
在上述技术方案的基础上,所述逐级检索所有回调指针使用并更新的过程为:
将指针的值同步更新为新的函数地址值,即更新<函数名称,函数指针引用,函数地址>三元组,重载前后保持不变的是函数名称与函数指针引用,变化的是函数地址;重载动态库结束后,以函数名称在符号表空间内查找到函数地址,将函数地址赋值给函数指针引用;所有引用了被重载函数的进程都要重新打开新的动态库,查找函数符号所对应的地址,并且更新地址;当动态库中的符号重载发生变化时,记录下引用该符号的指针的值,然后更新;依次递归更新;动态库的加载卸载都在同一个进程空间内,只要一个动态库被重载,引用该动态库内符号的所有部分都同步更新。
在上述技术方案的基础上,所述重载动态库以后还包括以下步骤:
制定用户需求的回滚机制:保证每次重载动作里被卸载的动态库都被完整备份,并记录下日志信息,方便有需要的时候进行回退。
本发明还提供一种动态库重载的实现系统,包括预加载单元、重载单元、更新单元、恢复单元,其中:
预加载单元用于:暂停进程的调度,卸载旧动态库,对新动态库进行预加载,保证在正式加载时所有依赖元素都成立;对新动态库的合法性进行标识;
重载单元用于:根据动态库之间的依赖关系,重载动态库;
更新单元用于:更新多级回调指针引用,逐级检索所有回调指针使用并更新;
恢复单元用于:调度进程的调度运行,系统重启后,动态库更新继续生效。
在上述技术方案的基础上,所述预加载单元对新动态库的合法性进行标识的过程为:
在每个新动态库内都生成一个由固定规则生成的校验码,该校验码是根据新动态库的名称进行加密,用于验证动态库是否完整,确保原来库文件提供的函数在新动态库内都存在。
在上述技术方案的基础上,所述更新单元更新多级回调指针引用的过程为:
确定第一级引用,所有右端为第一级引用的函数指针在第一级引用值更新时进行同步更新;每一级都要向前回溯,直到每一级引用都更新;根据二元组<旧引用地址,新引用地址>,在发现旧引用地址时,自动更新为新引用地址。
在上述技术方案的基础上,所述更新单元逐级检索所有回调指针使用并更新的过程为:
将指针的值同步更新为新的函数地址值,即更新<函数名称,函数指针引用,函数地址>三元组,重载前后保持不变的是函数名称与函数指针引用,变化的是函数地址;重载动态库结束后,以函数名称在符号表空间内查找到函数地址,将函数地址赋值给函数指针引用;所有引用了被重载函数的进程都要重新打开新的动态库,查找函数符号所对应的地址,并且更新地址;当动态库中的符号重载发生变化时,记录下引用该符号的指针的值,然后更新;依次递归更新;动态库的加载卸载都在同一个进程空间内,只要一个动态库被重载,引用该动态库内符号的所有部分都同步更新。
在上述技术方案的基础上,所述系统还包括备份单元,用于制定用户需求的回滚机制:保证每次重载动作里被卸载的动态库都被完整备份,并记录下日志信息,方便有需要的时候进行回退。
与现有技术相比,本发明的优点如下:
本发明采用如下重载策略:暂停进程的调度,卸载旧动态库,对新动态库进行合法性检验;根据库依赖关系,重新载入动态库;更新多级回调指针引用,逐级检索所有回调指针使用并更新,以保证系统运行正常;调度恢复运行,在系统重启后,动态库更新继续生效。处理动态库重载后的异常,制定用户需求的回滚机制:保证每次重载动作里被卸载的动态库都被完整备份并记录下日志信息,方便有需要的时候进行回退。本发明能实现动态库替换后重载时动态地更新引用关系,从而在系统不重启的情况下也能继续运行,那么手工配置就不需要重新配置,也就提升了升级效率,减少了动态库更换的时间和人力成本。
附图说明
图1是本发明实施例中动态库重载的实现方法的流程图。
图2是本发明实施例中动态库的加载、卸载顺序。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
实施例1
参见图1所示,本发明实施例1提供一种动态库重载的实现方法,包括以下步骤:
暂停进程的调度,卸载旧动态库,对新动态库进行预加载,保证在正式加载时所有依赖元素都成立;对新动态库的合法性进行标识;
根据动态库之间的依赖关系,重载动态库;
更新多级回调指针引用,逐级检索所有回调指针使用并更新;
恢复进程的调度运行,系统重启后,动态库更新继续生效。
暂停进程的调度为动态库重载过程中的系统安全性做保障:不出现因函数地址访问错误造成的挂起,要求调度器能够暂停,暂停时不接收消息,不处理任何任务。保留一个专用线程用于管理,管理线程仅仅接受并处理与动态库的加载卸载有关的消息和处理。当重载动态库发生时,除管理线程外,所有线程都不处理任何消息。
对新动态库的合法性进行标识的过程为:
在每个新动态库内都生成一个由固定规则生成的校验码,该校验码是根据新动态库的名称进行加密,用于验证动态库是否完整,确保原来库文件提供的函数在新动态库内都存在。
为处理动态库重载后的异常,重载动态库以后,还包括以下步骤:
制定用户需求的回滚机制:保证每次重载动作里被卸载的动态库都被完整备份,并记录下日志信息,方便有需要的时候进行回退。
实施例2
在实施例1的基础上,更新多级回调指针引用的过程为:
确定第一级引用,所有右端为第一级引用的函数指针在第一级引用值更新时进行同步更新;每一级都要向前回溯,直到每一级引用都更新;根据二元组<旧引用地址,新引用地址>,在发现旧引用地址时,自动更新为新引用地址。
将一个函数地址赋值给一个函数指针是即时引用,而一个函数指针通过另一个函数指针进行赋值就涉及到多级引用。例如:一个函数a的地址被赋值给指针b,然后进程内部或者其他进程可能会有一个指针c通过指针b来调用函数a,那么,如果包含函数a的动态库被重载后,包括b、c在内的所有函数指针都要被更新。
卸载加载动态库在多线程和多进程环境下对系统框架的影响:多个进程打开同样一份动态库,一个进程对动态库进行卸载不会影响另外一个进程对动态库函数的调用。
同一个进程内多个线程打开同样一份动态库,其中一个线程对动态库进行卸载是否会影响本进程内其他线程对动态库函数的调用,要视具体情况而定,关键是动态库有没有从系统内存空间中删除,这涉及到动态库符号在物理空间加载计数管理。
当每个线程都打开动态库时,一个线程卸载动态库并不会影响其他线程,因为动态库的物理空间还在。
如果每个线程都打开动态库,而后所有线程都卸载动态库,很明显动态库计数为0,此时动态库的物理空间被删除。
实施例3
在实施例1的基础上,逐级检索所有回调指针使用并更新的过程为:
将指针的值同步更新为新的函数地址值,即更新<函数名称,函数指针引用,函数地址>三元组,重载前后保持不变的是函数名称与函数指针引用,变化的是函数地址;重载动态库结束后,以函数名称在符号表空间内查找到函数地址,将函数地址赋值给函数指针引用;所有引用了被重载函数的进程都要重新打开新的动态库,查找函数符号所对应的地址,并且更新地址;当动态库中的符号重载发生变化时,记录下引用该符号的指针的值,然后更新;依次递归更新;动态库的加载卸载都在同一个进程空间内,只要一个动态库被重载,引用该动态库内符号的所有部分都同步更新。
被重载的动态库函数如果被进程内部其他部分使用,指针进行引用需要在动态库加载后更新指针引用,以保证指针引用的有效性。所有需要重载的的符号会在管理进程里有记录,在动态库重载后,所有引用了被重载函数的进程都要重新打开新的动态库,查找函数符号所对应的地址,并且更新它。
动态库之间的依赖关系处理:动态库的加载顺序与卸载顺序必须严格按照图2中设计的顺序进行。动态库的加载卸载都在同一个进程空间内,只要一个动态库被重载,那么引用该动态库里符号的所有部分都必须同步更新。
基于每个进程进行回调指针依赖动态库的管理,动态库在编写函数时并不了解函数是否会被采用先赋值函数指针,再通过指针的方式来调用动态库,而本发明的目的就是用于管理动态库的函数在进程里有哪些位置进行了指针引用,当动态库重新加载后这些指针的值都要同步更新为新的函数地址值,归纳总结为<函数名称,函数指针引用,函数地址>三元组的更新,三者在重载前后保持不变的是函数名称与函数指针引用,变化的是函数地址,重载结束后,以函数名称在符号表空间内查找到函数地址,然后把函数地址赋值给函数指针引用。
动态库重载后,库中函数地址虽然有变化,但在代码段中直接以函数名进行跳转的函数调用没有问题,因此不需要进行直接函数调用相关处理。
为保证动态库的重载过程无异常,要求系统调度能够在重载前暂停调度,因为当移除旧符号后再通过函数直接调用和函数指针调用都会访问非法地址,该地址已经不在符号表空间,即使在符号表空间,也不是以前的内容。
实施例4
本发明实施例4提供一种动态库重载的实现系统,包括预加载单元、重载单元、更新单元、恢复单元,其中:
预加载单元用于:暂停进程的调度,卸载旧动态库,对新动态库进行预加载,保证在正式加载时所有依赖元素都成立;对新动态库的合法性进行标识;
重载单元用于:根据动态库之间的依赖关系,重载动态库;
更新单元用于:更新多级回调指针引用,逐级检索所有回调指针使用并更新;
恢复单元用于:调度进程的调度运行,系统重启后,动态库更新继续生效。
暂停进程的调度为动态库重载过程中的系统安全性做保障:不出现因函数地址访问错误造成的挂起,要求调度器能够暂停,暂停时不接收消息,不处理任何任务。保留一个专用线程用于管理,管理线程仅仅接受并处理与动态库的加载卸载有关的消息和处理。当重载动态库发生时,除管理线程外,所有线程都不处理任何消息。
预加载单元对新动态库的合法性进行标识的过程为:
在每个新动态库内都生成一个由固定规则生成的校验码,该校验码是根据新动态库的名称进行加密,用于验证动态库是否完整,确保原来库文件提供的函数在新动态库内都存在。
动态库重载的实现系统还可以包括备份单元,用于制定用户需求的回滚机制:保证每次重载动作里被卸载的动态库都被完整备份,并记录下日志信息,方便有需要的时候进行回退。
实施例5
在实施例4的基础上,更新单元更新多级回调指针引用的过程为:
确定第一级引用,所有右端为第一级引用的函数指针在第一级引用值更新时进行同步更新;每一级都要向前回溯,直到每一级引用都更新;根据二元组<旧引用地址,新引用地址>,在发现旧引用地址时,自动更新为新引用地址。
将一个函数地址赋值给一个函数指针是即时引用,而一个函数指针通过另一个函数指针进行赋值就涉及到多级引用。例如:一个函数a的地址被赋值给指针b,然后进程内部或者其他进程可能会有一个指针c通过指针b来调用函数a,那么,如果包含函数a的动态库被重载后,包括b、c在内的所有函数指针都要被更新。
卸载加载动态库在多线程和多进程环境下对系统框架的影响:多个进程打开同样一份动态库,一个进程对动态库进行卸载不会影响另外一个进程对动态库函数的调用。
同一个进程内多个线程打开同样一份动态库,其中一个线程对动态库进行卸载是否会影响本进程内其他线程对动态库函数的调用,要视具体情况而定,关键是动态库有没有从系统内存空间中删除,这涉及到动态库符号在物理空间加载计数管理。
当每个线程都打开动态库时,一个线程卸载动态库并不会影响其他线程,因为动态库的物理空间还在。
如果每个线程都打开动态库,而后所有线程都卸载动态库,很明显动态库计数为0,此时动态库的物理空间被删除。
实施例6
在实施例4的基础上,更新单元逐级检索所有回调指针使用并更新的过程为:
将指针的值同步更新为新的函数地址值,即更新<函数名称,函数指针引用,函数地址>三元组,重载前后保持不变的是函数名称与函数指针引用,变化的是函数地址;重载动态库结束后,以函数名称在符号表空间内查找到函数地址,将函数地址赋值给函数指针引用;所有引用了被重载函数的进程都要重新打开新的动态库,查找函数符号所对应的地址,并且更新地址;当动态库中的符号重载发生变化时,记录下引用该符号的指针的值,然后更新;依次递归更新;动态库的加载卸载都在同一个进程空间内,只要一个动态库被重载,引用该动态库内符号的所有部分都同步更新。
为保证动态库重载可以安全稳定的进行,做了如下三项措施:
第一是动态库预加载。预加载的设计是为了保证足够短的重载生效的时间,保证在正式加载时所有依赖元素都条件成立;对动态库的合法性进行标识,例如:在每个动态库内都生成一个由固定规则生成的校验码,该校验码一般是根据动态库的名称进行加密后用于验证动态库是否完整,要确保原来库文件提供的函数在新库内都存在。
第二是动态库文件重载功能实现。管理线程保存了哪些条目需要重载生效,由预加载功能保证条目的可靠性。
动态库的重载是分段进行的:首先在进程内将除了管理线程以外的所有线程调度暂停,暂停的目的是保证在动态库重新替换符号表过程中,符号不会被调用到,以保证符号替换过程中进程运行不会出现函数地址访问错误;然后是根据动态库的短名查询到库句柄,使用库句柄将旧库移除;接着加载新库,并保存库句柄,同时更新依赖关系回调表;最后进程调度恢复运行,整个重载过程结束。
第三是多级函数指针引用更新:首先通过上一步内容确定第一级引用;接着所有右端为第一级引用的函数指针必须要在第一级引用值更新时进行同步更新;注意每一级都要向前回溯,直到每一级引用都更新。二元组<旧引用地址,新引用地址>。在发现旧引用地址时自动更新为新引用地址。
当动态库中的符号重载发生变化时,记录下引用该符号指针的值,然后更新它,依次递归更新。
到此动态库重载已完成,注意需要考虑如何保证后续进程重新启动情况下的升级持续性:进程重新启动首先管理线程需要检查重载生效配置,将新库纳入到版本挂载分区或解压目录内,完成本运作后再进行下一阶段的启动运作。
管理线程要将相关配置保留在内存中,上电后续进行一并更新。
本领域的技术人员可以对本发明实施例进行各种修改和变型,倘若这些修改和变型在本发明权利要求及其等同技术的范围之内,则这些修改和变型也在本发明的保护范围之内。
说明书中未详细描述的内容为本领域技术人员公知的现有技术。

Claims (10)

1.一种动态库重载的实现方法,其特征在于,包括以下步骤:
暂停进程的调度,卸载旧动态库,对新动态库进行预加载,保证在正式加载时所有依赖元素都成立;对新动态库的合法性进行标识;
根据动态库之间的依赖关系,重载动态库;
更新多级回调指针引用,逐级检索所有回调指针使用并更新;
恢复进程的调度运行,系统重启后,动态库更新继续生效。
2.如权利要求1所述的动态库重载的实现方法,其特征在于,所述对新动态库的合法性进行标识的过程为:
在每个新动态库内都生成一个由固定规则生成的校验码,该校验码是根据新动态库的名称进行加密,用于验证动态库是否完整,确保原来库文件提供的函数在新动态库内都存在。
3.如权利要求1所述的动态库重载的实现方法,其特征在于,所述更新多级回调指针引用的过程为:
确定第一级引用,所有右端为第一级引用的函数指针在第一级引用值更新时进行同步更新;每一级都要向前回溯,直到每一级引用都更新;根据二元组<旧引用地址,新引用地址>,在发现旧引用地址时,自动更新为新引用地址。
4.如权利要求1所述的动态库重载的实现方法,其特征在于,所述逐级检索所有回调指针使用并更新的过程为:
将指针的值同步更新为新的函数地址值,即更新<函数名称,函数指针引用,函数地址>三元组,重载前后保持不变的是函数名称与函数指针引用,变化的是函数地址;重载动态库结束后,以函数名称在符号表空间内查找到函数地址,将函数地址赋值给函数指针引用;所有引用了被重载函数的进程都要重新打开新的动态库,查找函数符号所对应的地址,并且更新地址;当动态库中的符号重载发生变化时,记录下引用该符号的指针的值,然后更新;依次递归更新;动态库的加载卸载都在同一个进程空间内,只要一个动态库被重载,引用该动态库内符号的所有部分都同步更新。
5.如权利要求1所述的动态库重载的实现方法,其特征在于,所述重载动态库以后还包括以下步骤:
制定用户需求的回滚机制:保证每次重载动作里被卸载的动态库都被完整备份,并记录下日志信息,方便有需要的时候进行回退。
6.一种动态库重载的实现系统,其特征在于,包括预加载单元、重载单元、更新单元、恢复单元,其中:
预加载单元用于:暂停进程的调度,卸载旧动态库,对新动态库进行预加载,保证在正式加载时所有依赖元素都成立;对新动态库的合法性进行标识;
重载单元用于:根据动态库之间的依赖关系,重载动态库;
更新单元用于:更新多级回调指针引用,逐级检索所有回调指针使用并更新;
恢复单元用于:调度进程的调度运行,系统重启后,动态库更新继续生效。
7.如权利要求6所述的动态库重载的实现系统,其特征在于,所述预加载单元对新动态库的合法性进行标识的过程为:
在每个新动态库内都生成一个由固定规则生成的校验码,该校验码是根据新动态库的名称进行加密,用于验证动态库是否完整,确保原来库文件提供的函数在新动态库内都存在。
8.如权利要求6所述的动态库重载的实现系统,其特征在于,所述更新单元更新多级回调指针引用的过程为:
确定第一级引用,所有右端为第一级引用的函数指针在第一级引用值更新时进行同步更新;每一级都要向前回溯,直到每一级引用都更新;根据二元组<旧引用地址,新引用地址>,在发现旧引用地址时,自动更新为新引用地址。
9.如权利要求6所述的动态库重载的实现系统,其特征在于,所述更新单元逐级检索所有回调指针使用并更新的过程为:
将指针的值同步更新为新的函数地址值,即更新<函数名称,函数指针引用,函数地址>三元组,重载前后保持不变的是函数名称与函数指针引用,变化的是函数地址;重载动态库结束后,以函数名称在符号表空间内查找到函数地址,将函数地址赋值给函数指针引用;所有引用了被重载函数的进程都要重新打开新的动态库,查找函数符号所对应的地址,并且更新地址;当动态库中的符号重载发生变化时,记录下引用该符号的指针的值,然后更新;依次递归更新;动态库的加载卸载都在同一个进程空间内,只要一个动态库被重载,引用该动态库内符号的所有部分都同步更新。
10.如权利要求6所述的动态库重载的实现系统,其特征在于,所述系统还包括备份单元,用于制定用户需求的回滚机制:保证每次重载动作里被卸载的动态库都被完整备份,并记录下日志信息,方便有需要的时候进行回退。
CN201810361898.3A 2018-04-20 2018-04-20 动态库重载的实现方法及系统 Active CN108762825B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810361898.3A CN108762825B (zh) 2018-04-20 2018-04-20 动态库重载的实现方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810361898.3A CN108762825B (zh) 2018-04-20 2018-04-20 动态库重载的实现方法及系统

Publications (2)

Publication Number Publication Date
CN108762825A true CN108762825A (zh) 2018-11-06
CN108762825B CN108762825B (zh) 2021-04-27

Family

ID=64011119

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810361898.3A Active CN108762825B (zh) 2018-04-20 2018-04-20 动态库重载的实现方法及系统

Country Status (1)

Country Link
CN (1) CN108762825B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109766141A (zh) * 2018-12-26 2019-05-17 北京思源互联科技有限公司 一种基于动态链接库的数据动态更新方法及其装置
CN111124373A (zh) * 2019-12-26 2020-05-08 武汉精鸿电子技术有限公司 一种测试软件开发方法、装置及测试设备
CN113296822A (zh) * 2021-05-27 2021-08-24 北京思特奇信息技术股份有限公司 一种基于动态库的数据库系统在线升级方法和系统
US11675593B2 (en) 2021-08-31 2023-06-13 International Business Machines Corporation Dynamically updating a dynamic library
CN116643812A (zh) * 2023-07-26 2023-08-25 北京麟卓信息科技有限公司 一种基于最小符号冗余的动态库加载优化方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240094992A1 (en) * 2022-09-16 2024-03-21 Microsoft Technology Licensing, Llc Non-disruptive servicing components of a user mode process

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6448756B1 (en) * 2000-08-30 2002-09-10 Micron Technology, Inc. Delay line tap setting override for delay locked loop (DLL) testability
WO2009083732A1 (en) * 2007-12-31 2009-07-09 Symbian Software Limited Preloading dynamic link libraries
CN102301343A (zh) * 2011-06-14 2011-12-28 华为技术有限公司 软件监测方法、装置以及系统
CN102693394A (zh) * 2012-06-07 2012-09-26 奇智软件(北京)有限公司 一种用于拦截应用程序对服务的调用的方法和装置
CN104123492A (zh) * 2014-07-21 2014-10-29 蓝盾信息安全技术有限公司 一种Windows的进程保护方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6448756B1 (en) * 2000-08-30 2002-09-10 Micron Technology, Inc. Delay line tap setting override for delay locked loop (DLL) testability
WO2009083732A1 (en) * 2007-12-31 2009-07-09 Symbian Software Limited Preloading dynamic link libraries
CN102301343A (zh) * 2011-06-14 2011-12-28 华为技术有限公司 软件监测方法、装置以及系统
CN102693394A (zh) * 2012-06-07 2012-09-26 奇智软件(北京)有限公司 一种用于拦截应用程序对服务的调用的方法和装置
CN104123492A (zh) * 2014-07-21 2014-10-29 蓝盾信息安全技术有限公司 一种Windows的进程保护方法

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109766141A (zh) * 2018-12-26 2019-05-17 北京思源互联科技有限公司 一种基于动态链接库的数据动态更新方法及其装置
CN111124373A (zh) * 2019-12-26 2020-05-08 武汉精鸿电子技术有限公司 一种测试软件开发方法、装置及测试设备
CN113296822A (zh) * 2021-05-27 2021-08-24 北京思特奇信息技术股份有限公司 一种基于动态库的数据库系统在线升级方法和系统
CN113296822B (zh) * 2021-05-27 2023-11-03 北京思特奇信息技术股份有限公司 一种基于动态库的数据库系统在线升级方法和系统
US11675593B2 (en) 2021-08-31 2023-06-13 International Business Machines Corporation Dynamically updating a dynamic library
CN116643812A (zh) * 2023-07-26 2023-08-25 北京麟卓信息科技有限公司 一种基于最小符号冗余的动态库加载优化方法
CN116643812B (zh) * 2023-07-26 2023-09-19 北京麟卓信息科技有限公司 一种基于最小符号冗余的动态库加载优化方法

Also Published As

Publication number Publication date
CN108762825B (zh) 2021-04-27

Similar Documents

Publication Publication Date Title
CN108762825A (zh) 动态库重载的实现方法及系统
JP4878715B2 (ja) オペレーティングシステムに適合しないアプリケーションにパッチを当てる方法、コンピュータシステム及びコンピュータ可読記録媒体
KR101687213B1 (ko) 동적으로 로딩하는 그래프 기반 계산
US9792105B2 (en) Method and system for booting and automatically updating software, and recovering from update error, and computer readable recording medium storing method
US6542167B1 (en) System and method for flexible software linking
US9015659B2 (en) Method, computer program product, and system for non-blocking dynamic update of statically typed class-based object-oriented software
US8365164B1 (en) Portable software applications
US8233893B2 (en) Mobile handset update package generator that employs nodes technique
US20040049669A1 (en) Firmware architecture supporting safe updates and multiple processor types
CN101281488A (zh) Linux操作系统的内核调试方法
US20080178168A1 (en) Simplifying Rollback to Prior Versions of Patches Used to Fix Errors in Pre-installed Software
US7137112B2 (en) Method and apparatus for determining class dependencies of objects and/or classes
CN103677937A (zh) 升级软件和运行软件的方法及装置
US6336215B1 (en) Apparatus and method for on-line code only replacement of a running program using checkpoints
JP2006518059A (ja) フォールト・トレラントな更新エージェントを有するモバイルハンドセット
US9396239B2 (en) Compiling method, storage medium and compiling apparatus
US7818756B2 (en) SKU determination mechanism and API
US7275251B2 (en) Selective process restart based on API changes
US6856994B2 (en) System and method for condensing application software
US11070377B1 (en) Blended virtual machine approach for flexible production delivery of intelligent business workflow rules
US8190587B1 (en) In-place image promotion
KR20070060448A (ko) 2단계 부트로더를 이용한 시스템 업그레이드 장치 및 방법
CN107391216A (zh) 一种软件升级方法及装置
CN112052225B (zh) 一种db2数据库静态嵌入式sql绑定优雅部署方法
KR100321999B1 (ko) 스크립트를이용한프로그램패치방법

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant