[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. 原理分析经常有些新 ...
随机推荐
- Selenium Web 自动化 - 项目实战环境准备
Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG 1.1 安装TestNG 1.2 添加TestNG类库2 部署Maven 2.1 mav ...
- sklearn linear_model,svm,tree,naive bayes,ensemble
sklearn linear_model,svm,tree,naive bayes,ensemble by iris dataset .caret, .dropup > .btn > .c ...
- 推荐几个Windows工具软件: HDDB - Everything的替代品
主页: http://hddb.xp-zed.com/index.html 简单地说,HDDB 是NTFS磁盘的文件搜索工具,它最开始是模仿 Everything 的,但解决了 Everything ...
- Amazon
刚接到Recruiter电话,说恭喜,feedback都非常好. 心里大石落地,FLAG / UAT终于完成一家. 接下来就要加倍努力冲刺其他公司了. Mark: (入职以后一定要去地里补发一波面经, ...
- Halcon 1D测量
1.产生测量句柄,准备提取与矩形(圆弧)主轴垂直的值边缘. gen_measure_rectangle2或gen_measure_arc 2.测量边缘对 ,测量的直线与矩形或者圆弧垂直 measu ...
- 程序-代写(qq:928900200)
CS 310 Programming Assignment 4 Due April 27, 2014 5:00 P.M. About 15 years in the future... The Mar ...
- Java如何检查文件是否在服务器上被修改了?
在Java编程中,如何检查文件是否在服务器上被修改了? 以下示例显示如何检查文件是否在服务器上进行了修改. package com.yiibai; import java.net.URL; impor ...
- 工具链接redis
RedisDesktopManager 链接 文件位置 /usr/loca/redis/etc/redis.conf 一.注释redis.conf文件中的:bind 127.0.0.1(在一段文字之前 ...
- Java中浮点数的处理
import java.text.DecimalFormat; String addGold = String.valueOf(new DecimalFormat("0").for ...
- django 同步数据库出现 No changes detected 的可能原因
在使用 python manage.py makemigrations时候会出现:No changes detected 的错误. 造成这个错误的原因可能有很多. 我这里遇到这个错误的原因是:migr ...