一种内核故障注入方法及电子设备的制造方法

文档序号:9765886阅读:211来源:国知局
一种内核故障注入方法及电子设备的制造方法
【技术领域】
[0001]本发明涉及计算机领域,特别涉及一种内核故障注入方法及电子设备。
【背景技术】
[0002]目前,Linux系统应用广泛,在针对Linux内核进行应用程序开发时,检验应用程序对Linux内核故障的容错机制的有效性非常重要,在Linux内核中进行故障注入是必不可少的环节。但是,Linux系统的开发者出于保证内核代码正确性的考虑,不愿意在Linux内核源代码树中加入一个调试器,以避免开发者通过内核中的调试器引入不良的修正,所以对Linux内核进行故障注入一直是个棘手的问题。
[0003]内核动态探针(Kernel Dynamic Probes,Kprobes)技术的出现有效解决了 Linux系统的内核故障注入问题,提高了内核故障注入的效率。参见图1,其基本工作机制为:首先,注册Kprobes结构体,将用户指定的探测点处的内核指令替换为断点指令,该被替换的内核指令即为被探测的指令,然后把一个用户定义的回调函数关联到该断点指令,当处理器执行到该断点指令时,处理器将转而执行与断点指令相关联的回调函数,该回调函数执行时将模拟对应的内核故障,在回调函数执行完后,返回执行被探测的指令,继续正常的代码路径的执行,整个故障注入过程中无需对Linux内核频繁编译和启动。
[0004]但是,现有技术中上述故障注入方法存在故障注入的等待时间较长的问题,使得整个应用程序开发周期延长。

【发明内容】

