最近做毕设用到了mbed Uvisor,我在一篇关于uvisor 的文档中看见关于内存保护的示意图
其中不同box 之间内存不能直接访问,这是不是就意味着uvisor可以防止 一个BOX中出现内存溢出时影响其他BOX的内存区域,或者说在PUBLIC box中不能直接访问别的BOX 内存
基于此我做了一下测试
我发现并非如此,在PUBLIC BOX我可以随意读写 整个SRAM中的任何一个地址单元。
我不太清楚测试的方法是否正确
测试板卡 :K64
测试步骤
新建两个BOX A B,
A是public BOX
B 是private BOX
其中0x1fff4296这个内存区间 属于B
我在A中 新建一个变量 使其内存为0x1fff4296,并进行赋值。
通过GDB查看内存区域,我发现对应0x1fff4296被重新赋值了。这也就意味着在public BOX中,其实是可以虽然读写 pivate BOX的内存的。但这似乎又和上图里面的机制冲突。
希望有人解答我的疑问,
Thanks!
抱歉回复晚了,
请问 “0x1fff4296“ 的性质是什么?如何确定其属于B的物理空间地址?
推荐的验证方式:
1. B 中分配内存空间,初始化”数据标识“
2. 其他未授权 CLIENT 尝试访问读写此地址,读出时判断是否为“数据标识”
3. 在B中判断是否 空间“数据标识”被改写
另外,也可以直接参考 https://github.com/ARMmbed/mbed-os-example-uvisor-number-store