基本原理:
memcheck实现了一个仿真的CPU,被监控的程序被这个仿真CPU解释执行,从而有机会在所有的内存读写指令发生的时候,检测地址的合法性和读操作的合法性。
一,如何知道那些地址是合法的(内存已分配)?
维护一张合法地址表(
Valid-address (A) bits
),当前所有可以合法读写(已分配)的地址在其中有对应的表项。该表通过以下措施维护
全局数据(data, bss section)--在程序启动的时候标记为合法地址
局部变量--监控sp(stack pointer)的变化,动态维护
动态分配的内存--截获 分配/释放 内存的调用 :
malloc
,
calloc
,
realloc
,
valloc
,
memalign
,
free
,
new
,
new[]
,
delete
and
delete[]
系统调用--截获mmap映射的地址
其他--可以显示知会memcheck某地字段是合法的
二,如何知道某内存是否已经被赋值?
维护一张合法值表(
Valid-value (V) bits
),指示对应的bit是否已经被赋值。因为虚拟CPU可以捕获所有对内存的写指令,所以这张表很容易维护。
-memcheck无法检测global和stack上的内存溢出,因为溢出的地方也在
Valid-address (A) bits中。这是由memcheck 的工作原理决定的。
-慢,20到30倍,被虚拟CPU解释一遍,当然慢
-内存占用高,因为要维护两张表格,而这两张表的维度正比于程序的内存
一、基于CRT的内存泄漏检测
windows 下,C运行时库CRT(C Run-time Library),Standard C++ Library包含CRT。CRT将 malloc 和 free 函数映射到它们的调试版本,即 _malloc_dbg 和 _free_dbg,这两个函数将跟踪内存分配和释放。
原理
:Debug版本的 CRT定义了一套调试版本的内存分配函数(如_malloc_dbg)。当你包含了CRTDBG.h后,如果当前是Debug工程,且定义了_DEBUG宏,这时,malloc函数会被被映
valgrind
研究记录
一. 介绍
可以用来做内存检测工具、性能分析工具,基本
原理
是对目标二进制文件进行动态二进制翻译,翻译得到体系架构无关的中间表示(vex),然后在翻译得到的中间表示中插入自己的监控代码(instrument),最后再把修改过的vex编译成主机机器码执行,可以做到指令级别的监控,目标程序就相当于运行在一个虚拟的cpu上。
二. 整体架构
整个程序有个共用的入口,其它实现特定功能的模块都作为它的一个tool(
mem
check
、lackey),入口部分主要完成参数解析还有目标程序的加载,t
Mem
check
mem
check
用于检测程序中内存管理存在的问题。它检查所有对内存的读/写操作,并截取所有的malloc/new/free/delete调用。因此
mem
check
工具能够探测到以下问题:
1)使用未初始化的内存
2)读/写已经被释放的内存
3)读/写内存越界
4)读/写不恰当的内存栈空间
5)内存泄漏
6)使用malloc/new/new[]和free/delete/delete[]不匹配。
7)src和dst的重叠
–tool=
mem
check
指定
Valgrind
使用的工具。Valgr
valgrind
支持的工具:
mem
check
addr
check
cachegrind Massid helgrind Callgrind
运行时必须指明想用的工具,如果省略工具名,默认运行
mem
check
1,
mem
check
1),使用未初始化的内存
2),读/写已经被释放的内存
3),读/写内存越界
4),读/写不恰当的内存栈空间
5),内存泄露,指向一块内存的指针永远
valgrind
--help命令用于获取关于
valgrind
工具的帮助信息。它会显示如何使用
valgrind
以及可以使用的选项和参数的详细说明。根据提供的引用、和,这里没有明确提及
valgrind
--help命令的具体内容。因此,无法准确地回答关于
valgrind
--help命令的具体信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [
valgrind
基本功能介绍、基础使用方法说明](https://blog.csdn.net/qq_16933601/article/details/127834883)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]