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月前
|
Kubernetes Unix API
k8s报错
k8s报错
47 10
|
10月前
|
缓存
报错
下载数据后,从本地缓存加载出错
|
3月前
报错找不到 TestRestTemplate
报错找不到 TestRestTemplate
27 0
|
数据库
学生错误‘3704‘解决方法
学生错误‘3704‘解决方法
报错 求助
"errorMessage": "Unable to import module 'test'", "errorType": "ImportModuleError",
报错 求助
|
开发工具 数据安全/隐私保护 iOS开发
常见报错或者警告
常见报错或者警告
247 0
常见报错或者警告
setSupportActionBar()方法报错
今天在使用Tollbar替换标题栏时,出现了这样的错误
64 0
setSupportActionBar()方法报错
|
C++
VS编译错误:error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
VS编译错误:error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
296 0
|
存储 缓存 小程序
小程序的thirdScriptError ..... is not a function 报错的解决方法
小程序的thirdScriptError ..... is not a function 报错的解决方法
450 0