CN117573417B - 一种基于异位字段替换的kabi修复方法 - Google Patents

一种基于异位字段替换的kabi修复方法 Download PDF

Info

Publication number
CN117573417B
CN117573417B CN202410050150.7A CN202410050150A CN117573417B CN 117573417 B CN117573417 B CN 117573417B CN 202410050150 A CN202410050150 A CN 202410050150A CN 117573417 B CN117573417 B CN 117573417B
Authority
CN
China
Prior art keywords
field
kabi
original
memory
new
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
Application number
CN202410050150.7A
Other languages
English (en)
Other versions
CN117573417A (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.)
Kirin Software Co Ltd
Original Assignee
Kirin Software 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 Kirin Software Co Ltd filed Critical Kirin Software Co Ltd
Priority to CN202410050150.7A priority Critical patent/CN117573417B/zh
Publication of CN117573417A publication Critical patent/CN117573417A/zh
Application granted granted Critical
Publication of CN117573417B publication Critical patent/CN117573417B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/76Adapting program code to run in a different environment; Porting
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明一种基于异位字段替换的KABI修复方法,包括如下步骤:步骤S101:针对原字段,找到原字段所在的原结构体;在内核中,重新创建一个头文件用来存放原字段的信息;步骤S102:在头文件中创建一带新字段的外挂结构体,所述新字段包含原字段的信息;步骤S103:在头文件中,创建一个用来存放外挂结构体的基数树以及接口函数;步骤S104:新字段的初始化和外挂结构体的内存申请;步骤S105:新字段的地址信息的查找和替换;通过接口函数在使用原字段的位置进行地址替换,将原字段的地址信息替换成新字段的地址信息。

Description

