KASAN是KernelAddressSanitizer的缩写,它是一个动态检测内存错误的工具,主要功能是检查内存越界访问和使用已释放的内存等问题。KASAN集成在Linux内核中,随Linux内核代码一起发布,并由内核社区维护和发展。本文简要介绍KASAN的原理及使用方法。一、KASAN的原理和使用方法1.如何打开KASAN功能Kerneldefconfig增加如下配置:由于1/8的内存用于shadowmemory,可用内存会减少1/8,例如8GB的内存,打开KASAN后,MemTotal约为.72GB。C:\Usersadbshell"cat/proc/meminfo
grepMemTotal"MemTotal:kB2.KASAN原理概述KASAN利用额外的内存标记可用内存的状态,这部分额外的内存被称作shadowmemory(影子区),KASAN将1/8的内存用作shadowmemory。使用特殊的magicnum填充shadowmemory,在每一次load/store内存的时候检测对应的shadowmemory确定操作是否valid。连续8bytes内存(8bytesalign)使用1byteshadowmemory标记。如果8bytes内存都可以访问,则shadowmemory的值为0;如果连续N(1=N=7)bytes可以访问,则shadowmemory的值为N;如果8bytes内存访问都是invalid,则shadowmemory的值为负数。图片摘自