<!-- [if !mso]>
<mce:style><!
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
p\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
v\:textbox {display:none;}
--><!-- [endif]--><!-- [if !ppt]--><!-- [endif]-->
实际运行环境中经常比较困扰的问题是内存产生轻微越界,但是并没有立刻产生问题, 给调查带来很大难度。
如果程序问题调查没有头绪,可以借助 Electric Fence (简称 Efence )工具检查内存问题并产生 CORE 文件,比较精确的定位问题场所。
<!-- [if !mso]>
<mce:style><!
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
p\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
v\:textbox {display:none;}
--><!-- [endif]--><!-- [if !ppt]--><!-- [endif]--> 在发生如下问题的情况下此工具会转储 CORE
( 1 )动态分配内存边界外的读写操作
( 2 )访问已经 free 的内存
( 3 ) free 的地址不是 malloc() 分配的
Efence提供了几个全局和同名的环境变量,以控制内存检查的行为:
<!-- [if !mso]>
<mce:style><!
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
p\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
v\:textbox {display:none;}
--><!--[endif]--><!-- [if !ppt]--><!-- [endif]-->
环境变量(或局部变量名)
|
作用
|
EF_PROTECT_BELOW
|
默认情况下 Efence 检查的是高地址边界访问溢出,如需检查低 地址边界访问溢出时设定此环境变量(或局部变量为 1 )
环境变量设置:
export EF_PROTECT_BELOW 1
或者 局部变量设置:
extern int EF_PROTECT_BELOW;
EF_PROTECT_BELOW = 1;
|
EF_PROTECT_FREE
|
此变量设定为 1 可启动对已经释放内存的访问的检查。
|
EF_ALLOW_MALLO C _0
|
默认情况下 Efence 会行中会将分配 0 字节的代码 malloc(0) 作为 非法处理。此变量设定为 1 则程序在运时忽略此检查。
|
EF_ALIGNMENT
|
Efence 不检查不足此数值的内存地址越界。默认为 sizeof(int) 。设置为 0 或 1 可以检查任意长度的内存越界。
|
二,举例
在编译的时候链接 efence库,静态或者动态库。
<!-- [if !mso]>
<mce:style><!
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
p\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
v\:textbox {display:none;}
--><!-- [endif]--><!-- [if !ppt]--><!-- [endif]-->
$gcc -g –o array array.c –lefence
$./array (由于该程序存在数组越界,所以运行的时候会产生core dump,源程序略)
Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens …
Segmentation fault
分享到:
相关推荐
electric fence是Linux下的C语言内存越界访问检测工具,可检测如下两种情况:1、内存访问越界 2、使用释放后续的内存 使用方法: 1、make编译得到libefence.a静态库 2、在gcc编译时增加 -L . -lefence的选项
Linux Direct Rendering Manager (DRM) 是Linux内核中用于图形硬件管理的重要组件,它为现代图形处理器(GPU)提供了一个接口,使得操作系统可以高效地控制显示子系统。这份"Linux DRM Developer-中文翻译"文档是...
CaptfEncoder 是一款可扩展跨平台网络安全工具套件,提供网络安全相关编码转换、古典密码、密码学、非对称加密、特殊编码、杂项等工具,并聚合各类在线工具。编码转换包括:Ascii 编码,Base64、Base 系列编码,...
离线安装包,亲测可用
fence-virt-0.2.3-24.el6.x86_64.rpm fence-virt-0.2.3-24.el6.x86_64.rpm
fence-agents-4.0.15-13.el6.x86_64.rpm fence-agents-4.0.15-13.el6.x86_64.rpm
fence-virtd-checkpoint-0.2.3-9.el6.i686.rpm是工具centos包 。
fence-agents-3.1.5-17.el6.i686.rpm是工具centos包 。
fence-virtd-multicast-0.2.3-9.el6.i686.rpm是工具centos包 。
fence-virt-0.2.3-9.el6.i686.rpm是工具centos包 。
安装`django-fence`可以通过Python的包管理器pip来完成,命令可能是`pip install django-fence-0.0.3.tar.gz`。这会解压`.tar.gz`文件并将库安装到你的Python环境中。 在实际应用中,开发者需要阅读`django-fence`...
内存调试工具electric fence. software that overruns the boundaries of a malloc()memory allocation, software that touches a memory allocation that has been released by free(). Unlike other malloc() ...
离线安装包,亲测可用
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
标题“POJ3253-POJ3253-Fence Repair【STL优先队列】”指的是一个在线编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。该题目要求参赛者使用C++编程语言解决特定的问题,并且在解决方案中...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装