xixitalk's snippet

Post Longer Than 140 Characters Tweets

Jul 9, 2016 - Comments

malloc封装检查越界

malloc封装检查越界

上周出差,出现一例死机现场在libc的malloc函数里,分析malloc管理内存被擦写了,想来应该是用户使用malloc越界了。但是问题难复现,程序运行大于6小时出现,共抓取了3个现场,死机位置类似,可以定位某个线程的while循环。所以现场封装了一个malloc函数用于检测内存是否越界。代码如下

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  size | BEGIN_MAGIC |      USER      BUFFER      | END_MAGIC |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

每次内存申请多申请12个字节,前4个字节保存用户真实size,第4-8个字节保存魔术字,最后4个字节也保存魔术字,起始地址+8是用户可见的空间。

很快就定位某个函数使用缓存越界了。


知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

Tags: bugfix

UINT32引起的死循环 函数栈破坏检查

comments powered by Disqus