一种基于异位字段替换的KABI修复方法
技术领域
本发明涉及操作系统领域的内存管理技术,具体涉及一种基于异位字段替换的KABI兼容性修复方法。
背景技术
KABI(Kernel Application Binary Interface)内核应用二进制接口,它提供了一种稳定的、向后兼容的接口,用于在不破坏二进制兼容性的情况下,允许应用程序和内核模块在不同的内核版本之间进行交互。KABI用来帮助开发人员确保软件的平滑升级和迁移。
KABI是一种重要的概念,它确保了应用程序和内核模块在不同的内核版本之间的二进制兼容性。它提供了一组稳定的接口和规则,使得在内核升级时,无需重新编译和重新链接应用程序或内核模块。
KABI确保了关键的API(Application Programming Interface)和ABI(Application Binary Interface)的稳定性,这意味着它们在不同的内核版本之间保持不变。KABI使用符号版本控制机制,确保在内核升级时,应用程序和内核模块仍能正确地链接到正确的符号。KABI确保新版本的内核在接口上向后兼容旧版本的应用程序和内核模块,以确保它们能够在新内核上正常工作。
KABI允许在升级内核时保持应用程序和内核模块的二进制兼容性,从而无需重新编译或重新链接它们。KABI提供了一种稳定的、向后兼容的接口,使得开发者可以编写和维护内核模块,而无需担心在内核升级时出现兼容性问题。开发人员应遵循KABI定义的接口规则和约定,并注意版本控制和符号依赖性,以确保二进制兼容性。应用程序和内核模块的版本控制应与所使用的内核版本相匹配,以确保正确的符号链接。依赖于内核未导出的符号可能导致在不同内核版本间的兼容性问题,因此应尽量避免这样的依赖。
KABI表示了二进制兼容性。内核符号表确定的情况下,如果开发人员需要再次修改一些核心结构体的成员或者函数的参数等情况下,就会造成KABI兼容性被破坏,从而无法保证新编写的内核模块和应用程序在新内核上正常工作。这种问题,需要在版本发布前,对KABI的兼容性变化进行检测,并修复出现的KABI变化。
发明内容
为解决上述问题,本发明的目的是提供一种基于异位字段替换的KABI修复方法,本发明旨在根据当前实际的内核KABI校验结果,针对KABI变化的字段进行修复,采用外挂结构体的方式,在原结构体外重新创建结构体和相关变量,采用内核自身使用的Radix-tree的数据结构来存储新创建的字段的地址信息,然后通过不同地址位(即异位)的信息替换的方式来修复引起KABI变化的字段,保持系统的兼容性,保障向后兼容旧版本内核的顺滑性和内核版本间的稳定性,保障操作系统升级模块的稳定性。
本发明的一种基于异位字段替换的KABI修复方法,包括如下步骤:
步骤S101:KABI被破坏的字段称为原字段,针对原字段,找到原字段所在的原结构体;在内核中,重新创建一个头文件用来存放原字段的信息;
步骤S102:在头文件中创建一带新字段的外挂结构体,所述新字段包含原字段的信息;
步骤S103:在头文件中,创建一个用来存放外挂结构体的基数树以及接口函数;所述接口函数包括添加函数、查找函数、替换函数和删除函数;接口函数利用基数树进行新字段与原字段之间的;
步骤S104:新字段的初始化和外挂结构体的内存申请;
采用基数树的数据结构来存储新字段的信息,将原字段的名称作为索引,新字段的地址信息作为值进行保存,对新字段进行初始化操作并进行外挂结构体的内存申请;
步骤S105:新字段的地址信息的查找和替换;
外挂结构体的内存申请后,通过基数树得到新字段的地址信息,通过接口函数在使用原字段的位置进行地址替换,将原字段的地址信息替换成新字段的地址信息。
进一步的,在步骤S101之前,还有一步骤S100;
步骤S100:利用KABI检测工具对内核进行KABI检测,判断KABI检测是否成功,若校验成功,则说明不存在KABI被破坏的字段,直接结束;若校验不成功,则找到KABI被破坏的字段。
进一步的,在步骤S105之后,还有一步骤S106;
步骤S106:新字段的销毁和释放;新字段的内存使用完毕后,对新字段的内存的节点进行销毁和释放。
进一步的,在步骤S102中,若原字段为多个,则判断多个原字段所在的原结构体是否为多个,若是,则创建多个外挂结构体;若否,则创建一个外挂结构体。
进一步的,基数树可以由双链表或二叉树代替。
进一步的,步骤S106中,新字段的释放包括检测基数树中的新字段的内存的节点的数据是否均已销毁,若均已销毁,则进行新字段的释放。
进一步的,步骤S106中,若所有新字段均已释放,则把基数树释放掉,防止基数树中的节点长时间占用内存,最大程度的减少资源使用,优化内存资源配置。
本发明还提供一种计算机设备,包括:存储器和微处理器;
所述存储器用于存储计算机程序;
所述微处理器被编程或配置以执行所述存储器中存储的计算机程序,以实现所述的异位字段替换的KABI修复方法。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以所述异位字段替换的KABI修复方法。
本发明的有益效果:
本发明修复方法采用使用外挂结构体,来绕过内核KABI的检测机制,修复因添加功能或者修复漏洞时修改结构体的字段信息所造成的内核KABI被破坏的情况。为了提高查找的效率,采用内核本身的数据结构——基数树,来存储原字段和新字段的地址信息,跟随原字段的申请和释放过程,添加对新字段信息的查找和替换功能,为了优化资源配置,采用与原字段所在结构体的释放阶段进行同步释放的方式,当所有节点都释放后,再把基数树销毁。用时使用,使用后释放,最小程度消耗内存资源,最大程度的减少内存资源占用。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明方法的基本流程示意图;
图2为本发明方法的实施例的基数树存储示意图;
图3为本发明实施例中设计方案示意图;
图4为本发明实施例中外挂结构体创建示意图。
具体实施方式
为了使本领域技术人员更好地理解本申请方案,下面将采用PHYTIUM处理器、运行银河麒麟操作系统V10 SP1的平台为例,对本发明一种基于异位字段替换的KABI修复方法中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。而且需要说明的是,本发明一种基于异位字段替换的KABI修复方法适用于所有采用KABI进行内核版本控制和内核升级控制的Linux内核,而不依赖于具体采用的处理器或Linux操作系统版本。
本发明公开了一种基于异位字段替换的KABI修复方法,包括通用KABI修复方法,对于内核控制下的结构体字段进行修改引起的KABI变化,采用在新创建的KABI修复的头文件中对于通用可修复结构体的字段进行重新创建,根据动态分配的方式确定新创建内核可修复结构体所需内存,在原结构体初始化时,用外挂结构体的地址和变量替换,在原字段使用时,通过查询的方式获取替换后的变量地址来代替原字段,并在需要释放原结构体时,跟随原结构体的释放一起释放存储的地址变量的值。为了提高在内核中地址的查询速度,采用内核内存管理中的关键数据结构Radix-tree基数树作为修复的基本数据结构,通过基数树的查询方法获取新字段的数据结构地址,并在涉及原字段的初始化、调用、释放和销毁的内核代码处,对内核逻辑进行修改,用新的地址信息替换原字段的地址信息,通过异位字段替换,外挂结构体的方式来解决KBAI兼容性不一致需要修复KABI变化的问题,来保持内核版本控制的稳定性和升级的平滑性。本发明旨在解决内核打补丁时在核心结构体增加字段会导致KABI变化的问题。避免出现版本限定后,需增加字段而无法实现的问题,帮助进行版本迭代和功能提升,保障操作系统稳定性。
KABI被破坏的修复方法是通过在被修改的结构体外,新创建一个用于进行修复的结构体,然后在声明、内存申请/释放,调用的地方进行地址替换,用新申请的内存地址替换原先字段的内存地址,修复KABI的变化,保护KABI的兼容性。
基数树(Radix-tree)是Linux内核的一种关键的数据结构,是一种多叉搜索树,基数树的叶子节点表示实际的数据信息,假设对于以下四个key-value键值对<0101,“abc”><010,“abcd”><001,“bcde”><0110,“cdef”>来说,采用Radix-tree基数树的方式进行存储,所构建的基数树如图2所示,查找时可以根据基数树的插入方式,从根节点开始,如果遇到0,指向左节点;如果遇到1,就指向右节点,在插入过程中构造树节点,在删除过程中删除树节点。基数树具有非常高的查找性能,在Linux内核中被用在内存管理和网络等地方。
如图1所示,本发明一种基于异位字段替换的KABI修复方法,包括:
步骤S100:利用KABI检测工具对内核进行KABI检测,判断KABI检测是否成功,若检测(校验)成功,则说明不存在KABI被破坏的字段,直接结束;
若检测(校验)不成功,则找到KABI被破坏的字段,并进入下一步骤对KABI被破坏的字段进行修复,KABI被破坏的字段称为原字段;
步骤S101:针对被破坏的原字段(也称需修复的原字段),找到该原字段所在的原结构体,在内核中,重新创建一个头文件用来单独存放需修复的原字段的相关内容;
在创建头文件之前,还可以查看一下是否存在修复用的头文件,若存在该头文件,则可以不用再创建头文件,直接在头文件上进行步骤S102即可。
步骤S102:在头文件中创建一个与需修复的原字段相关的外挂结构体,外挂结构体表示在原字段所在的原结构体位置外,新创建一个带新字段的结构体,称为外挂结构体。新字段包含原字段的相关内容。
若原字段为多个,则判断多个原字段所在的原结构体是否为多个,若是,则创建多个外挂结构体来分别对应存储多个原字段所对应的新字段;若否,则创建一个外挂结构体来存放多个原字段所对应的新字段即可。
步骤S103:在头文件内,除了步骤S102的外挂结构体外,还需要创建一棵用来存放外挂结构体(外挂结构体包含新字段的地址信息)的基数树和接口函数,创建的基数树包括根节点。基数树是内核中内存管理部分的关键数据结构,拥有高查找效率的性能。基数树的结构示意图,如图2所示。每一棵基数树都有一个名为root的根节点。根据基数树的插入方式,从根节点开始,如果遇到0,指向左节点;如果遇到1,就指向右节点,基数树和普通的二叉树是有明显的差别的,它的边用来存储和上一节点的不同部分,通过相同信息折叠存放的方式来加快基数树的树形结构的查找速度。基数树也可以由双链表或二叉树代替。
接口函数保证步骤S102所创建的外挂结构体以及步骤S103所创建的用于存放外挂结构体的基数树能够实现其功能。接口函数包括添加函数、查找函数、替换函数和删除函数。对于原字段进行替换的操作及对新字段的操作都通过配置好的接口函数来实现,这样就无需在修改的位置进行反复的修改,增加重复工作。在头文件中,统一完成对接口函数的定义和声明。添加函数用于对原字段的不同调用部分,利用原字段名称作为索引,将原字段所对应的新字段的地址信息作为值保存在基数树中;查找函数用于实现从原字段到新字段的地址转化,在基数树中根据索引查到保存新字段的对应的外挂结构体的位置,替换函数用于通过该地址替换原结构体的查找和使用的地址;删除函数用于当不再使用原字段的地址信息后,及时从基数树中删除与原字段对应的新字段的节点信息,防止内存资源的过度占用。
步骤S104:新字段的初始化和外挂结构体的内存申请。
采用基数树来存储新字段的地址信息,将原字段的名称作为索引,对应的新字段的地址信息作为值进行存储。对存放新字段的地址信息的基数树进行初始化操作,初始化包括根节点的创建。需要注意的是,在使用阶段只需进行一次初始化即可。初始化后,本身是没有映射的,可以在初始化后直接对新创建的外挂结构体进行内存申请,便于之后对新字段内存地址的查找操作。
步骤S105:新字段的地址信息的查找和替换。步骤S104对外挂结构体的内存申请后,通过接口函数在所有使用原字段的位置处进行地址的查找和替换。
对于新字段的地址信息的查找,是利用查找函数,通过对应的索引信息,查找到外挂结构体中新字段的地址信息,也就是基数树的值,并用新字段的地址信息通过替换函数替换原字段的地址信息。在保存新字段的基数树中,通过信息折叠的方式将相关信息保留在边上,而不是存储在节点中,在查找时可以最大程度的加快树查找速度,从而快速获取完整的数据信息。找到保存信息对应节点的地址后,将值取出,然后将值填入到对原字段的地址信息的使用位置(比如一些原字段涉及的函数),将原字段的地址访问替换为新字段的地址访问,完成原字段和新字段的访问位置的替换操作,结束并退出。
步骤S106:新字段的销毁和释放。在新字段使用完毕后,可对保存在基数树上新创建的关于新字段的节点进行销毁。从根节点依据边查找对应值的信息,如果需要释放,则将边指向的叶子节点的信息整个删除;接着判断边对应的叶子节点的数目是否变为0,若是,则采用往上折叠的方式,将边收回到上一层的节点处。需要注意的是,在对新字段进行销毁和释放的过程中,需确保对于该节点保存信息相关的所有调用函数已经使用完毕,不然会出现对该节点的地址的访问为空,造成内核panic,引起系统崩溃。最好的销毁和释放的方式是随着原字段所在原结构体的释放阶段进行同步释放,这样可以保证在删除该节点前,所有对原字段的函数调用已使用完毕,避免漏掉替换过程引起的内核panic现象的发生。
若新字段使用完毕且均已销毁,则可以将只剩下根节点的基数树从内核中销毁。及时清理不再使用的基数树,可以避免内存长时间被占用,及时释放内存资源。内存的资源十分宝贵,新字段通过基数树的方式进行替换,作为内存管理部分的核心结构体,如果存放的是关键字段的地址信息,使用的范围会非常大,如果不及时清理新字段的内存占用,很容易造成内存泄漏。且在不使用时,会占用较大的内存,所以当新字段的地址信息使用完毕后,应及时销毁和释放,最大程度的减少资源使用,优化内存资源配置。
具体的实施例:
步骤S100的KABI的检测(校验)是把结构体的信息进行展开,根据结构体的名称、参数个数以及字段的位置和类型以一定的方式,生成一个CRC校验码,当再次进行KABI校验时,比如将Struct foo结构体中的一个字段进行修改了,就会得到一个不一样的CRC校验码,说明此处的代码发生修改,KABI被破坏了,不再兼容原先方式的代码。这是一个类似于日志快照的概念。在原结构体外新建一个外挂结构体,因为原结构体没有改变,所以即便新生成一个CRC校验码,也不会对原结构体产生影响,这样就跳过了KABI的检测,就可以保证KABI的兼容性。
假设经步骤S100的检测,内核的KABI发生变化,KABI被破坏了,定位到发生KABI变化的原因为结构体Struct foo中增加了字段unsigned long z,由于变量unsigned long z的加入,导致结构体Struct foo的CRC校验码发生变化,从而导致调用该结构体实例的函数接口的CRC值发生变化,影响内核版本的升级和相关第三方模块的升级和修改。为了修复这一KABI变化,本发明采用了一种基于异位字段替换的KABI修复方案,采用外挂结构体的方式,在内核的头文件处单独创建用以修复的头文件-kabi-fix文件,并且在头文件中,对需要修复的Struct foo结构体进行重新创建,创建名为Struct kabi_fix的外挂结构体,外挂结构体中包含与原字段同名的字段unsigned long z,并且在文件中,新建一棵用来关联原字段和新字段之间的对应关系的基数树,将新创建的外挂结构体Struct kabi_fix存储到新创建的基数树中,将原字段的名称foo->z作为索引,kabi_fix->z作为值存储在基数树中。步骤S105在所有使用了原字段的函数调用处使用新字段的地址信息进行替换,完成KBAI的修复。
如图4所示,在结构体Struct foo中,字段unsigned long z是引起KABI变化的字段,需要创建一个新的外挂结构体来保存该字段的地址,绕过内核KABI的检测,对于unsigned long z字段来说,将其保存在Struct kabi_fix结构体中,当然如果在Structfoo中包含多个造成KABI被破坏的字段,也可以将其加入到Struct kabi_fix结构体中,并把用于KABI修复的外挂结构体保存在创建的一棵用于修复KABI的基数树的节点中,在所有与unsigned long z相关函数调用接口部分,都通过查询基数树获取新字段的地址信息的方式,替换掉原先通过Struct foo结构体中获取地址信息的方式,这样就可以绕过内核中KABI的检测方式,保证KABI的兼容性。
此外,本发明还提供一种计算机设备,包括相互连接的微处理器和存储器,微处理器被编程或配置以执行存储器中存储的计算机程序,以实现异位字段替换的KABI修复方法。
此外,本发明还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序用于被微处理器编程或配置以异位字段替换的KABI修复方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (9)

