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

news/2024/5/20 12:24:33

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 overlowfree(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()的执行结果如下图:


GitHub:https://github.com/fengbingchun/Messy_Test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/29325.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis中#{}和${}的区别

------------------------siwuxie095 MyBatis 中 #{} 和 ${} 的区别 1、在 MyBatis 的映射配置文件中&#xff0c;动态传递参数有两种方式&#xff1a; &#xff08;1&#xff09;#{} 占位符 &#xff08;2&#xff09;${} 拼接符 2、#{} 和 ${} 的区别 &#xff08;1&#xff…

列表框操作函数集合

1 /*列表框互相操作函数集 */23// 描述: 添加不重复列表框元素4functionselAdd( srcList, dstList )5 {6varselectedIndex newArray();7varcount 0 ;89for( i0 ; i < srcList.options.length; i ){1011if( srcList.options[i].selected ){1213selectedIndex[count] i;14…

ipython --pandas

d定义: pandas是一个强大的Python数据分析的工具包。 pandas是基于NumPy构建的。 安装方法: pip install pandas import pandas as pd pandas的主要功能 具备对其功能的数据结构DataFrame、Series 集成时间序列功能 提供丰富的数学运算和操作 灵活处理缺失数据 Series 定义:Ser…

linux批处理mysql数据库_使用批处理对MySQL进行数据批量操作

批处理是一种非交互式运行MySQL程序的方法&#xff0c;如同您在MySQL中使用的命令一样&#xff0c;你仍然将使用这些命令。为了实现批处理&#xff0c;您重定向一个文件到MySQL程序中&#xff0c;首先我们需要一个文本文件&#xff0c;这个文本文件包含有与我们在MySQL中输入的…

SpringMVC学习手册(三)------EL和JSTL(上)

1.含义 EL: Expression Language , 表达式语言JSTL: Java Server Pages Standard Tag Library, JSP标准标签库 2.测试项目构建 2.1 复制JSTL的标准实现 复制Tomcat中webapps\examples\WEB-INF\lib下的两个jar包到新建项目目录的WEB-INF\lib下2.2 在JSP文件中使用tagli…

python框架之Flask基础篇(一)

一.第一个hello world程序 # codingutf-8 from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello World!if __name__ __main__:app.run(debugTrue) 1.app参数的设置&#xff1a; 以下几种方式全部拿debug模式举例&#xff1a; .方式一&…

java内存模型和线程安全

转载于:https://www.cnblogs.com/Michael2397/p/8397451.html

名图怎么弄云服务器_云服务器购买了宽带的速度怎么测试?

西昆云详细说一下企业租用云服务器搭建网站&#xff0c;很多新手站长会把带宽当成宽带来测试&#xff0c;比如在自己的云服务器上下载东西测试速度&#xff0c;一旦下载的东西慢了就觉得有问题&#xff0c;其实这是不准确的&#xff0c;那么如何查看云服务器的带宽速度呢&#…