[LLVMdev] Address Sanitizer on Android

Evgeniy Stepanov eugeni.stepanov at gmail.com
Wed Jun 5 00:19:02 PDT 2013


Since JellyBean or so Android switched to PIE binaries. ASan only
supports those.

On Wed, Jun 5, 2013 at 12:28 AM, Greg Fitzgerald <garious at gmail.com> wrote:
>> When I run 'djpeg' on JellyBean, ASan reports the error message below.
>>
>> ==28210==Shadow memory range interleaves with an existing memory
>> mapping. ASan cannot proceed correctly. ABORTING.
>
> Got figured out.  I needed to use TARGET_LDFLAGS.  LOCAL_LDFLAGS seems
> to be ignored in my clang build.
>
> LOCAL_CFLAGS += -fsanitize=address
> TARGET_LDFLAGS +=-fsanitize=address -target arm-linux-androideabi
>
> And once doing that, I also needed to build against Android API 8 or later:
> $ ndk-build V=1 NDK_TOOLCHAIN_VERSION=clang3.3 APP_PLATFORM=android-8
>
> -Greg
>
>
> On Tue, Jun 4, 2013 at 11:21 AM, Greg Fitzgerald <garious at gmail.com> wrote:
>> I have simple standalone ASan examples working on Android, and now I'd
>> like to try using ASan with the Android build system.  I'm building
>> the release_33 branch of llvm+clang+compiler-rt with CMake.  To test,
>> I'm looking at libjpg, because with just a small change its Android.mk
>> it compiles in a few seconds and without needing any additional
>> dependencies.
>>
>> When I run 'djpeg' on JellyBean, ASan reports the error message below.
>>  Can you please help me interpret it?  Do you know what I might be
>> doing wrong?
>>
>> $ adb shell "cd /data/data && ASAN_OPTIONS=debug=1,verbosity=1
>> LD_PRELOAD=libclang_rt.asan-arm-android.so LD_LIBRARY_PATH=. ./djpeg
>> ./testimg.jpg"
>>
>> ==28210==Parsed ASAN_OPTIONS: debug=1,verbosity=1
>> ==28210==AddressSanitizer: libc interceptors initialized
>> || `[0x20000000, 0xffffffff]` || HighMem    ||
>> || `[0x04000000, 0x1fffffff]` || HighShadow ||
>> || `[0x00040000, 0x03ffffff]` || ShadowGap  ||
>> MemToShadow(shadow): 0x00000000 0x00000000 0x00800000 0x03ffffff
>> red_zone=16
>> malloc_context_size=30
>> SHADOW_SCALE: 3
>> SHADOW_GRANULARITY: 8
>> SHADOW_OFFSET: 0
>> ==28210==Shadow memory range interleaves with an existing memory
>> mapping. ASan cannot proceed correctly. ABORTING.
>> ==28210==Process memory map follows:
>>      0x00008000-0x0000f000   /data/data/djpeg
>>      0x0000f000-0x00010000   /data/data/djpeg
>>      0x00010000-0x00011000
>>      0x40094000-0x400a7000   /system/bin/linker
>>      0x400a7000-0x400a8000   /system/bin/linker
>>      0x400a8000-0x400a9000   /system/bin/linker
>>      0x400a9000-0x400b5000
>>      0x400e7000-0x400e8000   /system/lib/libstdc++.so
>>      0x400e8000-0x400e9000   /system/lib/libstdc++.so
>>      0x400e9000-0x400ea000
>>      0x40110000-0x40125000   /system/lib/libm.so
>>      0x40125000-0x40126000   /system/lib/libm.so
>>      0x40126000-0x40127000
>>      0x40159000-0x4018b000   /data/data/libclang_rt.asan-arm-android.so
>>      0x4018b000-0x4018c000   /data/data/libclang_rt.asan-arm-android.so
>>      0x4018c000-0x4018d000   /data/data/libclang_rt.asan-arm-android.so
>>      0x4018d000-0x405b8000
>>      0x405b8000-0x405fb000   /system/lib/libc.so
>>      0x405fb000-0x405fe000   /system/lib/libc.so
>>      0x405fe000-0x40609000
>>      0x40609000-0x406a5000   /data/data/libjpeg.so
>>      0x406a5000-0x406a6000
>>      0x406a6000-0x406a7000   /data/data/libjpeg.so
>>      0x406a7000-0x406a8000   /data/data/libjpeg.so
>>      0x406a8000-0x406b4000   /dev/__properties__ (deleted)
>>      0x406e6000-0x406e8000
>>      0x4073e000-0x40740000
>>      0x40748000-0x4074a000
>>      0xbe8b7000-0xbe8d8000   [stack]
>>      0xffff0000-0xffff1000   [vectors]
>> ==28210==End of process memory map.
>>
>> Thanks,
>> Greg



More information about the llvm-dev mailing list