(十一)GDBdebug调试技术——malloc()和free()发生故障
文章目录
- 1.错误使用内存相关库函数引起的bug
- 2.利用MALLOC_CHECK_进行调试
1.错误使用内存相关库函数引起的bug
- C语言常见的内存相关库函数的bug:内存的双重释放,访问分配空间之外内等等。这些bug的在gdb的具体表现是:在malloc(),free()之后发生SIGSEGV错误
- 使用malloc(),free()导致的SIGSEGV的最危险的情况是:程序不会受到内存破坏依然会继续运行,产生的影响是:
(1)在完全没有关系的地方产生SIGSEGV
(2)使用被破坏的数据进行计算,产生错误的结果 - malloc(),free()产生SIGSEGV时,在怀疑库函数的bug之前,最好先检查是否进行了双重释放
- eg如下:
membug表示:可执行文件
$ gdb -c core ./membug
Core was generated by './membug'
Program terminated with signal 11, Segmentation fault.
#0 0x0000003b4867217c in _int_free () from /Lib64/libc.so.6
(gdb)bt
#0 0x0000003b4867217c in _int_free () from /lib64/libc.so.6
#1 0x0000003b48675f2c in free () from /lib64/libc.so.6
#2 0x0000000000400534 in do_free () at membug.c30
#3 0x0000000000400588 in main (argc=<value optimized out>, argv=<value optimized out>)at membug.c:39
上述程序实际上是使用free()函数的问题,而不是库函数free()的问题
2.利用MALLOC_CHECK_进行调试
- 设置环境变量MALLOC_CHECK_,就可以发现内存操作的相关bug
- 该方法并不适用所有的情况,用MALLOC_CHECK_没有检测出问题,并不说明应用程序没有bug
- eg:下面的eg检查了double free,即:双重释放
membug为可执行文件
$env MALLOC_CHECK_=1 ./membug
**glibc detected ** ./membug:double free or corruption (top): 0x00000000020b2010***
======backtrace======
...
======Memory map=====
...
(十一)GDBdebug调试技术——malloc()和free()发生故障相关推荐
- shell脚本调试技术
Shell脚本调试技术 曹 羽中 (caoyuz@cn.ibm.com), 软件工程师, IBM中国开发中心 曹羽中,在北京航空航天大学获得计算机软件与理论专业的硕士学位,具有数年的 unix 环境下 ...
- Linux调试技术介绍
对于任何编写内核代码的人来说,最吸引他们注意的问题之一就是如何完成调试.由于内核是一个不与某个进程相关的功能集,其代码不能很轻松地放在调试器中执行,而且也不能跟踪. 本章介绍你可以用来监视内核代码和跟 ...
- linux内核调试技术 kprobe使用与实现
Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术.利用kprobes技术,内核开发人员可以在内核的绝大多数指定函数中动态的插入探测点来收集 ...
- VC程序调试技术,一些工具上和具体的问题,包括内存检测
在开发程序的过程中,经常需要查找程序中的错误,这就需要利用调试工具来帮 助你进行程序的调试,当然目前有许多调试工具,而集成在VC中的调试工具以其 强大的功能,一定使你爱不释手.下面我们先来介绍VC中的 ...
- 深度解析windows调试技术之一 [抓取user mode dump文件的几重境界]
抓取user mode dump文件的几重境界 导读 记得去年对一些朋友说过要写一些调试技术相关的文章,但是后来出于种种原因吧,还是没写成.最近终于有些时间,希望可以把这些文章补上.对于软件开发而言, ...
- Linux内核驱动调试,Linux内核设备驱动之内核的调试技术笔记整理
/****************** * 内核的调试技术 ******************/ (1)内核源代码中的一些与调试相关的配置选项 内核的配置选项中包含了一些与内核调试相关的选项,都集中 ...
- 【java】Java 动态调试技术原理及实践
1.概述 转载:Java 动态调试技术原理及实践 一.动态调试要解决的问题 断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径.但断点调试会在断点位置停 ...
- 第一章 Windows 2000对调试技术的支持
第一章 Windows 2000对调试技术的支持 翻译:Kendiv 更新: Friday, January 14, 2005 内核调试器的命令 尽管调试器的命令已经注意了易记性,但有时总是难以回忆 ...
- 揭秘浏览器远程调试技术
原文地址:https://www.usblog.cc/blog/post/justzhl/揭秘浏览器远程调试技术 调试技术的起源 1947 年 9 月 9 日,一名美国的科学家格蕾丝.霍普和她的同伴在 ...
- Windows下反(反)调试技术汇总
反调试技术,恶意代码用它识别是否被调试,或者让调试器失效.恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作,因此他们使用反调试技术尽可能地延长恶意代码的分析时间.为了阻止调试器的分析,当 ...
最新文章
- model存数据_Jepsen 测试框架在图数据库 Nebula Graph 中的实践
- curl 视频vip接口 php,php中CURL的使用方法及详解教程
- PHP操作MYSQL--PDO
- httpClient post方法 解析json数据(向服务器传递,接受服务器传递)
- Go语言入门——dep入门
- VC中退出应用程序-几种很有用的方法
- php redbean update,redbeanphp和表前缀
- linux目录 文件 pdf,linux文件与目录管理.pdf
- 【渝粤教育】国家开放大学2018年春季 0283-21T广告创意与表现(二) 参考试题
- 根据企业财务进行风险分析——基于pytorch
- 大型系统集成项目流程方案设计图
- OCR证件识别及其衍生产品介绍
- Win10完美运行红色警戒2的安装包和补丁_我是亲民_新浪博客
- 金山词霸电脑版 百度算法
- Cygwin下安装包管理器apt-cyg
- 【springboot maven 本地包依赖】
- p10测试闪存软件怎么用,华为p10的闪存类型怎么查看?查看华为p10闪存教程
- 【论文学习】Towards Accurate Oriented Object Detection in Aerial Images with Adaptive Multi-level Feature
- glue logic-胶合逻辑
- Lightgbm如何处理类别特征?
热门文章
- DLNA的使用-天翼高清电视机顶盒镜像投屏
- windows创建服务删除服务
- 【2014.01】普林斯顿数学指南(第一卷) [英]Timothy Gowers编 齐民友译
- 小程序无法获取用户头像的原因
- JavaWeb项目作业 Market商品管理系统
- 看看“电子招投标平台”是如何识破“围标串标”的,看完少走弯路
- 2022新版UI云购H5系统源码+完美运行/功能强大
- 使用Java根据约定格式生成Oracle建表语句
- 数据结构(直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序、快速排序)
- matlab求两向量夹角_向量法解几何问题