ASAN报错汇总

简介: ASAN报错汇总

启动错误:Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly. ABORTING

ASan shadow was supposed to be located in the [0x1ffff000-0x3fffffff] range.

地址消毒使用影子内存判断读写越界问题,影子内存在地址消毒初始化时被分配,

x86程序,地址消毒需要的影子内存从[0x1ffff000-0x3fffffff] ,一旦这部分内存被其他人占用,地址消毒则启动失败

0x08048000-0x19c7e000 /home/HiDisk/l00167020/br_test_modem_llt_on_linux_20170527/vendor/hisi/llt/gas/ut/utproj_test_v7

0x19c7e000-0x212cf000 /home/HiDisk/l00167020/br_test_modem_llt_on_linux_20170527/vendor/hisi/llt/gas/ut/utproj_test_v7

0x212cf000-0x23773000

可以看到,程序进程代码加载从0x08048000开始,那么到地址消毒要求的内存0x1ffff000中间共有402354176大约400M空间,那么x86程序加上地址消毒编译好的进程占用的空间如果超过400M则地址消毒就会报上边的错误

一般占用这么大空间的程序主要是有大的全局变量声明,把全局变量改成用堆分配就能解决。

asan的编译开关 -fsanitize=undefined 对进程的内存占用影响非常大,会占用很多的内存,增大text段、data段和BSS段,也可能导致王浩贴子里说的这个问题。如果有遇到这个问题的话,建议先关闭 -fsanitize=undefined 这个开关试试。

同时 -fsanitize=undefined 对编译出来的二进制文件大小影响也很大,在我的测试中,打开和去除这个编译选项,生成的二进制文件大小差了一倍。

一般程序过大都是有些大的全局变量,找到后用malloc分配可以解决

相关文章
|
安全 网络架构
电脑维修常遇到等等相关问题及解决方法?
电脑维修常遇到等等相关问题及解决方法?
|
3月前
|
JavaScript C++ Python
9-15|报错信息
9-15|报错信息
|
4月前
|
iOS开发 MacOS
CocoaPods安装失败解决方法
CocoaPods安装失败解决方法
76 2
报错
下载数据后,从本地缓存加载出错
|
7月前
|
Kubernetes Unix API
k8s报错
k8s报错
132 10
|
7月前
报错找不到 TestRestTemplate
报错找不到 TestRestTemplate
55 0
|
数据库
学生错误‘3704‘解决方法
学生错误‘3704‘解决方法
|
关系型数据库 MySQL 数据库
mysql中文乱码解决方法
mysql中文乱码解决方法
370 0
mysql中文乱码解决方法
报错 求助
"errorMessage": "Unable to import module 'test'", "errorType": "ImportModuleError",
报错 求助