The invention provides an implementation method of a memory detection tool, which provides a kernel detection tool, and a processor provides a user interval and a system interval. The system interval is divided into multiple regions, including a dynamic memory region, a module region, a kernel region and a fixed mapping region. The inner core region is provided with a kernel code region, the tail address of the kernel code region and the first place of the module region The address space between addresses is less than 32MB; the continuous address space in user interval is divided into kernel detection area, which is set at the junction of user interval and system interval; the kernel detection area is set as the mapping area of system interval, and the memory detection tool detects the corresponding current kernel detection area according to the detection flag in the currently running program code of the system The location of the memory address of the program code to determine whether the current memory access is legal. The invention has the advantages that the 32-bit arm architecture can support the memory detection tool.
【技术实现步骤摘要】
一种内存检测工具的实现方法
本专利技术涉及内存检测
,尤其涉及一种内存检测工具的实现方法。
技术介绍
KASAN(KernelAddressSanitizer),是Linux内核中的一个动态的内存检测工具,能够在运行态下检测全局变量、堆、栈等数据中存在的越界访问(out-of-bounds)、释放后访问(use-after-free)、内核对用户空间的非法访问等多种内存异常错误,并且能给出详细的错误报告,包括异常访问的函数、调用栈、异常地址等信息,便于程序调试(debug)。现有技术中的KASAN在4.4版本的Linux内核被合入mainline(Linux内核发展的主线)。此外,KASAN的编译也至少需要GCC4.9.2版本以上的编译器支持。但是要支持更多的KASAN特性,需要使用5.0以上版本的GCC编译器。“影子内存”也是内核空间可以访问的一部分内存,因此“影子内存”也需要被映射到内核地址空间上去。以64位ARM(AdvancedRISCMachines)架构处理器为例,启动boot程序的时候可以KASAN地址空间划分,如图1所示。需要说明的是,“影子内存”是可用内存的1/8,因此可以根据“影子内存”和可用内存的比例关系得知一个字节的影子内存可以标记八个字节的可用内存访问状态。现有技术中的影子内存的标记状态一般有:1、用0表示从当前地址开始连续8个字节的内存都是可以访问的;2、N=1~7表示从当前地址开始的连续N个字节的内存是可以访问的,剩余的字节数是不可访 ...
【技术保护点】
1.一种内存检测工具的实现方法,其特征在于,提供一内核检测工具,应用于32位ARM处理器中,所述处理器提供用户区间和系统区间,所述系统区间被划分为多个区域,所述区域包括动态内存区域、模块区域、内核区域和固定映射区域;/n所述内核区域设置有内核代码区域,所述内核代码区域的尾地址与所述模块区域的首地址之间的地址空间小于32MB;/n于所述用户区间中划分连续的地址空间为内核检测区域,所述内核检测区域设置在用户区间和所述系统区间的交界处;/n将所述内核检测区域设置为所述系统区间的映射区域,所述内存检测工具根据系统当前运行的程序代码中的检测标志检测所述内核检测区域中对应当前所述程序代码所在的内存地址的位置来判断当前的内存访问是否合法。/n
【技术特征摘要】 【专利技术属性】
1.一种内存检测工具的实现方法,其特征在于,提供一内核检测工具,应用于32位ARM处理器中,所述处理器提供用户区间和系统区间,所述系统区间被划分为多个区域,所述区域包括动态内存区域、模块区域、内核区域和固定映射区域;
所述内核区域设置有内核代码区域,所述内核代码区域的尾地址与所述模块区域的首地址之间的地址空间小于32MB;
于所述用户区间中划分连续的地址空间为内核检测区域,所述内核检测区域设置在用户区间和所述系统区间的交界处;
将所述内核检测区域设置为所述系统区间的映射区域,所述内存检测工具根据系统当前运行的程序代码中的检测标志检测所述内核检测区域中对应当前所述程序代码所在的内存地址的位置来判断当前的内存访问是否合法。
2.如权利要求1所述的内存检测工具的实现方法,其特征在于,所述用户区间、所述动态内存区域、所述模块区域、所述内核区域和所述固定映射区域依次相邻设置。
3.如权利要求1所述的内存检测工具的实现方法,其特征在于,所述用户区间还包括用户区域,所述用户区域的地址空间为2944MB;
所述内核检测区域的地址空间为128MB;
所述动态内存区域的地址空间为240MB;
所述模块区域的地址空间为16MB;
所述内核区域的地址空间为760MB;
所述固定映射区域的地址空间为3MB。
4.如权利要求1所述的内存检测工具的实现方法,其特征在于,所述内核检测区域的地址空间为所述用户区间的地址空间的1/24。
5.如权利要求1所述的内存检测工具的实现方法,其特征在于,在所述系统启动内核前,在系统页表存放路径中建立二级页表,所述内存检测工具根据所述二级页表对所述内核检测区域进行第一次初始化,使得所述内存检测工具的检测结果均为合法。
6.如权利要求5所述的内存检测工具的实现方法,其特征在于,在所述系统启动内核的过程中,所述内存检测工具对所述内核检测区域进行第二次初始化,所述内存检测工具判断当前的内存访问是否合法。
技术研发人员:曾涛,潘建新,
申请(专利权)人:晶晨半导体上海股份有限公司,
类型:发明
国别省市:上海;31
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。