一种Linux系统内核新功能增加方法

文档序号:8445433阅读:187来源:国知局
一种Linux系统内核新功能增加方法
【技术领域】
[0001]本发明涉及的是一种Iinux系统内核的新功能增加方法。
【背景技术】
[0002]通常情况下,Linux系统除非主动输出信息或者处于调试模式下,应用层的程序是很难在运行过程中输出调试信息的,作为Linux操作系统重中之重的内核更是如此。
[0003]当研发人员针对某特定Linux系统内核进行增加功能时,一般的方案有重新编译内核和修改内核中某个特定的功能函数两种。第一种方案是最容易做到也是最不可行的方案,最容易做到是因为Linux内核源码时开放的,最不可行是因为Linux系统的碎片化比较严重,当前Linux系统内核很有可能是定制好的,重新编译原始内核代码想要形成和当前内核功能完全一致几乎是不可能的;第二种方案通过修改特定的功能函数,使该功能函数完成所增加的功能即可实现开发目标。针对第二种方案,难点之一在于如何让一个稳定成型的内核主动通过调用新实现的功能函数来实现新的功能;难点之二在于是否能够在碎片化严重的Linux系统上做到通用。
[0004]目前采用大多采用Linux系统调用表地址修改和Linux内核kprobe类调用两种方式来实现新功能的增加,但Linux系统调用表地址修改只能自定义系统调用,使用该方法只能进行有限的内核功能扩展。Linux系统调用表地址修改过程中,不同的内核版本和不同的发行版本下系统调用表的地址和相同系统调用在系统调用表中的索引是不一定相同的,难以通用。Kprobe是Linux内核自带的一种代码注入方式,其过程就是利用实现好的内核注册方法,在功能函数执行前或后去主动执行注册好的新功能函数,根据新功能函数的返回值来确定功能函数的执行情况。但Linux内核kprobe类调用属于内核自带功能,需要内核支持,多数定制平台考虑到性能问题取消该功能。Linux内核kprobe类调用难以实现多模块重复自定义。

【发明内容】

