1.MPU
2.使用MPU
2.1对于没有OS系统,MPU可以被编程为静态配置。
- 将RAM/SRAM区域设置为只读,避免重要数据被意外破坏。
- 将栈底部的一部分RAM/SRAM区域设置为不可访问的,以检测栈溢出。
- 将RAM/SRAM区域设置为XN(永不执行),避免代码注入攻击。
- 定义可被系统级缓存(2级)或存储器控制器使用的存储器属性配置。
2.2对于有OS系统,在每次上下文切换时都可以配置MPU,每个应用任务都有不同的MPU配置。
- 定义存储器访问权限,使得应用任务只能访问分配给自己的栈空间,因此可以避免因为栈泄露而破坏其它栈。
- 定义存储器访问权限,使得应用任务只能访问有限的外设。
- 定义存储器访问权限,使得应用任务只能访问自己的数据或自己的程序数据(设置起来会比较麻烦,因为多数情况下OS和程序代码是一起编译的,因此数据在存储器映射中也可能是混在一起的)。