[daily] 内存越界的分析与定位
valgrind 自不必说
1. Address Sanitize
很好有,只需要在gcc编译的时候,加上选项 -fsanitize=address
它的工程:https://github.com/google/sanitizers/wiki/AddressSanitizer
我的测试例子: https://github.com/tony-caotong/knickknack/tree/master/test/sanitize-address
运行的时候,遇见内存问题会直接退出,包括前边越界和后边越界,如下:

https://wizardforcel.gitbooks.io/100-gcc-tips/content/address-sanitizer.html
需要主要的是,在CentOS7里面,需要单独安装依赖库
[root@dpdk sanitize-address]# gcc --version
gcc (GCC) 4.8. (Red Hat 4.8.-)
Copyright (C) Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. [root@dpdk sanitize-address]# yum search asan
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* epel: mirrors.ustc.edu.cn
* extras: mirrors.aliyun.com
* rpmfusion-free-updates: mirrors.ustc.edu.cn
* rpmfusion-nonfree-updates: mirrors.ustc.edu.cn
* updates: mirrors.shuosc.org
===================================================================================== N/S matched: asan =====================================================================================
libasan.i686 : The Address Sanitizer runtime library
libasan.x86_64 : The Address Sanitizer runtime library
libasan-static.i686 : The Address Sanitizer static library
libasan-static.x86_64 : The Address Sanitizer static library
oflb-asana-math-fonts.noarch : An OpenType font with a MATH table Name and summary matches only, use "search all" for everything.
[root@dpdk sanitize-address]# yum install libasan
使用gdb在报错的地方,打断点:
https://github.com/google/sanitizers/wiki/AddressSanitizerAndDebugger
也就是
(gdb)break __sanitizer::Die
但是, 在CentOS7里竟然不好使,因为这个库竟然没有symbol,我相信,有symbol的库定能成功break
[root@dpdk anthropoid]# nm /lib64/libasan.so.0.0.0
nm: /lib64/libasan.so.0.0.0: no symbols
[root@dpdk anthropoid]#
comment @2018-01-26 当时的我还真是太傻太天真呢,还你相信。。。 正确的解释,请看:
[daily] 在CentOS7中使用 sanitizer-address 发现内存问题 / CentOS7使用SCLo软件源安装devtoolset软件
2. mprotect
http://man7.org/linux/man-pages/man2/mprotect.2.html
linux系统API,可以在内存的前后扇区开始处,打上标签。当该标签被读写时,系统会给出提示。
3. 自己在内存前后打标记 --!!!
参考:http://www.cnblogs.com/djinmusic/archive/2013/02/04/2891753.html
后续:[daily] 在CentOS7中使用 sanitizer-address 发现内存问题 / CentOS7使用SCLo软件源安装devtoolset软件
[daily] 内存越界的分析与定位的更多相关文章
- c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针
1.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内浅显的例子就不举了,这里举几个比较隐蔽的例子. 1.1结构体成员指针未初始化 struct stude ...
- JVM内存区域异常分析
在Java虚拟机规范描述中,除程序计数器外,其他几个运行时区域都有可能发生OutOfMemoryError异常.接下来将对各区域分别进行分析介绍,内容包括触发各区域OutOfMemoryError异常 ...
- IOS上解决内存越界访问问题
IOS经常会混合使用C代码,而在C中,对内存的读写是很频繁的操作. 其中,内存越界读写 unsigned char* p =(unsigned char*)malloc(10); unsigned c ...
- uboot2012(一)分析重定位
目录 引入 环境配置 编译体验 入口查找 代码分析 board_init_f pie 内存分布分析 SP设置 board_init_f 重定位 代码段重定位实现 变量地址修改 参考 title: ub ...
- linux内存源码分析 - SLAB分配器概述【转】
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 之前说了管理区页框分配器,这里我们简称为页框分配器,在页框分配器中主要是管理物理内存,将物理内存的页框分配给申请 ...
- linux内存源码分析 - SLAB分配器概述
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 之前说了管理区页框分配器,这里我们简称为页框分配器,在页框分配器中主要是管理物理内存,将物理内存的页框分配给申请 ...
- 五、jdk工具之jmap(java memory map)、 mat之四--结合mat对内存泄露的分析、jhat之二--结合jmap生成的dump结果在浏览器上展示
目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...
- Windows下使用Gflags检查内存越界
环境:windows xp. vs2005 Gflags可用于查找内存越界的问题. 访问一块申请的内存时,当访问的地址超过申请的范围时,就发生了内存越界的问题. 编写测试程序MemoryOverflo ...
- C++ 内存泄露和内存越界
内存泄露:分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃内存越界: 打个比方 就是你有一个500ml的水瓶,然后你倒在瓶里的水大于500ml 那个多余的就会流出来... 1. 原理分析经常有些新 ...
随机推荐
- 专访图书作者祁宇:C++11让程序更简洁、更现代、更强大
日前CSDN采访了祁宇,请他解读C++11的新标准.C++的现状以及未来的发展前景. CSDN:怎么会想到编写<深入应用C++11:代码优化与工程级应用>这本书的?有没有什么故事可以分享下 ...
- Core dump去哪里了?
转自:http://blog.csdn.net/normallife/article/details/53818997 今天程序Crash,去追踪,找core dump,始终没有找到,后来到了/pro ...
- 11款CSS3动画工具的开发
本文展示了11个最好的和最令人惊异的CSS3动画工具,将为开发者是非常有帮助的.CSS3有设计师和开发人员之间的良好的声誉.它是在这里帮助他们创造惊人的结果. 有了这些动画工具,你可以创造一个轻松自由 ...
- [转]Ubuntu 16.04安装有道词典
原文:https://www.cnblogs.com/scplee/archive/2016/05/13/5489024.html 以前用Ubuntu 14.04 的时候,直接下载有道词典官方deb安 ...
- Android开发(十四)——SimpleAdapter与自定义控件
ListView中可以使用SimpleAdapter进行数据与视图的绑定,但都是对已有的系统控件的绑定,如果自定义空间直接使用SimpleAdapter绑定,则会报错. 如,使用CircleImage ...
- Docker镜像中的base镜像理解
base 镜像有两层含义: 不依赖其他镜像,从 scratch 构建. 其他镜像可以之为基础进行扩展. 所以,能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像,比如 Ub ...
- PyCharm 2018 最新激活方式总结(最新最全最有效!!!)
PyCharm 2018 最新激活方式总结(最新最全最有效!!!) 欲善其事,必先利其器.这里我为大家提供了三种激活方式: 授权服务器激活:适合小白,一步到位,但服务器容易被封 激活码激活:适合小白, ...
- openssl 非对称加密DSA,RSA区别与使用介绍
在日常系统管理工作中,需要作一些加解密的工作,通过openssl工具包就能完成我们很多需求! 1. openssl RSA 加解密 RSA是基于数论中大素数的乘积难分解理论上的非对称加密法,使用公私钥 ...
- json转 PostMan bulk Edit application/x-www-form-urlencoded 需要的格式
{?\n\s*"([^"]+)"\s*:\s*"?([^,"]+)"?\s*,?}? $1:$2\n PostMan需要的格式. json转 ...
- firadisk 把 win7(32位) 装入 VHD :仅仅支持内存模式:--mem
关键1:对于 win7(32位)来说,还可以在设备管理器内,通过添加“过时”硬件的方式导入wvblk驱动. 附件: grub4dos firadisk驱动