- 增加魔术,确认是越界还是已经释放的内存被非法重用。
- 重写malloc函数,在malloc时头部多申请一些内存,存入0x12345678和当前线程号,在尾部也放入一个魔术;在free的时候检验魔数值,如果不是malloc的值就调用mprobe强制glibc对内存块进行完整性检查。
- 在发生死机时,我们可以向前偏移,根据上一块内存的大小,确认malloc尾部的魔数是否被修改了,如果被修改表示上一块内存发生了越界访问,再根据线程号和大小找到前一块内存申请的位置进行代码分析;如果没被修改则应该是free之后使用内存而引发的踩内存,非越界死机。
定义头结构体:
typedef struct stHeadInfo
{
int i32MagicNum;
int i32Pid;
void* pBufBase;
int