CN117234953B - 一种基于影子代码缓存的内核调试方法 - Google Patents
一种基于影子代码缓存的内核调试方法 Download PDFInfo
- Publication number
- CN117234953B CN117234953B CN202311508788.2A CN202311508788A CN117234953B CN 117234953 B CN117234953 B CN 117234953B CN 202311508788 A CN202311508788 A CN 202311508788A CN 117234953 B CN117234953 B CN 117234953B
- Authority
- CN
- China
- Prior art keywords
- kernel
- code
- address
- function
- line
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 35
- 230000006870 function Effects 0.000 claims abstract description 144
- 238000013507 mapping Methods 0.000 claims abstract description 46
- 230000002159 abnormal effect Effects 0.000 claims description 26
- 230000009191 jumping Effects 0.000 claims description 3
- 238000012545 processing Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 101100219321 Oryza sativa subsp. japonica CYP85A1 gene Proteins 0.000 description 4
- 230000000694 effects Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000004883 computer application Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于影子代码缓存的内核调试方法,通过建立内核代码源代码中代码行、变量及函数到其在可执行代码中地址之间的映射关系,为内核加载函数构建hook函数即内核hook函数,并构建内核状态打印函数,当系统执行内核加载函数时内核hook函数创建内核代码缓冲区及影子代码缓冲区,并将内核镜像文件的代码段从内核代码缓冲区中逐行复制到影子代码缓冲区中完成执行,以实现无需内核代码源代码的打印语句自动添加,已达到逐行打印执行状态的调试效果,显著提升了内核代码的调试效率。
Description
技术领域
本发明属于计算机应用开发技术领域,具体涉及一种基于影子代码缓存的内核调试方法。
背景技术
操作系统中内核代码的调试过程与普通应用的调试过程不同,一般需要在内核代码中添加调试打印语句完成内核代码的调试。此外,也有通过将操作系统运行在虚拟机内再采用gdb命令连接到虚拟机的虚拟串口实现内核代码调试的方式,然而这一方式无法完成与硬件平台相结合的内核代码的调试,同时,这一方式通常也需要在内核代码中添加调试语句才能实现打印查看内核运行状态的功能,例如查看内核代码全局变量、函数的局部变量等。
综上所述,上述在内核代码中添加调试语句的内核调试方式主要存在以下问题:一是调试过程需要内核代码源代码,虽然Linux内核代码基本都是开源的,但是适配了不同硬件平台的内核代码基本都被硬件厂商修改过,这些修改后的代码往往获取周期较长,有些甚至是无法获取;二是调试过程需要反复修改内核代码源代码,即添加调试代码、编译内核、调试发现问题、再修改编译代码等,很大程度上降低了调试效率。
发明内容
有鉴于此,本发明提供了一种基于影子代码缓存的内核调试方法,实现了无需修改内核代码源代码的内核代码自动调试。
本发明提供的一种基于影子代码缓存的内核调试方法,包括以下步骤:
步骤1、基于内核镜像文件中的符号表,建立内核代码的代码行与编译后的可执行代码中该代码行的地址空间之间的映射关系记为代码行映射,建立内核代码中变量与其在可执行代码中地址之间的映射关系记为变量映射,建立内核代码中函数与其在可执行代码中起始地址及结束地址之间的映射关系记为函数映射;
步骤2、启动系统解析内核镜像文件获取其中的代码段,将当前可用内存空间作为第一可用空间,为内核加载函数构建hook函数记为内核hook函数,以内核加载函数的入口地址作为内核hook函数的参数,构建内核状态打印函数,将内核hook函数及内核状态打印函数的二进制代码写入第一可用空间;将修改后的内核镜像文件重新打包更新内核镜像文件;
步骤3、再次启动系统,当系统执行内核加载函数时内核hook函数获取内核镜像文件中代码段所占空间大小记为代码段大小,在内核地址空间中分配大小为代码段大小的内存缓冲区记为内核代码缓冲区,将内核镜像文件的代码段复制到内核代码缓冲区中;
步骤4、在内核地址空间中分配大小为代码段扩展大小的内存缓冲区记为影子代码缓冲区,代码段扩展大小为代码段大小与长跳转指令语句的长度之和,采用无效的第一操作码填充影子代码缓冲区;
步骤5、根据代码行映射、变量映射及函数映射,将内核镜像文件的代码段逐行复制到影子代码缓冲区中执行,实现内核代码的调试。
进一步地,所述步骤2中所述内核状态打印函数以纯代码段的方式执行。
进一步地,所述内核状态打印函数采用裸函数的方式完成编译。
进一步地,所述步骤5中所述将内核镜像文件的代码段逐行复制到影子代码缓冲区中执行的实现方式为:
步骤5.1、在影子代码缓冲区的起始地址处写入长跳转指令,使系统跳转到内核状态打印函数的起始地址处;
步骤5.2、内核状态打印函数获取执行跳转前的指令地址记为第一指令地址;
步骤5.3、根据第一指令地址获取当前函数,并打印内核代码的全局变量及当前函数的局部变量;获取第一指令地址对应的代码行记为第一代码行,将第一代码行的下一行代码记为第二代码行,获取第二代码行在内核代码缓冲区中的偏移地址记为第二代码行偏移地址,将第二代码行对应的可执行代码从内核代码缓冲区复制到影子代码缓冲区中的第二指令地址处并完成执行,该第二指令地址为影子代码缓冲区在内核中的起始地址与第二代码行偏移地址之和;
步骤5.4、若第二指令地址不大于影子代码缓冲区与代码段大小之和,则将第二指令地址作为第一指令地址,跳转到第一指令地址后执行步骤6.3;否则完成复制结束当前流程。
进一步地,所述的内核调试方法还包括:构建内核异常处理函数,并在步骤2中将内核异常处理函数的二进制代码与内核hook函数和内核状态打印函数的二进制代码一起写入第一可用空间,同时在步骤3中当系统执行内核加载函数时内核hook函数首先完成内核异常处理函数的注册。
进一步地,所述内核异常处理函数的处理方式为:
步骤6.1、当系统捕获无效操作码异常且无效操作码为第一操作码时,获取异常指令的地址,记为异常无效地址;获取异常无效地址对应的内核代码的代码行记为异常代码行;
步骤6.2、将异常代码行的下一个代码行对应的可执行代码在内核代码缓冲区中的偏移地址记为第三代码行偏移地址,将异常代码行的下一个代码行对应的可执行代码从内核代码缓冲区复制到影子代码缓冲区中第三指令地址处,该第三指令地址为影子代码缓冲区在内核中的起始地址与第三代码行偏移地址之和;
步骤6.3、返回异常无效地址处再重新执行。
进一步地,所述内核状态打印函数采用Linux系统中的__attribute__((naked))属性完成编译。
进一步地,所述步骤5.2中所述内核状态打印函数获取执行跳转前的指令地址的方式为:通过弹栈方式获取跳转前的指令地址。
有益效果
本发明通过建立内核代码源代码中代码行、变量及函数到其在可执行代码中地址之间的映射关系,为内核加载函数构建hook函数即内核hook函数,并构建内核状态打印函数,当系统执行内核加载函数时内核hook函数创建内核代码缓冲区及影子代码缓冲区,并将内核镜像文件的代码段从内核代码缓冲区中逐行复制到影子代码缓冲区中完成执行,以实现无需内核代码源代码的打印语句自动添加,已达到逐行打印执行状态的调试效果,显著提升了内核代码的调试效率。
具体实施方式
下面列举实施例,对本发明进行详细描述。
本发明提供了一种基于影子代码缓存的内核调试方法,其核心思想是:通过建立内核代码源代码中代码行、变量及函数到其在可执行代码中的地址之间的映射关系,为内核加载函数构建hook函数即内核hook函数,并构建内核状态打印函数,当系统执行内核加载函数时内核hook函数创建内核代码缓冲区及影子代码缓冲区,并将内核镜像文件的代码段从内核代码缓冲区中逐行复制到影子代码缓冲区中完成执行,以实现无需内核代码源代码的打印语句自动添加。
本发明提供的一种基于影子代码缓存的内核调试方法,具体包括以下步骤:
步骤1、基于内核镜像文件中的符号表,建立内核代码的代码行与编译后的可执行代码中该代码行的地址空间之间的映射关系记为代码行映射,建立内核代码中变量与其在可执行代码中地址之间的映射关系记为变量映射,建立内核代码中函数与其在可执行代码中起始地址及结束地址之间的映射关系记为函数映射。
其中,代码行映射即为源代码级的代码行与该代码行在可执行代码中对应起始地址及长度之间的映射关系,也可以为与其对应的起始地址及结束地址之间的映射关系。
例如,在Linux系统中编译代码时,如果选用了-g编译参数则编译器会额外生成调试信息,并将调试信息嵌入可执行文件中,该调试信息中包含源代码级行号和机器指令间的映射关系,也就是说,记录了每行源代码对应的机器指令的起始和结束地址。
步骤2、启动系统,在系统将内核镜像文件加载到内存的过程中,解析内核镜像文件,获取其中的代码段并搜索可用的内存空间,将搜索到的当前可用内存空间作为第一可用空间,为内核加载函数构建hook函数记为内核hook函数,同时构建内核状态打印函数,并将内核hook函数及内核状态打印函数的二进制代码写入第一可用空间;再以内核加载函数的入口地址作为内核hook函数的参数,以实现当系统调用内核加载函数时首先执行内核hook函数,得到修改后的内核镜像文件。
由上述步骤可见,本发明仅对内核镜像文件中代码段的加载方式进行了修改,有效提高了调试效率。
步骤3、将步骤2得到的内核镜像文件重新打包更新现有内核镜像文件。
步骤4、再次启动系统,当系统执行内核加载函数时,内核hook函数获取内核镜像文件中代码段所占空间大小记为代码段大小,在内核地址空间中分配大小为代码段大小的内存缓冲区记为内核代码缓冲区,将内核镜像文件的代码段复制到内核代码缓冲区中。
步骤5、在内核地址空间中分配大小为代码段扩展大小的内存缓冲区记为影子代码缓冲区,代码段扩展大小为代码段大小与长跳转指令相关语句的长度之和,采用无效的第一操作码填充影子代码缓冲区。
步骤6、根据代码行映射、变量映射及函数映射,将内核镜像文件的代码段逐行复制到影子代码缓冲区中执行。
本发明中,将内核镜像文件的代码段逐行复制到影子代码缓冲区中执行的实现方式为:
步骤6.1、在影子代码缓冲区的起始地址处写入长跳转指令,该长跳转指令使系统跳转到内核状态打印函数的起始地址处,并以纯代码段的方式执行内核状态打印函数。
本发明中,为了保证内核状态打印函数以纯代码段的方式执行,也可将其按照裸函数的方式编译成二进制代码。
步骤6.2、内核状态打印函数获取执行跳转前的指令地址记为第一指令地址。
步骤6.3、根据第一指令地址获取当前函数,并打印内核代码的全局变量及当前函数的局部变量;根据代码行映射、变量映射及函数映射获取第一指令地址对应的代码行记为第一代码行,将第一代码行的下一行代码记为第二代码行,获取第二代码行在内核代码缓冲区中的偏移地址记为第二代码行偏移地址,将第二代码行对应的可执行代码从内核代码缓冲区复制到影子代码缓冲区中的第二指令地址处并完成执行,该第二指令地址为影子代码缓冲区在内核中的起始地址与第二代码行偏移地址之和。
步骤6.4、若第二指令地址不大于影子代码缓冲区与代码段大小之和,则将第二指令地址作为第一指令地址,跳转到第一指令地址后执行步骤6.3;否则完成复制结束当前流程。
由于在内核代码的实际执行过程中存在不按行号顺序执行的情况,因此系统就有可能执行到影子代码缓冲区中的空闲区域,该空闲区域还未复制入可执行代码,因此为了进一步提高本发明的可靠性,本发明构建了内核异常处理函数,并在步骤2中将内核异常处理函数的二进制代码与内核hook函数和内核状态打印函数的二进制代码一起写入第一可用空间,同时在步骤4中当系统执行内核加载函数时内核hook函数首先完成内核异常处理函数的注册。本发明构建的内核异常处理函数的处理方式包括:
步骤7.1、当系统捕获无效操作码异常且无效操作码为第一操作码时,获取异常指令的地址,记为异常无效地址;根据代码行映射、变量映射及函数映射获取异常无效地址对应的内核代码的代码行记为异常代码行;
步骤7.2、将异常代码行的下一个代码行对应的可执行代码在内核代码缓冲区中的偏移地址记为第三代码行偏移地址,将异常代码行的下一个代码行对应的可执行代码从内核代码缓冲区复制到影子代码缓冲区中第三指令地址处,该第三指令地址为影子代码缓冲区在内核中的起始地址与第三代码行偏移地址之和;
步骤7.3、返回异常无效地址处再重新执行。
实施例
本实例中采用本发明提供的一种基于影子代码缓存的内核调试方法实现了Linux内核代码的自动调试,具体包括以下步骤:
S1、建立源代码行到可执行代码的映射。基于内核镜像符号表建立源代码级每行代码到其编译后可执行代码的起始地址和长度之间的映射关系,具体包括:
S1.1、解析内核镜像文件中名为DWARF的数据结构。DWARF是一种广泛用于Unix和类Unix系统的标准调试文件格式,由调试信息条目DIE(Debugging Information Entry)构成的树形结构组成,在DWARF中存在用于描述源代码和机器指令之间映射信息的条目。
S1.2、解析DW_LNE_set_address、DW_LNE_end_sequence等操作码,提取描述行号表(Line Number Table),描述行号表中记录了每行源代码所对应的机器指令地址。
S2、建立内核代码中变量到地址的映射,以确定需要打印的变量的指令地址。
S2.1、解析DWARF数据结构中的DW_TAG_variable条目,该条目包含了变量的名字、类型及作用域等信息。
S2.2、全局变量的DW_TAG_variable条目通常直接在DW_TAG_compile_unit节点下,局部变量和函数参数的DW_TAG_variable条目通常在对应的DW_TAG_subprogram或DW_TAG_lexical_block节点下。
S2.3、每个DW_TAG_variable条目包含一组描述变量详细信息的属性,包括:DW_AT_name用于保存变量的名字,DW_AT_decl_file和DW_AT_decl_line分别用于保存变量定义的文件名和行号,DW_AT_type表示指向描述变量类型DIE的引用,DW_AT_location用于保存变量在内存中的位置信息。全局变量具有固定地址,局部变量和函数参数具有相对于帧指针(FP)或栈指针(SP)的偏移地址。
S3、建立函数到指令起始地址及结束地址的映射。
通过解析DWARF数据结构中的DW_TAG_subprogram节点函数到指令起始地址及结束地址的映射。DW_TAG_subprogram节点描述了每个函数的函数名、地址范围等信息。
S4、修改内核镜像文件中代码段KCS(Kernel Code Section)的加载过程,为代码段创建影子代码缓冲区SCC(Shadow Code Cache),并逐行将代码段复制到SCC中执行。
具体为修改Linux启动代码中的load_kernel内核函数,该内核函数用于将内核镜像文件加载到内存,Linux中load_kernel内核函数通常在/boot/vmlinuz文件中;如果内核镜像文件是压缩文件,则需要修改decompress_kernel内核函数,该内核函数负责将内核镜像文件解压到内存。修改后的步骤如下:
S4.1、解析内核镜像文件,获取其中的代码段,搜索到可用空间,写入load_kernel或decompress_kernel内核函数的hook函数kernelLoaderHooker,创建内核状态打印函数printKernelStatus和内核异常处理函数kernelExceptionHandler,将kernelLoaderHooker、printKernelStatus及kernelExceptionHandler三个函数的二进制代码写入可用空间;然后搜索load_kernel或decompress_kernel内核函数的入口地址,将入口地址写入hook指令,使其执行时先执行kernelLoaderHooker;最后重新打包更新内核镜像文件。
本发明中对内核机制的修改都是通过hook的方式实现的。
S4.2、kernelLoaderHooker的实现如下:
注册内核异常处理函数kernelExceptionHandler;
获取内核镜像文件代码段大小,若内核镜像文件为压缩文件则获取解压后的大小,记为kernelCodeSize;
在内核地址空间分配kernelCodeSize大小的内存缓冲区,此缓冲区记为KCC(Kernel Code Cache);
将KCS内容复制到KCC;
在内核地址空间分配大小为kernelCodeSize与长跳转指令语句长度之和的空间,长跳转指令是跳转到打印最后一行内核代码执行完后状态的代码,即跳转到printKernelStatus的代码段处,将此内存缓冲区记为影子代码缓冲区SCC(Shadow CodeCache)。
将SCC中的每个字节全部填充为特有的一个字节长的无效opcode,以使跳转过程产生异常;
根据建立的源代码行到可执行代码的映射,从KCS中逐行将代码复制到SCC中执行,具体步骤如下:在SCC的起始地址,即入口地址,写入一个长跳转指令,跳转到本实施例所写的内核状态打印函数printKernelStatus的代码段处。此时,printKernelStatus是以没有函数入口和出口的堆栈处理方式的纯代码段,以便于printKernelStatus能够直接使用跳转前代码所在函数的堆栈,进而能够直接访问跳转前代码所在函数的局部变量。再通过压栈的方式传入当前指令指针IP(Instruction Pointer)或指令地址。
S4.3、printKernelStatus的实现如下:
在Linux系统中使用__attribute__((naked))属性编译printKernelStatus函数,使得编译器编译该函数时无需生成Prolog和Epilog代码块,实现以裸函数的方式完成printKernelStatus函数的编译。
通过弹栈方式获取跳转之前的指令地址,记为currentIP;
根据currentIP找到当前函数的范围,打印内核代码全局变量及当前函数局部变量;
获取currentIP对应的代码行号,记为lineNo;
将第lineNo+1行源代码对应的可执行代码从KCC中复制到SCC中的对应地址,记为nextCodeLineIP,即为SCC在内核中的起始地址与第lineNo+1行源代码在KCC中的偏移地址之和;
跳转到nextCodeLineIP。
S4.4、kernelExceptionHandler的实现步骤如下:
如当前异常为Invalid Opcode异常,且异常相关opcode为本实施例指定的特有无效opcode,则获取异常指令地址,即该无效opcode的地址,记为exceptionCodeIP;找到exceptionCodeIP对应的源代码行号,记为exceptionLineNo,将第exceptionLineNo+1行源代码对应的可执行代码从KCC中复制到SCC中的对应地址,记为nextCodeLineIP,nextCodeLineIP 为SCC在内核中的起始地址与第exceptionLineNo+1行源代码在KCC中的偏移地址之和;返回异常处理结果为从异常发生处重新执行。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于影子代码缓存的内核调试方法,其特征在于,包括以下步骤:
步骤1、基于内核镜像文件中的符号表,建立内核代码的代码行与编译后的可执行代码中该代码行的地址空间之间的映射关系记为代码行映射,建立内核代码中变量与其在可执行代码中地址之间的映射关系记为变量映射,建立内核代码中函数与其在可执行代码中起始地址及结束地址之间的映射关系记为函数映射;
步骤2、启动系统解析内核镜像文件获取其中的代码段,将当前可用内存空间作为第一可用空间,为内核加载函数构建hook函数记为内核hook函数,以内核加载函数的入口地址作为内核hook函数的参数,构建内核状态打印函数,将内核hook函数及内核状态打印函数的二进制代码写入第一可用空间;将修改后的内核镜像文件重新打包更新内核镜像文件;
步骤3、再次启动系统,当系统执行内核加载函数时内核hook函数获取内核镜像文件中代码段所占空间大小记为代码段大小,在内核地址空间中分配大小为代码段大小的内存缓冲区记为内核代码缓冲区,将内核镜像文件的代码段复制到内核代码缓冲区中;
步骤4、在内核地址空间中分配大小为代码段扩展大小的内存缓冲区记为影子代码缓冲区,代码段扩展大小为代码段大小与长跳转指令语句的长度之和,采用无效的第一操作码填充影子代码缓冲区;
步骤5、根据代码行映射、变量映射及函数映射,将内核镜像文件的代码段逐行复制到影子代码缓冲区中执行,实现内核代码的调试。
2.根据权利要求1所述的内核调试方法,其特征在于,所述步骤2中所述内核状态打印函数以纯代码段的方式执行。
3.根据权利要求2所述的内核调试方法,其特征在于,所述内核状态打印函数采用裸函数的方式完成编译。
4.根据权利要求3所述的内核调试方法,其特征在于,所述步骤5中所述将内核镜像文件的代码段逐行复制到影子代码缓冲区中执行的实现方式为:
步骤5.1、在影子代码缓冲区的起始地址处写入长跳转指令,使系统跳转到内核状态打印函数的起始地址处;
步骤5.2、内核状态打印函数获取执行跳转前的指令地址记为第一指令地址;
步骤5.3、根据第一指令地址获取当前函数,并打印内核代码的全局变量及当前函数的局部变量;获取第一指令地址对应的代码行记为第一代码行,将第一代码行的下一行代码记为第二代码行,获取第二代码行在内核代码缓冲区中的偏移地址记为第二代码行偏移地址,将第二代码行对应的可执行代码从内核代码缓冲区复制到影子代码缓冲区中的第二指令地址处并完成执行,该第二指令地址为影子代码缓冲区在内核中的起始地址与第二代码行偏移地址之和;
步骤5.4、若第二指令地址不大于影子代码缓冲区与代码段大小之和,则将第二指令地址作为第一指令地址,跳转到第一指令地址后执行步骤5.3;否则完成复制结束当前流程。
5.根据权利要求1所述的内核调试方法,其特征在于,所述的内核调试方法还包括:构建内核异常处理函数,并在步骤2中将内核异常处理函数的二进制代码与内核hook函数和内核状态打印函数的二进制代码一起写入第一可用空间,同时在步骤3中当系统执行内核加载函数时内核hook函数首先完成内核异常处理函数的注册。
6.根据权利要求5所述的内核调试方法,其特征在于,所述内核异常处理函数的处理方式为:
步骤6.1、当系统捕获无效操作码异常且无效操作码为第一操作码时,获取异常指令的地址,记为异常无效地址;获取异常无效地址对应的内核代码的代码行记为异常代码行;
步骤6.2、将异常代码行的下一个代码行对应的可执行代码在内核代码缓冲区中的偏移地址记为第三代码行偏移地址,将异常代码行的下一个代码行对应的可执行代码从内核代码缓冲区复制到影子代码缓冲区中第三指令地址处,该第三指令地址为影子代码缓冲区在内核中的起始地址与第三代码行偏移地址之和;
步骤6.3、返回异常无效地址处再重新执行。
7.根据权利要求3所述的内核调试方法,其特征在于,所述内核状态打印函数采用Linux系统中的__attribute__((naked))属性完成编译。
8.根据权利要求4所述的内核调试方法,其特征在于,所述步骤5.2中所述内核状态打印函数获取执行跳转前的指令地址的方式为:通过弹栈方式获取跳转前的指令地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311508788.2A CN117234953B (zh) | 2023-11-14 | 2023-11-14 | 一种基于影子代码缓存的内核调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311508788.2A CN117234953B (zh) | 2023-11-14 | 2023-11-14 | 一种基于影子代码缓存的内核调试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117234953A CN117234953A (zh) | 2023-12-15 |
CN117234953B true CN117234953B (zh) | 2024-01-26 |
Family
ID=89096998
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311508788.2A Active CN117234953B (zh) | 2023-11-14 | 2023-11-14 | 一种基于影子代码缓存的内核调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117234953B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118519915B (zh) * | 2024-07-22 | 2024-09-27 | 北京麟卓信息科技有限公司 | 一种基于全局内存保护的内核内存访问越界的调试方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101281488A (zh) * | 2007-04-06 | 2008-10-08 | 上海宇梦通信科技有限公司 | Linux操作系统的内核调试方法 |
CN105159819A (zh) * | 2015-09-01 | 2015-12-16 | 汉柏科技有限公司 | 一种记录内核异常栈及调试信息的方法及系统 |
CN106909437A (zh) * | 2015-12-23 | 2017-06-30 | 华为技术有限公司 | 虚拟机内核的保护方法及装置 |
CN116150739A (zh) * | 2023-03-01 | 2023-05-23 | 软安科技有限公司 | 一种基于关键地址动态保护的栈溢出自动防御方法 |
CN116795726A (zh) * | 2023-08-25 | 2023-09-22 | 麒麟软件有限公司 | 一种在线调试Linux内核的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050216895A1 (en) * | 2004-03-23 | 2005-09-29 | Tran Hieu T | Method and apparatus for remote debugging of kernel and application software |
CN113986449A (zh) * | 2021-09-17 | 2022-01-28 | 华中科技大学 | 一种面向容器的Linux内核虚拟化系统及方法 |
-
2023
- 2023-11-14 CN CN202311508788.2A patent/CN117234953B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101281488A (zh) * | 2007-04-06 | 2008-10-08 | 上海宇梦通信科技有限公司 | Linux操作系统的内核调试方法 |
CN105159819A (zh) * | 2015-09-01 | 2015-12-16 | 汉柏科技有限公司 | 一种记录内核异常栈及调试信息的方法及系统 |
CN106909437A (zh) * | 2015-12-23 | 2017-06-30 | 华为技术有限公司 | 虚拟机内核的保护方法及装置 |
CN116150739A (zh) * | 2023-03-01 | 2023-05-23 | 软安科技有限公司 | 一种基于关键地址动态保护的栈溢出自动防御方法 |
CN116795726A (zh) * | 2023-08-25 | 2023-09-22 | 麒麟软件有限公司 | 一种在线调试Linux内核的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117234953A (zh) | 2023-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6948164B2 (en) | Method and system for modifying executable code to add additional functionality | |
US5732210A (en) | Use of dynamic translation to provide fast debug event checks | |
US5325531A (en) | Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines | |
US5182806A (en) | Incremental compiler for source-code development system | |
US6993754B2 (en) | Annotations to executable images for improved dynamic optimization functions | |
US5313387A (en) | Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers | |
US5170465A (en) | Incremental-scanning compiler for source-code development system | |
US5201050A (en) | Line-skip compiler for source-code development system | |
US5193191A (en) | Incremental linking in source-code development system | |
US6795963B1 (en) | Method and system for optimizing systems with enhanced debugging information | |
US8448152B2 (en) | High-level language, architecture-independent probe program compiler | |
US20080127113A1 (en) | Method and system for implementing watchpoints | |
US7036118B1 (en) | System for executing computer programs on a limited-memory computing machine | |
JPH0836488A (ja) | ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置 | |
US7823140B2 (en) | Java bytecode translation method and Java interpreter performing the same | |
CN117234953B (zh) | 一种基于影子代码缓存的内核调试方法 | |
US7523446B2 (en) | User-space return probes | |
US6901583B1 (en) | Method for testing of a software emulator while executing the software emulator on a target machine architecture | |
US6330691B1 (en) | Use of dynamic translation to provide breakpoints in non-writeable object code | |
US5301327A (en) | Virtual memory management for source-code development system | |
CN111400256B (zh) | 一种应用程序调用资源文件的方法及装置 | |
US7213123B2 (en) | Method and apparatus for mapping debugging information when debugging integrated executables in a heterogeneous architecture | |
US20180364991A1 (en) | Method and system for preparing code to be executed by programmable control devices | |
EP0406028A2 (en) | Incremental compiler for source code development system | |
CN116775127B (zh) | 一种基于RetroWrite框架的静态符号执行插桩方法 |
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 |