System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及内存管理,具体为一种linux内核内存模块热升级方法、系统及其存储介质。
技术介绍
1、linux系统应用场景多样,有时候需要根据用户的需求,对linux系统的各子功能系统进行热升级。在现有的技术中,需要针对性开发出用于对旧内核程序进行升级的新内核程序实现内核升级,一般是针对单个函数做热升级。但当涉及数据结构大小发生变化,头文件修改时,当前的内核热升级工具无法制作出热升级的补丁,主要原因在于编译器编译完成后,一个数据结构的大小就已经固定,系统会以这个固定的大小分配内存,固定偏移量访问数据结构里的字段,系统中可能已经存在很多这些数据结构的实例,热升级后的新函数,如果使用的数据结构增加新的字段,大小发生变化,以新的大小来访问这些已经存在的实例,将会造成访问的字段出错,访问越界等问题,可能进一步导致系统崩溃;
2、对一个子功能系统(如内存管理子系统)进行升级,涉及大量的数据结构和头文件,数据结构大小变化和头文件难以避免的,现有的技术方案无法解决问题。
技术实现思路
1、本专利技术的目的在于提供一种linux内核内存模块热升级方法、系统及其存储介质,用于对linux内存管理子功能系统做热升级,在不重启系统的情况下增加、删除、修改linux内存管理子系统的功能特性,以解决上述
技术介绍
中提出的问题。
2、为实现上述目的,本专利技术提供如下技术方案:一种linux内核内存模块热升级方法,包括以下步骤:
3、步骤一:代码提取,将所有待修改的函数提取
4、步骤二:影子数据结构定义,将提取的数据结构相应的影子数据结构进行定义;
5、步骤三:代码修改,新程序代码按照需要进行修改,在进行访问一个数据结构实例对应的影子数据结构,则通过数据结构里能唯一标记此实例的数据,在映射表中查询其对应影子数据结构的指针,再进行访问;
6、步骤四:内核模块处理,对内核模块在不同阶段进行对应的后处理。
7、作为优选,所述步骤一在将待修改的函数提取至新文件中时:
8、已提取函数是内联函数,则将所有调用该函数的上层函数提取,直到上层函数不是内联函数;
9、已提取函数调用了内联函数,则将内联函数提取,直到被调用的函数不是内联函数。
10、作为优选,所述步骤三在进行访问内存管理子系统之外的函数时,利用对应的函数指针进行访问。
11、作为优选,所述内核模块处理包括内核模块加载阶段的处理,对具有影子数据结构的数据结构,进行遍历该数据结构的所有实例,建立映射表,同时,将影子数据结构指向原结构的指针赋值,替换内核函数,在被修改的函数地址,修改指令,跳转到新函数。
12、作为优选,所述内核模块加载阶段的处理中对于需要访问的所有外部函数,进行初始化其对应的函数指针。
13、作为优选,所述内核模块处理还包括内核模块卸载阶段的处理,将所有被替换的函数恢复,同时释放影子数据结构的内存。
14、作为优选,所述影子数据结构里包含有新增字段与指向原结构的指针。
15、此外,本专利技术还提供了一种热升级系统,包括用于存储程序的存储器、处理器与存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序运行时执行所述的一种linux内核内存模块热升级方法。
16、此外,本专利技术还提供了一种存储介质,包括内部存储的升级程序,所述升级程序运行时控制计算机设备执行所述的一种linux内核内存模块热升级方法。
17、综上所述,本专利技术有益效果是:
18、本专利技术有效的解决热升级技术中,无法修改数据结构的问题,而且方法具有通用性,适配范围广,可以用于升级多个版本linux内存管理模块,能在重启系统的情况下增加、删除、修改linux内存管理子系统的功能特性,有效的避免了升级后数据结构大小出现变化导致的访问的字段出错,访问越界等问题。
本文档来自技高网...【技术保护点】
1.一种linux内核内存模块热升级方法,其特征在于:包括以下步骤:
2.根据权利要求1所述的一种linux内核内存模块热升级方法,其特征在于:所述步骤一在将待修改的函数提取至新文件中时:
3.根据权利要求1所述的一种linux内核内存模块热升级方法,其特征在于:所述步骤三在进行访问内存管理子系统之外的函数时,利用对应的函数指针进行访问。
4.根据权利要求1所述的一种linux内核内存模块热升级方法,其特征在于:所述内核模块处理包括内核模块加载阶段的处理,对具有影子数据结构的数据结构,进行遍历该数据结构的所有实例,建立映射表,同时,将影子数据结构指向原结构的指针赋值,替换内核函数,在被修改的函数地址,修改指令,跳转到新函数。
5.根据权利要求4所述的一种linux内核内存模块热升级方法,其特征在于:所述内核模块加载阶段的处理中对于需要访问的所有外部函数,进行初始化其对应的函数指针。
6.根据权利要求1所述的一种linux内核内存模块热升级方法,其特征在于:所述内核模块处理还包括内核模块卸载阶段的处理,将所有被替换的函数恢
7.根据权利要求1所述的一种linux内核内存模块热升级方法,其特征在于:所述影子数据结构里包含有新增字段与指向原结构的指针。
8.一种热升级系统,其特征在于:包括用于存储程序的存储器、处理器与存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序运行时执行上述权利要求1—7中任意一项所述的一种linux内核内存模块热升级方法。
9.一种存储介质,其特征在于:包括内部存储的升级程序,所述升级程序运行时控制计算机设备执行上述权利要求1—7中任意一项所述的一种linux内核内存模块热升级方法。
...【技术特征摘要】
1.一种linux内核内存模块热升级方法,其特征在于:包括以下步骤:
2.根据权利要求1所述的一种linux内核内存模块热升级方法,其特征在于:所述步骤一在将待修改的函数提取至新文件中时:
3.根据权利要求1所述的一种linux内核内存模块热升级方法,其特征在于:所述步骤三在进行访问内存管理子系统之外的函数时,利用对应的函数指针进行访问。
4.根据权利要求1所述的一种linux内核内存模块热升级方法,其特征在于:所述内核模块处理包括内核模块加载阶段的处理,对具有影子数据结构的数据结构,进行遍历该数据结构的所有实例,建立映射表,同时,将影子数据结构指向原结构的指针赋值,替换内核函数,在被修改的函数地址,修改指令,跳转到新函数。
5.根据权利要求4所述的一种linux内核内存模块热升级方法,其特征在于:所述内核模块加载阶段的处理中...
【专利技术属性】
技术研发人员:王元良,
申请(专利权)人:贝联珠贯科技浙江有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。