[0005]本发明实施例提供一种内核故障注入方法及电子设备,用于解决故障注入的等待时间较长的技术问题。
[0006]第一方面,本发明实施例提供了一种内核故障注入方法,所述方法包括:
[0007]在加载到内存中的内核指令集合中有指令被内核动态探针Kprobes结构体中的断点指令替换时,处理器在执行所述断点指令时,转向执行所述Kprobes结构体中与所述断点指令关联的回调函数;
[0008]所述处理器在执行完所述回调函数时,转向执行被替换的指令所在函数返回后的下一条内核指令。
[0009]结合第一方面,在第一方面的第一种可能的实现方式中,处理器执行所述Kprobes结构体中与所述断点指令关联的回调函数,包括:
[0010]所述处理器将所述回调函数中设定的错误状态码写入数据寄存器。
[0011 ] 结合第一方面,在第一方面的第二种可能的实现方式中,处理器执行所述Kprobes结构体中与所述断点指令关联的回调函数,包括:
[0012]所述处理器读取所述Kprobes结构体中保存的所述被替换的指令的数据返回位置的位置信息,并确定出所述数据返回位置;
[0013]所述处理器生成大小不大于所述数据返回位置的存储容量的混淆数据,并将所述混淆数据写入所述数据返回位置。
[0014]结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述处理器生成大小不大于所述数据返回位置的存储容量的混淆数据,包括:
[0015]随机生成大小不大于所述数据返回位置的存储容量的所述混淆数据;或者
[0016]从设定混淆数据中提取小于所述数据返回位置的存储容量的部分作为所述混淆数据。
[0017]第二方面,本发明实施例还提供了一种内核故障注入方法,所述方法包括:
[0018]在加载到内存中的内核指令集合中有指令被Kprobes结构体中的断点指令替换时,处理器在执行所述断点指令时,转向执行所述Kprobes结构体中与所述断点指令关联的回调函数,产生设定时长的时延,所述设定时长为所述回调函数包含的时间参数;
[0019]所述处理器在产生所述设定时长的时延后执行被替换的指令。
[0020]结合第二方面,在第二方面的第一种可能的实现方式中,处理器执行所述Kprobes结构体中与所述断点指令关联的回调函数,产生设定时长的时延,包括:
[0021]所述处理器记录执行所述回调函数时的第一时间;
[0022]所述处理器确定出所述第一时间之后的与所述第一时间相差所述设定时长的第二时间,以形成所述设定时长的时延。
[0023]第三方面,本发明实施例还提供了一种电子设备,包括:
[0024]内存,用于存储指令;
[0025]处理器,用于执行内存中存储的内核指令;其中,在加载到内存中的内核指令集合中有指令被内核动态探针Kprobes结构体中的断点指令替换时,处理器在执行所述断点指令时,转向执行所述Kprobes结构体中与所述断点指令关联的回调函数;且所述处理器在执行完所述回调函数时,转向执行被替换的指令所在函数返回后的下一条内核指令。
[0026]结合第三方面,在第三方面的第一种可能的实现方式中,所述处理器用于执行所述Kprobes结构体中与所述断点指令关联的回调函数,具体为:将所述回调函数中设定的错误状态码写入数据寄存器。
[0027]结合第三方面,在第三方面的第二种可能的实现方式中,所述处理器用于执行所述Kprobes结构体中与所述断点指令关联的回调函数,具体为:读取所述Kprobes结构体中保存的所述被替换的指令的数据返回位置的位置信息,并确定出所述数据返回位置;以及生成大小不大于所述数据返回位置的存储容量的混淆数据,并将所述混淆数据写入所述数据返回位置。
[0028]结合第三方面的第二种可能的实现方式,在第三方面的第三种可能的实现方式中,所述处理器用于生成大小不大于所述数据返回位置的存储容量的混淆数据,具体为:随机生成大小不大于所述数据返回位置的存储容量的所述混淆数据;或者从设定混淆数据中提取小于所述数据返回位置的存储容量的部分作为所述混淆数据。
[0029]第四方面,本发明实施例还提供了一种电子设备,包括:
[0030]内存,用于存储指令;
[0031]处理器,用于执行内存中存储的内核指令;其中,在加载到内存中的内核指令集合中有指令被Kprobes结构体中的断点指令替换时,处理器在执行所述断点指令时,转向执行所述Kprobes结构体中与所述断点指令关联的回调函数,产生设定时长的时延,所述设定时长为所述回调函数包含的时间参数;且所述处理器在产生所述设定时长的时延后执行被替换的指令。
[0032]结合第四方面,在第四方面的第一种可能的实现方式中,所述处理器用于执行所述Kprobes结构体中与所述断点指令关联的回调函数,产生设定时长的时延,具体为:记录执行所述回调函数时的第一时间;以及确定出所述第一时间之后的与所述第一时间相差所述设定时长的第二时间,以形成所述设定时长的时延。
[0033]本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
[0034]本申请实施例中,处理器在执行到断点指令时,转向执行Kprobes结构体中与断点指令关联的回调函数,进而实现故障注入,并在实现故障注入之后,直接执行被断点指令替换的内核指令所在的函数返回后的下一条内核指令,减少了处理器所执行的指令数量,减少了下一次内核故障注入的等待时间,缩短了应用程序的开发周期。
【附图说明】
[0035]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0036]图1为现有技术中利用Kprobes进行内核故障注入的示例图;
[0037]图2为本申请实施例1中内核故障注入方法的流程示意图;
[0038]图3为本申请实施例1中一应用实例的流程示意图;
[0039]图4为本申请实施例1中另一应用实例的流程示意图;
[0040]图5为本申请实施例2中内核故障注入方法的流程示意图;
[0041]图6为本申请实施例3中电子设备的结构示意框图;
[0042]图7为本申请实施例3中电子设备的详细结构示意框图;
[0043]图8为本申请实施例4中电子设备的结构示意框图;
[0044]图9为本申请实施例4中电子设备的详细结构示意框图。
【具体实施方式】
[0045]针对现有技术中利用Kprobes进行内核故障注入的过程中存在故障注入的等待时间较长的技术问题,本申请实施例提供了一种内核故障注入方法,在该内核故障注入方法中,处理器在执行完与断点指令关联的回调函数后,结束对被断点指令替换的内核指令所在函数的调用,直接执行被替换的内核指令所在函数返回后的下一条指令,减少了处理器所执行的指令数量,减少了下一次内核故障注入的等待时间,缩短了应用程序的开发周期。
[0046]下面通过附图以及具体实施例对本申请技术方案做详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互组合。
[0047]为了便于描述,首先介绍本
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1