对付内存改写问题的银弹



内存改写问题一直是软件开发中最难搞的问题之一。
在有虚拟地址空间管理的OS中,比如linux、windows等,应用程序出现内存改写最坏的情况是应用程序蹦掉而已,不会对系统造成很大危害。
但是在没有虚拟地址空间管理的RTOS中,如果应用程序修改了系统核心内存整个系统就嗝屁了。
如果软件工程真的有银弹,我首先要拿来对付内存改写问题。

出现内存改写常见的原因有数据越界、野指针、不同类型指针之间的强制转换等。

系统数据结构可能需要一些方法检测自己是否被修改了。
比如经常看到结构体里面会有一些较magic的成员,就是干这事的;
再比如在系统的双向链表中检查链表是否完成等。

内存修改导致的结果通过时乱死、不一定死在哪些线程,有时候不知道从哪里查起,只能从内存数据分析中寻找一些线索了。

终究原因是有些RTOS的地址映射是直接使用TLB固定映射,没有启用页表管理。在速度方面固定TLB效率上会比页表映射高一些,但问题多的去了。
系统程序和应用程序共享同一个地址空间,使得应用程序可以访问到系统程序的数据。
模块化或许是减少内存改写问题的银弹之一,但是系统模块化至少还要等上一年半。在这之前不得不面对频繁的内存改写问题。
不知道H公司的VRP系统这样解决这样的问题,听闻也很难搞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值