1.一种基于异位字段替换的KABI修复方法,其特征在于,包括如下步骤:
步骤S101:KABI被破坏的字段称为原字段,针对原字段,找到原字段所在的原结构体;在内核中,重新创建一个头文件用来存放原字段的信息;
步骤S102:在头文件中,创建一带新字段的外挂结构体,所述新字段包含原字段的信息;
步骤S103:在头文件中,创建一个用来存放外挂结构体的基数树以及接口函数;所述接口函数包括添加函数、查找函数、替换函数和删除函数;接口函数利用基数树进行新字段与原字段之间的操作;
步骤S104:新字段的初始化和外挂结构体的内存申请;
采用基数树的数据结构来存储新字段的信息,将原字段的名称作为索引,新字段的地址信息作为值进行保存,对新字段进行初始化操作并进行外挂结构体的内存申请;
步骤S105:新字段的地址信息的查找和替换;
外挂结构体的内存申请后,利用基数树得到新字段的地址信息,通过接口函数在使用原字段的位置进行地址替换,将原字段的地址信息替换成新字段的地址信息。
2.根据权利要求1所述的一种基于异位字段替换的KABI修复方法,其特征在于,在步骤S101之前,还有一步骤S100;
步骤S100:利用KABI检测工具对内核进行KABI检测,判断KABI检测是否成功,若校验成功,则说明不存在KABI被破坏的字段,直接结束;若校验不成功,则找到KABI被破坏的字段。
3.根据权利要求1所述的一种基于异位字段替换的KABI修复方法,其特征在于,在步骤S105之后,还有一步骤S106;
步骤S106:新字段的销毁和释放;新字段的内存使用完毕后,对新字段的内存的节点进行销毁和释放。
4.根据权利要求1所述的一种基于异位字段替换的KABI修复方法,其特征在于,在步骤S102中,若原字段为多个,则判断多个原字段所在的原结构体是否为多个,若是,则创建多个外挂结构体;若否,则创建一个外挂结构体。
5.根据权利要求2所述的一种基于异位字段替换的KABI修复方法,其特征在于,基数树可以由双链表或二叉树代替。
6.根据权利要求3所述的一种基于异位字段替换的KABI修复方法,其特征在于,步骤S106中,新字段的释放包括检测基数树中的新字段的内存的节点的数据是否均已销毁,若均已销毁,则进行新字段的释放。
7.根据权利要求6所述的一种基于异位字段替换的KABI修复方法,其特征在于,步骤S106中,若所有新字段均已释放,则把基数树释放掉,防止基数树中长时间占用内存,最大程度的减少资源使用,优化内存资源配置。
8.一种计算机设备,其特征在于,包括:存储器和微处理器;
所述存储器用于存储计算机程序;
所述微处理器被编程或配置以执行所述存储器中存储的计算机程序,以实现如权利要求1-7任意一项所述的基于异位字段替换的KABI修复方法。
9.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其特征在于,所述计算机程序用于被微处理器编程或配置以执行权利要求1~7中任意一项所述的基于异位字段替换的KABI修复方法。
CN202410050150.7A 2024-01-15 2024-01-15 一种基于异位字段替换的kabi修复方法 Active CN117573417B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410050150.7A CN117573417B (zh) 2024-01-15 2024-01-15 一种基于异位字段替换的kabi修复方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410050150.7A CN117573417B (zh) 2024-01-15 2024-01-15 一种基于异位字段替换的kabi修复方法

