[发明专利]内存错误检测方法及相关设备在审
申请号: | 202111320737.8 | 申请日: | 2021-11-09 |
公开(公告)号: | CN116107861A | 公开(公告)日: | 2023-05-12 |
发明(设计)人: | 王帅;王维洲;徐洋 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 深圳市赛恩倍吉知识产权代理有限公司 44334 | 代理人: | 袁建设;陈敬华 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 内存 错误 检测 方法 相关 设备 | ||
本申请提供一种内存错误检测方法及相关设备,应用于电子设备,该电子设备包括编译器,该编译器包括编译器前端、分析插桩模块及编译器后端,该方法包括:编译器前端接收输入的源程序并将源程序转换为中间程序;分析插桩模块通过污点分析方法确定所述中间程序中的目标内存访问程序,并对目标内存访问程序进行插桩处理;编译器后端将插桩处理完成的中间程序转换为目标程序。本申请通过污点分析方法确定所述中间程序中的目标内存访问程序,并仅对目标内存访问程序进行插桩处理,降低程序在运行时的性能开销,以优化编译器中地址消除器功能。
技术领域
本申请涉及计算机技术领域,尤其涉及一种内存错误检测方法及相关设备。
背景技术
内存错误是C和C++程序员常见的编程问题之一。内存错误不仅仅会引起运行结果错误、运行程序崩溃,甚至会被黑客恶意利用。内存错误检测可以提高程序正确性、稳定性和安全性。
内存错误检测技术大多采用地址消除器(Address Sanitizer),地址消除器是基于指令执行的,通过在编译时在代码中插桩,通过插桩以对系统中每一块用户分配的内存的前后加入“监测区域”,实现对该内存的监控,当检测到该内存被访问时,即表示用户的程序发生了非法的内存访问,通过监控区域可实现准确定位。
但是,虽然地址消除器可检测内存相关的安全漏洞,但是由于地址消除器对于程序访问的所有内存均进行监控,因此用户程序中需要插桩的数量较多,增大了程序本身占有的空间,且由于地址消除器需要检测程序中每个内存的访问,产生了很大的性能开销。
发明内容
本申请实施例提供了一种内存错误检测方法及相关设备,能够减少访问内存程序的插桩的数量,减少程序的性能开销和程序占用的存储空间。
本申请第一方面提供了一种内存错误检测方法,应用于电子设备,所述电子设备包括编译器,所述编译器包括编译器前端、分析插桩模块及编译器后端,所述方法包括:
所述编译器前端接收输入的源程序并将所述源程序转换为中间程序,并将所述中间程序发送至所述分析插桩模块;
所述分析插桩模块通过污点分析方法确定所述中间程序中的目标内存访问程序,并对所述目标内存访问程序进行插桩处理,并将插桩处理完成所述中间程序发送至编译器后端,其中所述插桩处理为在对应程序中插入地址消除器;
所述编译器后端将所述插桩处理完成的中间程序转换为目标程序。
其中,目标内存访问程序包括可被调用程序使用的内存访问程序,可被全局变量引用的内存访问程序,可被进程间通信引用的内存访问程序中的至少一种。
如此,编译器对程序进行编译时,对程序进行污点分析以确定程序中目标内存访问程序,并仅对对内存访问程序进行插桩,相较于与对所有内存访问程序进行插桩,减少了程序中插桩的数量,进而减小了程序的存储空间;通过减少程序中的插桩数量,在程序运行时仅需对插桩的内存访问程序进行检测,减少了程序运行时检测的次数,进而减少了程序运行时的性能损耗。
在一些可选的实施方式中,所述分析插桩模块包括第一地址消除器模块和第一地址消除器优化模块;
所述分析插桩模块通过污点分析方法确定所述中间程序中的目标内存访问程序,并对所述目标内存访问程序进行插桩处理包括:
所述第一地址消除器模块确定所述中间程序中的内存访问程序,对所述内存访问程序进行插桩处理,将所述中间程序发送至所述第一地址消除器优化模块;
所述第一地址消除器优化模块通过污点分析方法确定程序的内存访问程序中的目标内存访问程序和非目标内存访问程序,并删除所述非目标内存访问程序的地址消除器。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111320737.8/2.html,转载请声明来源钻瓜专利网。