[0005]本发明的目的就是针对现有技术所存在的不足,而提供一种Linux系统内核新功能增加方法的技术方案,该方案的方法不依赖内核支持,不依赖系统调用表,可以支持重复自定义,并且保证了原功能函数的调用,便于推广通用。
[0006]本方案是通过如下技术措施来实现的:一种Linux系统内核新功能增加方法,其特征在于包括如下步骤:
1)在原功能函数的起始地址处设置跳转区,跳转到新功能函数;
2)运行新功能函数,判断新功能函数是否需要调用原功能函数,如果需要,则进入步骤3),不需要调用则继续执行新功能函数,直至结束;
3)进入模板函数,通过模板函数的代码修改区和跳回区跳回到原功能函数;
4)执行原功能函数直至原功能函数结束,返回新功能函数继续执行,直至新功能函数执行结束。
[0007]所述的跳转区用于存储跳转到新功能函数的跳转指令。
[0008]模板函数的代码修改区用于存储调取原功能函数的指令。
[0009]所述的跳回区用于存储跳回原功能函数的指令。
[0010]模板函数还设置有备份区,用于备份跳转区内原功能函数的指令。
[0011]在模板函数的起始位置设置有返回区,用于存储函数调用错误时返回的指令。
[0012]所诉的步骤2)判断新功能函数是否需要调用原功能函数来实现全功能的内核。
[0013]所述的步骤3)中跳回到原功能函数是跳转到跳转区以下的函数,不包括跳转区。
[0014]本方案的有益效果可根据对上述方案的叙述得知,由于在该方案中设置有跳转区,即在原功能函数的跳转区内的代码修改,实现了新功能函数的调用,并且跳转区的长度不能破坏原功能函数指令,并且跳转区的长度要大于等于完成一次跳转指令所述长度;有备份区,用于备份跳转区中原功能函数原有的指令;有代码修改区,绝大多数情况下,新功能函数都需要调用原功能函数来实现全功能的内核方法,所有需要修复原函数,通过逐条解析备份区的指令,如果发现指令中存在相对偏移跳转,需要进行偏移地址的转换以保证代码顺利执行,当备份区的代码全部完成转换后,将转换后的代码填写至代码修改区,代码修改的大小需要转换后的代码可以全部存储;。
[0015]由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。
【附图说明】
[0016]图1为本发明【具体实施方式】的示意图。
【具体实施方式】
[0017]为能清楚说明本方案的技术特点,下面通过一个【具体实施方式】,并结合其附图,对本方案进行阐述。
[0018]通过附图可以看出,本方案的:一种Linux系统内核新功能增加方法,其特征在于包括如下步骤:
1)在原功能函数的起始地址处设置跳转区,跳转到新功能函数的起始地址,所述的跳转区用于存储跳转到新功能函数的跳转指令;
2)运行新功能函数,判断新功能函数是否需要调用原功能函数,如果需要,则进入步骤3),不需要调用则继续执行新功能函数,直至结束;
3)进入模板函数,通过模板函数的代码修改区和跳回区跳回到原功能函数,即调回原功能函数的(5),模板函数的代码修改区用于存储调取原功能函数的指令,所述的跳回区用于存储跳回原功能函数的指令;
4)执行原功能函数直至原功能函数结束,返回新功能函数继续执行,直至新功能函数执行结束。
[0019]模板函数还设置有备份区,用于备份跳转区内原功能函数的指令。在模板函数的起始位置设置有返回区,用于存储函数调用错误时返回的指令。
[0020]所诉的步骤2)判断新功能函数是否需要调用原功能函数来实现全功能的内核。
[0021]本发明并不仅限于上述【具体实施方式】,本领域普通技术人员在本发明的实质范围内做出的变化、改型、添加或替换,也应属于本发明的保护范围。
【主权项】
1.一种Linux系统内核新功能增加方法,其特征在于包括如下步骤: 1)在原功能函数的起始地址处设置跳转区,跳转到新功能函数; 2)运行新功能函数,判断新功能函数是否需要调用原功能函数,如果需要,则进入步骤3),不需要调用则继续执行新功能函数,直至结束; 3)进入模板函数,通过模板函数的代码修改区和跳回区跳回到原功能函数; 4)执行原功能函数直至原功能函数结束,返回新功能函数继续执行,直至新功能函数执行结束。
2.根据权利要求1所述的Linux系统内核新功能增加方法,其特征是:所述的跳转区用于存储跳转到新功能函数的跳转指令。
3.根据权利要求1或2所述的Linux系统内核新功能增加方法,其特征是:模板函数的代码修改区用于存储调取原功能函数的指令。
4.根据权利要求3所述的Linux系统内核新功能增加方法,其特征是:所述的跳回区用于存储跳回原功能函数的指令。
5.根据权利要求1所述的Linux系统内核新功能增加方法,其特征是:模板函数还设置有备份区,用于备份跳转区内原功能函数的指令。
6.根据权利要求1所述的Linux系统内核新功能增加方法,其特征是:在模板函数的起始位置设置有返回区,用于存储函数调用错误时返回的指令。
7.根据权利要求1所述的Linux系统内核新功能增加方法,其特征是:所诉的步骤2)判断新功能函数是否需要调用原功能函数来实现全功能的内核。
8.根据权利要求1所述的Linux系统内核新功能增加方法,其特征是:所述的步骤3)中跳回到原功能函数是跳转到跳转区以下的函数,不包括跳转区。
【专利摘要】本发明提供了一种Linux系统内核新功能增加方法技术方案,该方案的方法具有原功能函数、模板函数、新功能函数等,并且有相应的跳转区、跳回区,使得该方案的方法不依赖内核支持,不依赖系统调用表,可以支持重复自定义,并且保证了原功能函数的调用,便于推广通用。
【IPC分类】G06F9-445, G06F11-14
【公开号】CN104765634
【申请号】CN201510225590
【发明人】朱广传, 刘晓萌, 陈丹伟, 任勋益, 苗功勋, 万海山
【申请人】山东中孚信息产业股份有限公司
【公开日】2015年7月8日
【申请日】2015年5月6日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1