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 -Xz