- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
内存检测工具如何解决内存中问题_华清远见
内存检测工具如何解决内存中的问题 本篇文章为大家讲解内存检测工具是如何解决内存中的问题的,对这一块还不是很了解的同学,建议耐心看完,相信对你是很有帮助的。 C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题。但是,在这样灵活操作的后面,还隐藏着很危险的操作,那就是关于内存的问题。一看到内存的问题,大部分的初学者就开始傻眼了。怎么样快速的去找到内存中的问题并且解决它。 初学者最常用的是逐步打印log信息但其效率不是太高,也比较的繁琐,尤其是在运行成本高或重现概率低的情况下。 另外,静态检查也是一类方法,有很多工具(lint, cppcheck, klockwork, splint, o, etc.)。但缺点是误报很多,不适合针对性问题。另外误报率低的一般还需要收费。 最后,就是动态检查工具。下面介绍几个Linux平台下主要的运行时内存检查工具。绝大多数都是开源免费且支持x86和ARM平台的。 首先,比较常见的内存问题有下面几种: ? memory overrun:写内存越界 ? double free:同一块内存释放两次 ? use after free:内存释放后使用 ? wild free:释放内存的参数为非法值 ? access uninitialized memory:访问未初始化内存 ? read invalid memory:读取非法内存,本质上也属于内存越界 ? memory leak:内存泄露 ? use after return:caller访问一个指针,该指针指向callee的栈内内存 ? stack overflow:栈溢出 针对上面的问题,主要有以下几种方法: 1. 为了检测内存非法使用,需要hook内存分配和操作函数。hook的方法可以是用C-preprocessor,也可以是在链接库中直接定义(因为Glibc中的malloc/free等函数都是weak symbol),或是用LD_PRELOAD。另外,通过hook strcpy(),memmove()等函数可以检测它们是否引起buffer overflow。 2. 为了检查内存的非法访问,需要对程序的内存进行bookkeeping,然后截获每次访存操作并检测是否合法。bookkeeping的方法大同小异,主要思想是用shadow memory来验证某块内存的合法性。至于instrumentation的方法各种各样。有run-time的,比如通过把程序运行在虚拟机中或是通过binary translator来运行;或是compile-time的,在编译时就在访存指令时就加入检查操作。另外也可以通过在分配内存前后加设为不可访问的guard page,这样可以利用硬件(MMU)来触发SIGSEGV,从而提高速度。 3. 为了检测栈的问题,一般在stack上设置canary,即在函数调用时在栈上写magic number或是随机值,然后在函数返回时检查是否被改写。另外可以通过mprotect()在stack的顶端设置guard page,这样栈溢出会导致SIGSEGV而不至于破坏数据。 以上方法有些强于功能,有些胜在性能,有些则十分方便易用,总之各有千秋。以下是几种常用工具在Linux x86_64平台的实验结果,注意其它平台可能结果有差异。 另外也可能由于版本过老,编译环境差异,总之各种原因造成遗漏,如有请谅解 Tool\Problem memory overrun double free use after free wild free access uninited read invalid memory memory leak use after return stack overflow Memory checking tools in Glibc Yes Yes Yes Yes(if use memcpy, strcpy, etc) TCMalloc(Gperftools) Yes Valgrind Yes Yes Yes Yes Yes Yes Yes Yes Yes Address Sanitizer(ASan) Yes Yes Yes Yes (Memory Sanitizer) Yes Yes Yes Yes Memwatch Yes Yes Yes Dr.Memory Yes Yes Yes Yes Yes Yes Yes Yes Electric Fence Yes Yes Yes Yes Dmalloc Yes Yes Yes Yes Yes 下面简单介绍一下这些工具以及基本用法。更详细用法请参见各自manual。 Memory ch
您可能关注的文档
- 日喀则吉隆沟:蕃尼古道上繁华和落寞.doc
- 既开胃,又不失营养孕妇食谱.doc
- 日语中纯汉字.doc
- 明朝中外交往与冲突教案二.doc
- 曾有人说一场成功谈判就是一场不欢而散谈判.doc
- 最令人羡慕20个中国女人.doc
- 最全做鸡方法.doc
- 021成功者喜欢阅读经典励志小故事及语句.doc
- 最新折线配筋预应力砼先张梁关键技术研究与应用.doc
- 10 只送给青年人礼物:《魔幻手机》.doc
- 12J8 河北省12系列《 楼梯》.docx
- DB2301_T 178-2024 地下市政基础设施普查及信息化管理平台建设技术规程.docx
- DB37_T 4899-2025 深远海养殖管理工作指南.docx
- DB54∕T 0542-2025 西藏高原地区紫外线指数预报.docx
- 88J13-1 塑钢门窗参考图集.docx
- DB31_T 1661-2025 公共区域电子屏播控安全管理要求.docx
- DB21_T 4341-2025 健康照护师(长期照护师)培训规范.docx
- T_JSQX 0025-2025 无人驾驶配送装备业务运营规范.docx
- DB32_T 5160-2025 传媒行业数据分类分级指南.docx
- Q_ZTBZ 002-2018 包装容器用塑料瓶盖.docx
最近下载
- 浙江省名校联合体2025-2026学年高一上学期12月月考数学(含答案).docx
- 2024-2025学年四川省成都市金牛区北师大版四年级上册期末考试数学试卷(含答案解析).pdf
- 城市黑臭水体整治工作指南培训-黑臭水体排查、整治及评估方案制定.pdf VIP
- 重庆《建设工程消防设计常见错误》(2024.3).docx
- 安徽省 2021 年普通高等学校专升本招生考试《大学英语》冲刺期测试题 (1).docx VIP
- 招标代理机构服务方案.docx VIP
- 眼科学复习笔记10版--郑汉龙.pdf VIP
- 操作规程和工艺控制指标检查考核制度.docx VIP
- 学习党的二十届四中全会精神测试题3份附答案.docx VIP
- 安徽省六安市金安区六安皋城中学八年级上学期11月期中数学试题(原卷版)-A4.docx VIP
原创力文档


文档评论(0)