求教:有关内存改写的调试手段及定位方法!小弟先抛砖引玉

gunj 2006-07-21 10:56:51
vxworks系统下:
内存的改写,可能上块顺序改写,也可能是指针飞改。
各位大侠有啥好的方法来找出改写的源头呢?(可以有添加调试信息及保护代码,假设我们可以修改操作系统代码)

我先来一个简单的:
1,对付野指针(释放后继续使用的),修改释放函数,在释放函数return前,将该指针赋值为无效地址(如0xffffffff之类),当该指针再次被使用时,就会引发数据异常,从而调用栈也有了。



各位大侠,请继续!
...全文
378 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodluckyxl 2006-07-23
  • 打赏
  • 举报
回复
楼主的目标代码的内存修改追踪
通常手段借助于调试IDE的对软件调试中断的条件支持
如果支持存储内容修改中断的条件
那么ok 可以通过查看跟踪堆栈过程看到最终调用的函数和代码
mLee79 2006-07-23
  • 打赏
  • 举报
回复
不是说了么, 自己管理的内存, 想什么时候查内存错误都可以, 不过一般都只在 free 的时候检查当前的内存块, 在程序退出的时候把所有的检查一遍, 在怀疑有问题的代码后面也顺便检查了一下, 有毛病的时候就打出内存分配的文件名行号,序号, 大小等等东西 ,到现在还没有遇到过什么内存的问题 ...
mLee79 2006-07-22
  • 打赏
  • 举报
回复
通常的时候都是自己管理内存的, 一般的越界啊, 泄漏什么的都还是比较好查..
gunj 2006-07-22
  • 打赏
  • 举报
回复
的确,一般的越界,泄漏是比较好查的。
但我们假设,代码规模很大(上百万行),开发不可能一个人完成,虽然有编程规范的约束,
仍然不能杜绝出错的可能。
那么这个时候,我们就应该从另一个方法来加以保护,即在内存发生错误的时候,快速即时
的将问题定位出来。
既然情况已经发生了,采用什么样的手段,添加什么样的调试代码,从而能够将各种内存改写
的问题迅速定位出来,是这个帖子讨论的重点,还是请各位高手不吝赐教!


pigsanddogs(我爱吃猪肉,但是长不胖,为什么??) 说的有道理,我们可以对分配的内存添加
头部保护结构(含安全边界值,文件名,行号等),以此来在malloc,free时判断内存的合法性。但这种情况对内存飞改的情况作用就很有限了。
jixingzhong 2006-07-22
  • 打赏
  • 举报
回复
1 指针定义时候初始化
2 操作指针时候检查指针有效性
3 指针释放后置空
jixingzhong 2006-07-22
  • 打赏
  • 举报
回复
非法操作内存只能在一定程度上去预防,
却是不可能杜绝的,(能杜绝就没有黑客存在的空间了) ...
关键是养成良好的编程习惯 ...
pigsanddogs 2006-07-21
  • 打赏
  • 举报
回复
重载new, new[], delete, delete[], VirtualAlloc, VirtualFree等函数
建立一个类
struct CLog
{
string file;
int fileline;
};
建立一个全局的map<size_t, CLog>对象.
分配的重载时候象map中插入new的地址, 哪个原文件, 代码行.
释放的重载释放掉map中的对应的size_t地址.

最后类的虚构的时候把map的trace打映出来, 可有效的检测类村泄露
Dong 2006-07-21
  • 打赏
  • 举报
回复
我觉得垃圾收集和异常处理会是非常好的内存管理方式

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