Publications (2)

Publication Number Publication Date
CN117573417A CN117573417A (zh) 2024-02-20
CN117573417B true CN117573417B (zh) 2024-04-09

Family

ID=89884765

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410050150.7A Active CN117573417B (zh) 2024-01-15 2024-01-15 一种基于异位字段替换的kabi修复方法

Country Status (1)

Country Link
CN (1) CN117573417B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103744742A (zh) * 2013-12-31 2014-04-23 上海斐讯数据通信技术有限公司 一种内存坏块的修复方法
CN106055979A (zh) * 2016-05-24 2016-10-26 百度在线网络技术(北京)有限公司 内核修复方法和装置
CN106598667A (zh) * 2016-12-12 2017-04-26 百度在线网络技术(北京)有限公司 用于修复内核漏洞的方法和装置
CN114528141A (zh) * 2022-02-16 2022-05-24 烽火通信科技股份有限公司 一种嵌入式系统内核态下程序缺陷修复的方法和装置
CN114860506A (zh) * 2022-04-27 2022-08-05 珠海全志科技股份有限公司 Linux文件系统修复方法、系统、装置及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103744742A (zh) * 2013-12-31 2014-04-23 上海斐讯数据通信技术有限公司 一种内存坏块的修复方法
CN106055979A (zh) * 2016-05-24 2016-10-26 百度在线网络技术(北京)有限公司 内核修复方法和装置
CN106598667A (zh) * 2016-12-12 2017-04-26 百度在线网络技术(北京)有限公司 用于修复内核漏洞的方法和装置
CN114528141A (zh) * 2022-02-16 2022-05-24 烽火通信科技股份有限公司 一种嵌入式系统内核态下程序缺陷修复的方法和装置
CN114860506A (zh) * 2022-04-27 2022-08-05 珠海全志科技股份有限公司 Linux文件系统修复方法、系统、装置及存储介质

