内存越界定位magic number

Posted 叮咚咕噜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存越界定位magic number相关的知识,希望对你有一定的参考价值。

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

定义头结构体:

typedef struct stHeadInfo
{
	int i32MagicNum;
	int i32Pid;
	void* pBufBase;
	int size;  
}stHeadInfo;

malloc实现:

void* memMallocMagic(int size)
{
	int i32AllocSize;
	int i32HeadSize;

	void* pBufBase;
	void* pBufData;

	stHeadInfo* pBufHead;


	i32HeadSize = sizeof(stHeadInfo);

	i32AllocSize = i32HeadSize + size;

	pBufBase = malloc(i32AllocSize);

	pBufData = (void*)((char*)pBufBase + i32HeadSize);

	pBufHead = (stHeadInfo*)pBufBase;

	pBufHead->i32MagicNum = 0x12345678;
	pBufHead->i32Pid = gettid();
	pBufHead->pBufBase = pBufBase;
	pBufHead->size = i32AllocSize;

	return pBufData;
}

以上是关于内存越界定位magic number的主要内容,如果未能解决你的问题,请参考以下文章

Asan快速定位内存越界内存泄漏

Asan快速定位内存越界内存泄漏

踩内存问题定位手段汇总

内存越界定位mprotect

内存越界定位MALLOC_CHECK_

随手记——使用GDB定位内存越界问题