您的位置:首页 > 其它

内存检测工具Dr. Memory的使用

2016-06-10 11:47 411 查看
Dr. Memory是一个内存调试工具,它是一个开源免费的内存检测工具,它能够及时发现内存相关的编程错误,比如未初始化访问、内存非法访问、数组越界读/写、以及内存泄露等。它可以在Linux、Windows、Mac OS和Android操作系统上使用。关于Dr. Memory的更多说明可以参考其主页:http://drmemory.org/

下面简单说下其在Windows7上的使用过程:

1. 从https://github.com/DynamoRIO/drmemory/wiki/Downloads上下载最新版本1.10.1的压缩包DrMemory-Windows-1.10.1-3.zip (若官网下不下来可以从http://download.csdn.net/detail/fengbingchun/9545410下载),解压缩;

2. 新建DrMemory控制台工程,测试代码如下:

#include <iostream>

void test1(); // 内存泄露
void test2(); // 非法访问
void test3(); // 未初始化读
void test4(); // Heap 操作参数错误(Invalid Heap Argument)

int main()
{
// reference: http://www.ibm.com/developerworks/cn/linux/1309_liuming_drmemory/ test4();

std::cout << "ok" << std::endl;
return 0;
}

void test1()
{
char *ptr;
for (int i = 0; i<100; i++) {
ptr = (char*)malloc(i);

if (i % 2) free(ptr);
}
}

void test2()
{
char *x = (char*)malloc(8);
char c = *(x + 8); // buffer overlow
free(x);
c = *x; // read free memory
}

typedef struct T_ {
char a;
char b;
}T;

void test3()
{
T a, b;
char x;
a.a = 'a';
a.b = 'b';
b.a = x; // error C4700:使用了未初始化的局部变量x,若使vs2013能够正常编译,需将配置属性中的C/C++ SDL检查关闭
if (b.a == 10)
memcpy(&b, &a, sizeof(T));
}

void test4()
{
char * ptr = NULL;
ptr = new char;
free(ptr);
free(ptr); //
}


3. 将DrMemory解压缩后存放到E:\GitCode\DrMemory-Windows-1.10.1-3 下,通过命令提示符打开bin/drmemory.exe或bin64/drmemory.exe,然后输入命令如下图所示,目前DrMemory仅能检测32位程序,调用64位程序检测不出任何问题,如图1中红框所示。执行完后会在E:\GitCode\DrMemory-Windows-1.10.1-3\drmemory\logs\DrMemory-DrMemoryTest[dbg_x64_vc12].exe.972.000目录下生成相应的results.txt文本文件,里面记录了更多的细节。



4. test1()的执行结果如下图:



test2()的执行结果如下图:



test3()的执行结果如下图:



test4()的执行结果如下图:



GitHubhttps://github.com/fengbingchun/Messy_Test
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: