Android P Asan使用总结

这篇博客总结了在Android P上使用Address Sanitizer(Asan)进行内存错误检测的经验,包括对所有应用、单个应用、bin文件以及shared library的测试步骤,通过设置环境变量和编译选项,使得在非法指针操作时应用能够崩溃并提供堆栈信息,有助于定位内存问题。
摘要由CSDN通过智能技术生成

参考官网的指导针对use after free的场景使用asan在P上做了测试,现在总结放在这里。以后至少在user space踩内存的问题没那么怕了。

https://source.android.com/devices/tech/debug/asan?tdsourcetag=s_pctim_aiomsg

1.all app
①frameworks/base/cmds/app_process仓
Android.mk添加LOCAL_SANITIZE:=address
②system/core/rootdir仓
init.zygote(32|64).rc里面添加
setenv LD_LIBRARY_PATH /system/lib/asan:/system/lib
setenv ASAN_OPTIONS
allow_user_segv_handler=true

编译大包,执行非法指针操作应用会崩溃并打印堆栈,参考日志见asan_app.txt

2.single app
常规版本即可
①关闭selinux
setenforce 0
②设置wrap prop
setprop com.droidlogic.inputmethod.remote asanwrapper
执行非法指针操作应用会崩溃并打印堆栈,参考日志见asan_single_app.txt

3.bin
①使用CLang编译
LOCAL_CLANG:=true
②将 LOCAL_SANITIZE:=address 添加到可执行文件的编译规则中
LOCAL_SANITIZE:=address
执行非法指针操作应用会崩溃并打印堆栈,参考日志见asan_bin.txt
这边两次释放指针和内存泄漏都没有检测,free after use检测出来了。

4.shared library
①使用共享库的二进制文件也要使用asan编译
②使用asan编译共享库,并且在system(vendor)/lib/asan下面
LOCAL_SANITIZE:=address
LOCAL_MODULE_RELATIVE_PATH := asan
③设置环境变量
export LD_LIBRARY_PATH=/system/lib/asan
如果是系统服务二进制文件,可以在init.rc文件里面添加setenv LD_LIBRARY_PATH /system/lib/asan,
然后执行二进制文件即可以检测。如果要看是不是依赖asan路径下面的库,可以移除这个库看一下。
参考日志asan_sharedlib.txt

--------- beginning of main
11-12 11:46:36.799  3009  3130 D WificondControl: Scan result ready event
11-12 11:46:36.800  3009  3030 I EthernetTracker: interfaceLinkStateChanged, iface: wlan0, up: true
11-12 11:46:36.931  3009  3019 I system_server: Background concurrent copying GC freed 17553(813KB) AllocSpace objects, 9(380KB) LOS objects, 19% free, 4MB/5MB, paused 168us total 121.166ms
11-12 11:46:37.489  3879  3879 D         : test main
11-12 11:46:37.490  3879  3879 D TEST    : test begin1
11-12 11:46:37.490  3879  3879 D TEST    : double free
11-12 11:46:37.490  3879  3879 I         : ===============================&#
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值