Linux内核调试-代码段设置为只读

使用场景

有时候设备死机的直接原因是代码段被改写,导致指令异常,而这种情况常见的SLUB DEBUG、kasan等内存检测机制是无法检测到的。可以尝试将代码段设置为只读,这样就在改写代码段的时候直接触发异常,收集到真正的死机点。

使用方法

在ARMv7的平台下,可以开启内核的以下配置项,将代码段变成只读

  • CONFIG_ARM_KERNMEM_PERMS=y:将内核代码段设置为"只读+可执行"
  • CONFIG_DEBUG_RODATA=y:是CONFIG_ARM_KERNMEM_PERMS子选项,作为默认值
  • CONFIG_DEBUG_SET_MODULE_RONX=y:将内核模块地址段设置为"只读+可执行"
  • CONFIG_ARM_PTDUMP=y:打印页表布局,还需要修订dump接口
  • CONFIG_DEBUG_PAGEALLOC=y:将释放内存从页表中移除,来检测后使用,原来已开启;
  • CONFIG_PAGE_POISONING=y:

实际案例

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容