Also Published As

Publication number Publication date
CN117573417A (zh) 2024-02-20

Similar Documents

Publication Publication Date Title
JP4878715B2 (ja) オペレーティングシステムに適合しないアプリケーションにパッチを当てる方法、コンピュータシステム及びコンピュータ可読記録媒体
US6542167B1 (en) System and method for flexible software linking
US20070226685A1 (en) Apparatus and method for live loading of version upgrades in a process control environment
US20030088752A1 (en) Computer system with virtual memory and paging mechanism
JP4825433B2 (ja) 比較的限られた記憶スペースを備えたコンピューティング装置およびそのオペレーティングシステム/ファイルシステム
KR20110098567A (ko) 최소 부트 이미지의 생성 방법 및 장치
JP6013626B2 (ja) 不揮発性メモリ書込み機構
CN109710317B (zh) 系统启动方法、装置、电子设备及存储介质
KR20070105933A (ko) 코드의 사용중 갱신 수행 방법 및 패킷 프로세서
KR20050061378A (ko) 페일세이프 방식으로 맞춤 소프트웨어 영상 갱신을불휘발성 저장 장치에 적용하는 시스템 및 방법
US8893272B2 (en) Method and device for recombining runtime instruction
JP2022513382A (ja) 関数ジャンプを実現するための方法、装置及びコンピュータ記憶媒体
US20200341746A1 (en) Snapshot recovery states
JP2005063449A (ja) オブジェクトからオブジェクトへのJavaネイティブインタフェースマッピングの方法及び装置
CN116049207A (zh) 应用程序sql脚本处理方法、装置、处理器及电子设备
Meisami et al. A comprehensive survey of upgradeable smart contract patterns
CN117573417B (zh) 一种基于异位字段替换的kabi修复方法
JP2006518059A (ja) フォールト・トレラントな更新エージェントを有するモバイルハンドセット
US7958490B2 (en) System for automating the definition of application objects supporting undoing, redoing compressing and logging operations
EP2397939A1 (en) Accessing entities of a data access layer
CN115576560A (zh) 一种动态类加载器的热重载方法、装置、设备和介质
US11620136B2 (en) Space snapshots
US10802715B2 (en) Mounting a drive to multiple computing systems
CN112749152A (zh) 智能合约的数据迁移方法、装置及存储介质
CN112035192A (zh) 支持组件热部署的Java类文件加载方法及装置

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