android-ndk开发工具下有一个asan_device_setup脚本:
~/Android/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/bin/asan_device_setup
执行了脚本之后app就能支持asan检查了
具体原理为:
1.app_process被替换为了一个脚本:
#!/system/bin/sh-from-zygote
ASAN_OPTIONS=start_deactivated=1,allow_user_segv_handler=1 \
ASAN_ACTIVATION_OPTIONS=include_if_exists=/data/local/tmp/asan.options.%b \
LD_PRELOAD=symlink-to-libclang_rt.asan \
exec /system/bin/app_process32 $@
真正的app_process名字改成了app_process32或者app_process64
http://aosp.opersys.com/xref/android-11.0.0_r39/xref/system/core/rootdir/init.zygote32.rc#1
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

本文介绍了如何在Android NDK开发环境中使用asan_device_setup脚本来使APP支持asan内存错误检查。通过替换app_process并设置LD_PRELOAD,使得Zygote启动时加载libclang_rt.asan-arm-android.so库,实现内存检测。验证方法是检查目标进程的maps是否包含该库。
4748

被折叠的 条评论
为什么被折叠?



