ARM内核是如何分辨出写内存越界的?

2019-10-15 02:23发布

比如在函数里开个数组,故意写越界,然后32就会跳到hardfault。是什么硬件在做内存越界的保护?难道是CPU能自己分析栈区的情况吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
zc123
1楼-- · 2019-10-15 02:43
CPU是分辨不出,内存越界并不一定触发hardfault,触发hardfault的真实原因是内存越界写入到了某些保护区域(可能性很小)或者造成了逻辑错误(可能性很大,如破坏了堆栈,函数返回时R14寄存器数据异常, 导致程序跳转失败等), 而内存越界本身只是个错误,而且是不会百分百发生的随机错误(曾经遇到过上电正常,工作一段时间触发异常的,后来排查就是指针越界), 所以必须避免这种问题。
其实你可以定义两个全局变量测试下:
int a[10] = "hello";
int b[10] = "world";
然后在main函数里赋值a超过10字节,在打印出来,这时是不会触发异常的。
正点原子
2楼-- · 2019-10-15 07:17
表示不清楚
嗷大喵
3楼-- · 2019-10-15 09:23
去看一下 stm的手册 首页的cpu结构  一切就都知道了
zc123
4楼-- · 2019-10-15 13:09
本帖最后由 zc123 于 2017-2-14 16:35 编辑

————————————
xinxian
5楼-- · 2019-10-15 15:28
 精彩回答 2  元偷偷看……
shikihane
6楼-- · 2019-10-15 18:58
zc123 发表于 2017-2-10 16:12
CPU是分辨不出,内存越界并不一定触发hardfault,触发hardfault的真实原因是内存越界写入到了某些保护区域( ...

谢谢

一周热门 更多>