Mips架构操作系统内核的调试方法和装置制造方法
【专利摘要】本发明提供了一种MIPS架构操作系统内核的调试方法和装置。其中调试方法包括:在操作系统内核的指定地址插入探测点,将探测点处理函数与探测点关联;在内核执行至探测点时,执行探测点处理函数;由内核预置的调试工具钩住MIPS架构处理器并收集内核调试信息;在探测点处理函数执行完毕后,返回执行操作系统内核。利用该实施例的技术方案,通过置入探测点以及在探测点执行探测点处理函数,钩取MIPS架构处理器以收集调试信息,符合MIPS架构处理器的Linux内核调试要求,使用简单,调试效率高。
【专利说明】MIPS架构操作系统内核的调试方法和装置
【技术领域】
[0001]本发明涉及操作系统领域,特别涉及一种MIPS架构操作系统内核的调试方法和
>J-U ρ?α装直。
【背景技术】
[0002]内核开发困难的一个因素就是内核调试艰难,因此内核调试是操作系统内核开发的一个技术瓶颈。现有的Linux系统内核调试手段包括⑶B,KGDP,KDUMP等,这些内核调手段中大多需要给Linux系统内核植入特定的补丁(Patch)才能进行调试,而且这种调试方式相当于在操作系统调试自身,因此只能支持很简单的调试功能,例如查看内核数据结构、打印现场信息等。
[0003]应用最广泛的一种Linux系统内核调试方案是系统调用printk函数,printk是在内核中运行的向控制台输出显示的函数,由于Linux操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者之间不能简单地使用指针传递数据,因此利用printk函数实现内核调试的过程如下:
[0004]在系统内核空间内,printk把信息写入到IK大的printk_buf中;终端和控制台被初始化之前再把所有信息都缓存在简单的ring buffer(环形缓冲区)中;直到终端和控制台被初始化之后,缓存信息根据调试级别不同有选择性地输出。
[0005]在用户空间内,用户空间访问和控制内核日志有两个接口:klogd和dmesg。klogd和dmesg通过glibc的klogctl函数接口调用内核的syslog系统调用获取打印信息。klogd通过读取proc文件系统来从ring buffer (环形缓冲区)中得到由内核printk信息。最终两个接口都调用了 do_syslog函数,实现对log_buf的访问及相关变量的修改。
[0006]在用户空间有专门用于记录系统日志的程序,早期的大部分嵌入式系统使用的是klogd+syslogd组合,现在大多数发行版都使用rsyslogd或者syslogd_ng 了。
[0007]采用以上方法进行调试必须重新构建并用新内核启动,调试效率比较低。
【发明内容】
[0008]鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的MIPS架构操作系统内核的调试装置和相应的MIPS架构操作系统内核的调试方法。
[0009]本发明一个目的是要提供适用于MIPS架构处理器的Linux内核调试方法。
[0010]本发明的进一个目的是提高Linux内核调试的调试效率。
[0011]依据本发明的一个方面,提供了一种MIPS架构操作系统内核的调试方法。该方法包括在操作系统内核的指定地址插入探测点,将与探测点与探测点处理函数关联;在内核执行至探测点时,执行探测点处理函数;由内核预置的调试工具钩住MIPS架构处理器并收集内核调试信息;在探测点处理函数执行完毕后,返回执行操作系统内核。
[0012]可选地,在操作系统内核的指定地址插入探测点之前还包括:在编译内核的过程中开启调试工具的使能选项,并对调试工具进行初始化。
[0013]可选地,对调试工具进行初始化包括:标记操作系统内部中不能被探测的代码;注册事件通知链函数,以接收MIPS架构处理器下发的异常通知。
[0014]可选地,在操作系统内核的指定地址插入探测点包括:获取指定地址;备份被探测指令,并将使用断点指令替换被探测指令。
[0015]可选地,执行探测点处理函数包括:执行断点指令,触发断点异常;通过事件通知链函数调用第一处理函数;单步执行备份的被探测指令;在被探测指令执行完毕后,通过事件通知链函数调用第二处理函数。
[0016]可选地,调试工具为Linux操作系统的kprobe调试工具;第一处理函数为pre_handler函数,第二处理函数为post_handler函数。
[0017]根据本发明的另一个目的还提供了一种MIPS架构操作系统内核的调试装置。该MIPS架构操作系统内核的调试装置包括:探测点注册模块,用于在操作系统内核的指定地址插入探测点,将探测点与探测点处理函数关联;函数执行模块,用于在内核执行至探测点时,执行探测点处理函数;调试模块,用于由内核预置的调试工具钩住MIPS架构处理器并收集内核调试信息;返回模块,用于在探测点处理函数执行完毕后,返回执行操作系统内核。
[0018]可选地,上述装置还包括:初始化模块,用于在编译内核的过程中开启调试工具的使能选项,并对调试工具进行初始化,其中对调试工具进行初始化包括:标记操作系统内部中不能被探测的代码;注册事件通知链函数,以接收MIPS架构处理器下发的异常通知。
[0019]可选地,探测点注册模块还用于:获取指定地址;备份被探测指令,并将使用断点指令替换被探测指令。
[0020]可选地,调试模块还用于:执行断点指令,触发断点异常;通过事件通知链函数调用第一处理函数;单步执行备份的被探测指令;在被探测指令执行完毕后,通过事件通知链函数调用第二处理函数。
[0021]本发明的MIPS架构操作系统内核的调试方法通过置入探测点以及在探测点执行探测点处理函数,钩取MIPS架构处理器以收集调试信息,符合MIPS架构处理器的Linux内核调试要求,使用简单,调试效率高。
[0022]进一步地,本发明的调试方法在MIPS架构中实现了 kprobe调试工具,在不修改现有代码的基础上,灵活地跟踪内核函数的执行,大大提高了调试的灵活性和调试效率。
[0023]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的【具体实施方式】。
[0024]根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
【专利附图】
【附图说明】
[0025]通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0026]图1是根据本发明一个实施例的MIPS架构操作系统内核的调试装置的示意图;
[0027]图2是根据本发明一个实施例的MIPS架构操作系统内核的调试方法的示意图;
[0028]图3是根据本发明的实施例的MIPS架构操作系统内核的调试方法中kprobe工具的体系架构图;
[0029]图4是根据本发明的实施例的MIPS架构操作系统内核的调试方法中kprobe工具的执行流程图;以及
[0030]图5是根据本发明的实施例的MIPS架构操作系统内核的调试方法中kprobe加载以及卸载流程图。
【具体实施方式】
[0031]图1是根据本发明一个实施例的MIPS架构操作系统内核的调试装置的示意图,该调试装置一般性地可以包括:探测点注册模块110、函数执行模块120、调试模块130、返回模块140、初始化模块150,本实施例的调试装置100可以根据其所实现的功能,灵活选择配置以上模块,在一些可选实施例中,可以同时配置以上所有模块。
[0032]无内部互锁流水级的微处理器(Microprocessor without interlockedpiped stages,简称MIPS),是一种较为流行的精简指令集(Reduced Instruct1n SetComputing,简称RISC)处理器,其尽量利用软件办法避免流水线中的数据相关问题。MIPS的系统结构及设计理念比较先进,发展已经十分成熟。在设计理念上MIPS强调软硬件协同提高性能,同时简化硬件设计。目前中国的龙芯系列的面向高性能计算机和服务器的处理器也是基于MIPS架构,在对信息安全重视程度逐渐提高的环境下,MIPS处理器的重要性也逐渐提高,目前,MIPS架构的处理器拥有强大的指令集、从32位到64位的可扩展性,广泛被使用在许多电子产品、网络设备、个人娱乐装置与商业装置上。
[0033]然而,MIPS架构的处理器与其它几种处理器结构(例如i386,x86_64, ppc64,ia64, sparc64)之间有很多不同之处,并不兼容,因此无法直接使用以上架构的Linux内核开发技术,在现有技术中,当Linux系统发生错误时,MIPS架构的处理器就无法动态的收集系统调试信息。
[0034]在本实施例的MIPS架构操作系统内核的调试装置中,探测点注册模块110用于在操作系统内核的指定地址插入探测点,将探测点处理函数与探测点关联。函数执行模块120用于在内核执行至探测点时,执行探测点处理函数。调试模块130用于由内核预置的调试工具钩住MIPS架构处理器并收集内核调试信息。返回模块140用于在探测点处理函数执行完毕后,返回执行操作系统内核。
[0035]利用以上结构的调试装置100可以通过置入探测点以及在探测点执行探测点处理函数,钩取MIPS架构处理器以收集调试信息。
[0036]此外,在使用内核预置的调试工具前需要开启该调试工具,在这种情况下,初始化模块150用于在编译内核的过程中开启调试工具的使能选项,并对调试工具进行初始化,其中对调试工具进行初始化包括:标记操作系统内部中不能被探测的代码;注册事件通知链函数,以接收MIPS架构处理器下发的异常通知。
[0037]探测点注册模块110可以通过获取指定地址,备份被探测指令,并将使用断点指令替换被探测指令来完成插入探测点的功能。
[0038]调试模块130的一种可选工作流程为:执行断点指令,触发断点异常;通过事件通知链函数调用第一处理函数;单步执行备份的被探测指令;在被探测指令执行完毕后,通过事件通知链函数调用第二处理函数。
[0039]以上调试工具可为Linux操作系统的kprobe调试工具;第一处理函数为pre_handler函数,第二处理函数为post_handler函数。kprobe调试工具是一个动态地收集调试和性能信息的工具,使用该工具可以跟踪任何函数或被执行的指令以及一些异步事件。本实施例的调试装置在MIPS架构下实现了 kprobe的使用,其基本工作机制为:用户指定一个探测点,并把一个用户定义的处理函数关联到该探测点,当内核执行到该探测点时,相应的关联函数被执行,然后继续执行正常的代码路径。
[0040]本发明还提供了一种MIPS架构操作系统内核的调试方法,该调试方法可以由以上实施例中的MIPS架构操作系统内核的调试装置实现,提供一种符合MIPS架构的使用简便的Linux内核调试方法,图2是根据本发明一个实施例的MIPS架构操作系统内核的调试方法的示意图,该调试方法包括:
[0041]步骤S202,在操作系统内核的指定地址插入探测点,将探测点处理函数与探测点关联;
[0042]步骤S204,在内核执行至探测点时,执行探测点处理函数;
[0043]步骤S206,由内核预置的调试工具钩住MIPS架构处理器并收集内核调试信息;
[0044]步骤S208,在探测点处理函数执行完毕后,返回执行操作系统内核。
[0045]在步骤S202之前还可以在编译内核的过程中开启调试工具的使能选项,并对调试工具进行初始化。从而保证调试工具的正常工作。对调试工具进行初始化包括:标记操作系统内部中不能被探测的代码;注册事件通知链函数,以接收MIPS架构处理器下发的异常通知。
[0046]步骤S204执行探测点处理函数的一种可选流程为:执行断点指令,触发断点异常;通过事件通知链函数调用第一处理函数;单步执行备份的被探测指令;在被探测指令执行完毕后,通过事件通知链函数调用第二处理函数。
[0047]本实施例的调试方法中使用的调试工具可以为Linux操作系统的kprobe调试工具;第一处理函数为pre_handler函数,第二处理函数为post_handler函数。
[0048]图3是根据本发明的实施例的MIPS架构操作系统内核的调试方法中kprobe工具的体系架构图。如图kprobe架构包括有体系结构相关层、体系结构无关层以及内核模块。在体系结构相关层中,kprobe利用处理器的异常处理机制在探测点处插入异常指令,从而使内核进入异常处理,并利用单步调试技术执行被调试的指令。体系结构无关层对kprobe探测进行管理,主要管理kprobe模块的注册和注销。内核模块,用户在内核模块中提供一个kprobe异常处理函数,并结合体系结构无关层的管理器完成kprobe的注册。
[0049]kprobe 实现了三种类型的探测点:kprobes、jprobes 和 kretprobes。kprobes 是可以被插入到内核的任何指令位置的探测点,jprobes则只能被插入到一个内核函数的入口,而kretprobes则是在指定的内核函数返回时才被执行。一般使用kprobe的程序实现作一个内核模块,模块的初始化函数来负责安装探测点,退出函数卸载那些被安装的探测点。kprobe提供了接口函数来安装或卸载探测点。
[0050]以kprobes类型的探测点为例,kprobe将被探测的位置的指令替换为断点指令,断点指令被执行后会通过事件通知链函数的notifier_call_chain机制来通知kprobes,kprobes会首先调用用户指定的pre_handler函数接口。执行pre_handler接口后会单步执行原始的指令,如果用户也指定了 post_handler函数接口,会在调用post_handler函数接口后结束处理。
[0051]图4是根据本发明的实施例的MIPS架构操作系统内核的调试方法中kprobe工具的执行流程图。本发明的实施例的MIPS架构操作系统内核的调试方法可以应用于MIPS处理器对Linux2.6及以上版本的内核进行调试的过程中,例如在最新龙芯服务器或者中标麒麟高级服务器操作系统基础上实现。本实施例的调试方法运用kprobe内核调试技术,在不修改现有内核代码的基础上,可以以下流程进行:
[0052]首先使能kprobe,也就是内核时设置C0NFIG_KPR0BES为y,以完成kprobe模块的注册与使能。内核缺省时并没有使能kprobe,因此需要对其进行使能操作,为了使能kprobe,必须在编译内核时设置C0NFIG_KPR0BES为y,即选择在“ Instrumentat1nSupport”中的“kprobes”项。为了实现动态地加载和卸载kprobe模块,还需要设置“Loadable module support” 和 “Module unloading” 设置为 y。进一步地,在需要想得到被探测函数的地址的情况下,还需要确保CONFIG_KALLSYMS或CONFIG_KALLSYMS_ALL设置也为I。
[0053]然后,在运行的内核中给定一个地址,在该给定地址中写入断点指令,插入一个探测点,进行调试工作;
[0054]最后,kprobe模块钩住处理器并收集内核调试信息。
[0055]在以上步骤中可以设置一个处理函数关联到该探测点,该处理函数由用户定义。当内核执行到该探测点时,该探测点相关联的处理函数被执行,由该处理函数取代了原先的探测点代码,处理函数执行完毕之后继续执行正常的代码路径。
[0056]对kprobes模块的初始化过程中,标记出了哪些代码是不能被探测的,哪些代码属于kprobe实现的关键代码,在初始化的过程中还主要包括注册一个通知链函数,来接收来自于MIPS架构处理器下的异常通知。
[0057]注册kprobe模块,具体地包括获取探测点地址,保存原有指令的情况下给该探测点分配一个新地址,并将探测点的指令码修改为BRK_KPR0BE_BP,另外包括kprobe模块的体系结构无关层对kprobe模块的一系列的管理工作。
[0058]在以上收集内核调试信息的过程中,可以在判断存在pre_handler函数的情况下由kprobe模块钩住处理器,获取探测点地址,分配一个新地址并保存原有指令,并将该探测点的指令代码修改为BRK_KPR0BE_BP。
[0059]注册完成以后,kprobe的执行流程如下:当kprobe执行到探测点时,触发异常,该异常属于内核线程的运行控制断点异常处理,当执行至该地址时,必然会触发BRK_KPR0BE的处理流程do_bp,在处理流程中触发kprobe注册的通知链函数,根据触发的通知链函数,最终会选择进入用户注册的第一处理函数pre_handler,执行用户在探测点之前插入的探测信息,此时会在线程控制的作用下激活注册的通知链函数。保存相应的地址和寄存器,对内核特性进行设置并调整为单步调试模式,为p0st_handler函数的执行做准备。程序开始执行保存的被探测点的指令。
[0060]由于开启了单步调试模式,执行完被探测点指令后会继续触发do_bp异常处理流程,并再次触发kprobe注册的通知链函数。
[0061]根据触发的通知链,会选择进入用户注册的第二处理函数p0St_handler,执行用户在探测点之后插入的探测信息。
[0062]在最后一步中,单步异常的处理,清除单步标志,恢复被保存的寄存器并最终返回,程序继续正常执行,接下来进入正常的代码执行期。另外,还可以使用kprobe模块来修改寄存器值和全局数据结构的值。
[0063]本实施例的以上流程在中标麒麟高级服务器操作系统buildl7版进行了测试,其主板为loongson3A-780E单路主板在编译kprobe时,需要先安装内核开发包和头文件包。
[0064]针对以上测试结果,使用本实施例的方案可以实现以下效果:(I)使用本方法实现了基于龙芯平台Linux2.6版本以上的内核进行高效率地开发以及调试;(2)实现了全局探测点详细信息的检索功能,使得用户对当前kprobe的调试状态有一个全面的了解;(3)为kprobe的探测点提供了内核定时器,用户可以定义探测点的有效时间,使内核调试更加灵活;(4)利用/proc文件系统对每个探测点都导出控制文件,实现探测点打开和关闭的功能,用户可以在需要的时候打开、定时或者关闭某个探测点并可以获得当前探测点的信息,有效地对每一个探测点进行管理;(5)利用函数指针数组实现了单探测点多处理手段的功能,可以在不同时刻选择适合的调试手段,大大提高了调试的灵活性和调试效率。
[0065]图5是根据本发明的实施例的MIPS架构操作系统内核的调试方法中kprobe加载以及卸载流程图,在该流程中,首先开启MIPS架构的操作系统,在该操作系统中编译本实施例中的kprobe ;然后插入生成的kprobe ;通过打印信息观察系统中/var/log/message中新输入的探测信息;调试结束,卸载kprobe。
[0066]为完成这一过程,kprobe向运行的内核中给定地址写入断点指令,插入一个探测点。当安装一个kprobes探测点时,kprobe都会首先备份被探测的指令,执行到被探测的指令时首先会触发断点异常,kprobes钩住(hook in)MIPS处理器并收集调试信息。
[0067]kprobe能够单步执行被探测的指令,由内核线程的单步异常处理完成。插入的探测点可以有多个,而且其插入的位置可以位于处理器、寄存器或者全局数据信息结构中,在不重启或者重建内核的情况下该过程能够周而复始地进行。
[0068]kprobe具有接口,该接口能够强行进入任何内核例程,并从中断处理器无干扰地收集任何信息,方便了对其进行扩充。kprobe为每一类型的探测点提供了注册和卸载函数,如 register_kprobe、register_jprobe、register_kretprobe,分别对应注册一个 kprobes类型的探测点、jprobes类型的探测点以及kretprobes的探测点,而对于每一个注册函数则对应地有一个卸载函数unregister_*probe。
[0069]在安装kprobes探测点时,kprobe首先备份被探测的指令,然后使用断点指令来取代被探测指令的头一个或几个字节。当CPU执行到探测点时,将因运行断点指令而执行trap操作,那将导致保存处理器的寄存器,调用相应的trap处理函数,而trap处理函数将调用相应的notifier_call_chain注册的所有通知链函数,kprobe正是通过向trap对应的notifier_call_chain注册关联到探测点的处理函数来实现探测处理的。当kprobe注册的通知链被执行时,它首先执行关联到探测点的pre_handler函数,并把相应的kprobe结构和保存的寄存器作为该函数的参数,接着,kprobe单步执行被探测指令的备份,最后,kprobe执行p0st_handler。等所有这些运行完毕后,紧跟在被探测指令后的指令流将被正常执行。
[0070]Jprobe探测点通过注册kprobes在被探测函数入口的来实现,可以无缝地访问被探测函数的参数。jprobe处理函数应当和被探测函数有同样的原型,而且该处理函数在函数末必须调用kprobe提供的函数jprobe_return O。当执行到该探测点时,kprobe备份处理器寄存器和栈的一些部分,然后修改指令寄存器指向jprobe处理函数,当执行该jprobe处理函数时,寄存器和栈内容与执行真正的被探测函数一模一样,因此它不需要任何特别的处理就能访问函数参数,在该处理函数执行到最后时,它调用jpr0be_retUrn(),那导致寄存器和栈恢复到执行探测点时的状态,因此被探测函数能被正常运行。需要注意,被探测函数的参数可能通过栈传递,也可能通过寄存器传递,但是jprobe对于两种情况都能工作,因为它既备份了栈,又备份了寄存器,当然,前提是jprobe处理函数原型必须与被探测函数完全一样。
[0071]Kretprobe 可以使用 kprobes 来实现,当用户调用 register_kretprobe ()进行Kretprobe探测点注册时,kprobe在被探测函数的入口建立了一个探测点,当执行到探测点时,kprobe保存了被探测函数的返回地址并取代返回地址为一个跳板函数(trampoline)的地址,kprobe在初始化时定义了该跳板函数并且为该跳板函数注册了一个kprobe,当被探测函数执行它的返回指令时,控制传递到该跳板函数,因此kprobe已经注册的对应于跳板函数的处理函数将被执行,而该处理函数会调用用户关联到该kretprobe上的处理函数,处理完毕后,设置指令寄存器指向已经备份的函数返回地址,因而原来的函数返回被正常执行。
[0072]本实施例的MIPS架构操作系统内核的调试方法通过置入探测点以及在探测点执行探测点处理函数,钩取MIPS架构处理器以收集调试信息,符合MIPS架构处理器的Linux内核调试要求,使用简单,调试效率高。
[0073]进一步地,本发明的调试方法在MIPS架构中实现了 kprobe调试工具,在不修改现有代码的基础上,灵活的跟踪内核函数的执行。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0074]此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0075]至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
【权利要求】
1.一种MIPS架构操作系统内核的调试方法,其特征在于包括: 在操作系统内核的指定地址插入探测点,将所述探测点与探测点处理函数关联; 在所述内核执行至所述探测点时,执行所述探测点处理函数; 由所述内核预置的调试工具钩住MIPS架构处理器并收集内核调试信息; 在所述探测点处理函数执行完毕后,返回执行所述操作系统内核。
2.根据权利要求1所述的方法,其特征在于,在操作系统内核的指定地址插入探测点之前还包括: 在编译所述内核的过程中开启所述调试工具的使能选项,并对所述调试工具进行初始化。
3.根据权利要求2所述的方法,其特征在于,对所述调试工具进行初始化包括: 标记所述操作系统内部中不能被探测的代码; 注册事件通知链函数,以接收所述MIPS架构处理器下发的异常通知。
4.根据权利要求1至3中任一项所述的方法,其特征在于,在操作系统内核的指定地址插入探测点包括: 获取所述指定地址; 备份被探测指令,并将使用断点指令替换所述被探测指令。
5.根据权利要求4所述的方法,其特征在于,执行所述探测点处理函数包括: 执行所述断点指令,触发断点异常; 通过所述事件通知链函数调用第一处理函数; 单步执行备份的所述被探测指令; 在所述被探测指令执行完毕后,通过所述事件通知链函数调用第二处理函数。
6.根据权利要求5所述的方法,其特征在于, 所述调试工具为Linux操作系统的kprobe调试工具; 所述第一处理函数为pre_handler函数,所述第二处理函数为post_handler函数。
7.—种MIPS架构操作系统内核的调试装置,其特征在于包括: 探测点注册模块,用于在操作系统内核的指定地址插入探测点,将所述探测点与探测点处理函数关联; 函数执行模块,用于在所述内核执行至所述探测点时,执行所述探测点处理函数; 调试模块,用于由所述内核预置的调试工具钩住MIPS架构处理器并收集内核调试信息; 返回模块,用于在所述探测点处理函数执行完毕后,返回执行所述操作系统内核。
8.根据权利要求7所述的装置,其特征在于,还包括: 初始化模块,用于在编译所述内核的过程中开启所述调试工具的使能选项,并对所述调试工具进行初始化,其中 对所述调试工具进行初始化包括:标记所述操作系统内部中不能被探测的代码;注册事件通知链函数,以接收所述MIPS架构处理器下发的异常通知。
9.根据权利要求7或8所述的装置,其特征在于, 探测点注册模块还用于:获取所述指定地址;备份被探测指令,并将使用断点指令替换所述被探测指令。
10.根据权利要求9所述的装置,其特征在于,所述调试模块还用于:执行所述断点指令,触发断点异常;通过所述事件通知链函数调用第一处理函数;单步执行备份的所述被探测指令;在所述被探测指令执行完毕后,通过所 述事件通知链函数调用第二处理函数。
【文档编号】G06F11/36GK104077220SQ201410256504
【公开日】2014年10月1日 申请日期:2014年6月10日 优先权日:2014年6月10日
【发明者】李小春, 李树金, 张久伶 申请人:中标软件有限公司