*Test code, asan_memcpy.cpp:*
*#include <stdio.h>#include <stdlib.h>int main(){ int *array = (int
*)malloc(sizeof(int) * 100); printf("Now should be an error:
memcpy-param-overlap\n"); memcpy(array, array+1, sizeof(int)*8);
return 0;}*
*Android.mk*
*include $(CLEAR_VARS)LOCAL_SRC_FILES := asan_memcpy.cppLOCAL_MODULE_TAGS
:= engLOCAL_ADDRESS_SANITIZER:=trueLOCAL_MODULE := asan_memcpyinclude
$(BUILD_EXECUTABLE)*
*Run asanwrapper asan_memcpy in adb shell, no error that Asan detected. The
disassemable of asan_memcpy as below:*
*000006cc <main>:#include <stdio.h>#include <stdlib.h>int main(){ 6cc:
b5b0 push {r4, r5, r7, lr} 6ce: af02 add r7,
sp, #8 6d0: b0c4 sub sp, #272 ; 0x110 6d2:
466c mov r4, sp 6d4: f024 041f bic.w r4, r4,
#31 6d8: 46a5 mov sp, r4 6da: 488a ldr
r0, [pc, #552] ; (904 <main+0x238>) 6dc: 498a ldr r1,
[pc, #552] ; (908 <main+0x23c>) 6de: 4479 add r1,
pc 6e0: 5840 ldr r0, [r0, r1] 6e2: 6800
ldr r0, [r0, #0] 6e4: 9043 str r0, [sp, #268] ;
0x10c 6e6: a818 add r0, sp, #96 ; 0x60 6e8: f100
0220 add.w r2, r0, #32 6ec: 4613 mov r3, r2 6ee:
f100 0c60 add.w ip, r0, #96 ; 0x60 6f2: 4686
mov lr, r0 6f4: f648 24b3 movw r4, #35507 ;
0x8ab3 6f8: f2c4 14b5 movt r4, #16821 ; 0x41b5 6fc:
9418 str r4, [sp, #96] ; 0x60 6fe: 4c83
ldr r4, [pc, #524] ; (90c <main+0x240>) 700: 440c add
r4, r1 702: 9419 str r4, [sp, #100] ; 0x64 704:
4c82 ldr r4, [pc, #520] ; (910 <main+0x244>) 706:
5861 ldr r1, [r4, r1] 708: 911a str r1,
[sp, #104] ; 0x68 70a: 08c0 lsrs r0, r0, #3 70c:
4601 mov r1, r0 70e: f04f 34f1 mov.w r4,
#4059165169 ; 0xf1f1f1f1 712: 6004 str r4, [r0, #0] 714:
f24f 4404 movw r4, #62468 ; 0xf404 718: f2cf 44f4
movt r4, #62708 ; 0xf4f4 71c: 6044 str r4, [r0,
#4] 71e: f04f 35f2 mov.w r5, #4076008178 ; 0xf2f2f2f2 722:
6085 str r5, [r0, #8] 724: 60c4 str r4,
[r0, #12] 726: f04f 34f3 mov.w r4, #4092851187 ;
0xf3f3f3f3 72a: 6104 str r4, [r0, #16] 72c:
4610 mov r0, r2 72e: 08d2 lsrs r2, r2,
#3 730: 7812 ldrb r2, [r2, #0] 732: 2a00
cmp r2, #0 734: f8cd e05c str.w lr, [sp, #92] ; 0x5c 738:
f8cd c058 str.w ip, [sp, #88] ; 0x58 73c: 9015
str r0, [sp, #84] ; 0x54 73e: 9314 str r3, [sp,
#80] ; 0x50 740: 9113 str r1, [sp, #76] ; 0x4c 742:
9212 str r2, [sp, #72] ; 0x48 744: d00c
beq.n 760 <main+0x94> 746: e7ff b.n 748
<main+0x7c> 748: 9815 ldr r0, [sp, #84] ; 0x54 74a:
f000 0107 and.w r1, r0, #7 74e: 3103 adds r1,
#3 750: 9a12 ldr r2, [sp, #72] ; 0x48 752:
b253 sxtb r3, r2 754: 4299 cmp r1, r3 756:
db03 blt.n 760 <main+0x94> 758: e7ff b.n 75a
<main+0x8e> 75a: 9815 ldr r0, [sp, #84] ; 0x54 75c:
f7ff ef20 blx 5a0 <__asan_report_store4@plt> 760:
2000 movs r0, #0 762: 9914 ldr r1, [sp,
#80] ; 0x50 764: 6008 str r0, [r1, #0] 766: f44f
70c8 mov.w r0, #400 ; 0x190 int *array = (int
*)malloc(sizeof(int) * 100); 76a: f7ff ef20 blx 5ac
<malloc@plt> 76e: 9916 ldr r1, [sp, #88] ; 0x58 770:
9a16 ldr r2, [sp, #88] ; 0x58 772: 08d3
lsrs r3, r2, #3 774: 781b ldrb r3, [r3, #0] 776:
2b00 cmp r3, #0 778: 9011 str r0, [sp,
#68] ; 0x44 77a: 9110 str r1, [sp, #64] ; 0x40 77c:
930f str r3, [sp, #60] ; 0x3c 77e: d00c
beq.n 79a <main+0xce> 780: e7ff b.n 782
<main+0xb6> 782: 9810 ldr r0, [sp, #64] ; 0x40 784:
f000 0107 and.w r1, r0, #7 788: 3103 adds r1,
#3 78a: 9a0f ldr r2, [sp, #60] ; 0x3c 78c:
b253 sxtb r3, r2 78e: 4299 cmp r1, r3 790:
db03 blt.n 79a <main+0xce> 792: e7ff b.n 794
<main+0xc8> 794: 9810 ldr r0, [sp, #64] ; 0x40 796:
f7ff ef04 blx 5a0 <__asan_report_store4@plt> 79a:
9811 ldr r0, [sp, #68] ; 0x44 79c: 9916
ldr r1, [sp, #88] ; 0x58 79e: 6008 str r0, [r1,
#0] printf("Now should be an error: memcpy-param-overlap\n"); 7a0:
4a5c ldr r2, [pc, #368] ; (914 <main+0x248>) 7a2:
4b5d ldr r3, [pc, #372] ; (918 <main+0x24c>) 7a4:
447b add r3, pc 7a6: 18d0 adds r0, r2,
r3 7a8: f7ff ef06 blx 5b8 <printf@plt> memcpy(array,
array+1, sizeof(int)*8); 7ac: 9916 ldr r1, [sp, #88] ;
0x58 7ae: 9a16 ldr r2, [sp, #88] ; 0x58 7b0:
08d3 lsrs r3, r2, #3 7b2: 781b ldrb r3, [r3,
#0] 7b4: 2b00 cmp r3, #0 7b6: 900e str
r0, [sp, #56] ; 0x38 7b8: 910d str r1, [sp, #52] ;
0x34 7ba: 930c str r3, [sp, #48] ; 0x30 7bc:
d00c beq.n 7d8 <main+0x10c> 7be: e7ff b.n 7c0
<main+0xf4> 7c0: 980d ldr r0, [sp, #52] ; 0x34 7c2:
f000 0107 and.w r1, r0, #7 7c6: 3103 adds r1,
#3 7c8: 9a0c ldr r2, [sp, #48] ; 0x30 7ca:
b253 sxtb r3, r2 7cc: 4299 cmp r1, r3 7ce:
db03 blt.n 7d8 <main+0x10c> 7d0: e7ff b.n 7d2
<main+0x106> 7d2: 980d ldr r0, [sp, #52] ; 0x34 7d4:
f7ff eef6 blx 5c4 <__asan_report_load4@plt> 7d8:
9816 ldr r0, [sp, #88] ; 0x58 7da: 6801
ldr r1, [r0, #0] 7dc: 460a mov r2, r1 7de:
460b mov r3, r1 7e0: f101 0c04 add.w ip, r1,
#4 7e4: 46e6 mov lr, ip 7e6: 08cc lsrs r4,
r1, #3 7e8: 7824 ldrb r4, [r4, #0] 7ea: 2c00
cmp r4, #0 7ec: 910b str r1, [sp, #44] ; 0x2c 7ee:
920a str r2, [sp, #40] ; 0x28 7f0: 9309
str r3, [sp, #36] ; 0x24 7f2: f8cd e020 str.w lr, [sp,
#32] 7f6: f8cd c01c str.w ip, [sp, #28] 7fa: 9406
str r4, [sp, #24] 7fc: d00c beq.n 818
<main+0x14c> 7fe: e7ff b.n 800 <main+0x134> 800:
980b ldr r0, [sp, #44] ; 0x2c 802: f000 0107
and.w r1, r0, #7 806: 9a06 ldr r2, [sp, #24] 808:
b253 sxtb r3, r2 80a: 4299 cmp r1, r3 80c:
db04 blt.n 818 <main+0x14c> 80e: e7ff b.n 810
<main+0x144> 810: 2120 movs r1, #32 812: 980b
ldr r0, [sp, #44] ; 0x2c 814: f7ff eedc blx 5d0
<__asan_report_store_n@plt> 818: 980a ldr r0, [sp, #40]
; 0x28 81a: f100 011f add.w r1, r0, #31 81e: 460a
mov r2, r1 820: 08c9 lsrs r1, r1, #3 822:
7809 ldrb r1, [r1, #0] 824: 2900 cmp r1,
#0 826: 9205 str r2, [sp, #20] 828: 9104
str r1, [sp, #16] 82a: d00c beq.n 846
<main+0x17a> 82c: e7ff b.n 82e <main+0x162> 82e:
9805 ldr r0, [sp, #20] 830: f000 0107 and.w r1,
r0, #7 834: 9a04 ldr r2, [sp, #16] 836: b253
sxtb r3, r2 838: 4299 cmp r1, r3 83a: db04
blt.n 846 <main+0x17a> 83c: e7ff b.n 83e
<main+0x172> 83e: 2120 movs r1, #32 840: 9805
ldr r0, [sp, #20] 842: f7ff eec6 blx 5d0
<__asan_report_store_n@plt> 846: 9808 ldr r0, [sp,
#32] 848: 9908 ldr r1, [sp, #32] 84a: 08ca
lsrs r2, r1, #3 84c: 7812 ldrb r2, [r2, #0] 84e:
2a00 cmp r2, #0 850: 9003 str r0, [sp,
#12] 852: 9202 str r2, [sp, #8] 854: d00c
beq.n 870 <main+0x1a4> 856: e7ff b.n 858
<main+0x18c> 858: 9803 ldr r0, [sp, #12] 85a: f000
0107 and.w r1, r0, #7 85e: 9a02 ldr r2, [sp,
#8] 860: b253 sxtb r3, r2 862: 4299 cmp
r1, r3 864: db04 blt.n 870 <main+0x1a4> 866:
e7ff b.n 868 <main+0x19c> 868: 2120 movs r1,
#32 86a: 9803 ldr r0, [sp, #12] 86c: f7ff eeb6
blx 5dc <__asan_report_load_n@plt> 870: 9808 ldr r0,
[sp, #32] 872: f100 011f add.w r1, r0, #31 876: 460a
mov r2, r1 878: 08c9 lsrs r1, r1, #3 87a:
7809 ldrb r1, [r1, #0] 87c: 2900 cmp r1,
#0 87e: 9201 str r2, [sp, #4] 880: 9100
str r1, [sp, #0] 882: d00c beq.n 89e <main+0x1d2> 884:
e7ff b.n 886 <main+0x1ba> 886: 9801 ldr r0,
[sp, #4] 888: f000 0107 and.w r1, r0, #7 88c: 9a00
ldr r2, [sp, #0] 88e: b253 sxtb r3, r2 890:
4299 cmp r1, r3 892: db04 blt.n 89e
<main+0x1d2> 894: e7ff b.n 896 <main+0x1ca> 896:
2120 movs r1, #32 898: 9801 ldr r0, [sp,
#4] 89a: f7ff eea0 blx 5dc <__asan_report_load_n@plt> 89e:
9807 ldr r0, [sp, #28] 8a0: f960 0a8f vld1.32
{d16-d17}, [r0] 8a4: 9909 ldr r1, [sp, #36] ;
0x24 8a6: f941 0a8f vst1.32 {d16-d17}, [r1] 8aa: f101 0210
add.w r2, r1, #16 8ae: f100 0310 add.w r3, r0, #16 8b2: f963
0a8f vld1.32 {d16-d17}, [r3] 8b6: f942 0a8f vst1.32
{d16-d17}, [r2] 8ba: f243 620e movw r2, #13838 ;
0x360e 8be: f2c4 52e0 movt r2, #17888 ; 0x45e0 return
0; 8c2: 9b17 ldr r3, [sp, #92] ; 0x5c 8c4:
601a str r2, [r3, #0] 8c6: efc0 0050 vmov.i32
q8, #0 ; 0x00000000 8ca: 9a13 ldr r2, [sp, #76] ;
0x4c 8cc: f942 0a8f vst1.32 {d16-d17}, [r2] 8d0: f04f 0c00
mov.w ip, #0 8d4: f8c2 c010 str.w ip, [r2, #16] 8d8: f8df
c028 ldr.w ip, [pc, #40] ; 904 <main+0x238> 8dc: f8df
e03c ldr.w lr, [pc, #60] ; 91c <main+0x250> 8e0:
44fe add lr, pc 8e2: f85c c00e ldr.w ip, [ip,
lr] 8e6: f8dc c000 ldr.w ip, [ip] 8ea: f8dd e10c ldr.w
lr, [sp, #268] ; 0x10c 8ee: 45f4 cmp ip, lr 8f0:
d105 bne.n 8fe <main+0x232> 8f2: e7ff b.n 8f4
<main+0x228> 8f4: 2000 movs r0, #0 8f6: f1a7 0408
sub.w r4, r7, #8 8fa: 46a5 mov sp, r4 8fc:
bdb0 pop {r4, r5, r7, pc} 8fe: f7ff ee74 blx 5e8
<__stack_chk_fail@plt> 902: bf00 nop 904: fff4
ffff ; <UNDEFINED> instruction: 0xfff4ffff 908:
18e2 adds r2, r4, r3 90a: 0000 movs r0,
r0 90c: ea84 ffff ; <UNDEFINED> instruction:
0xea84ffff 910: fff0 ffff ; <UNDEFINED>
instruction: 0xfff0ffff 914: ea1c ffff ;
<UNDEFINED> instruction: 0xea1cffff 918: 181c adds r4, r3,
r0 91a: 0000 movs r0, r0 91c: 16e0 asrs r0,
r4, #27*
*I thought memcpy disassemable should have "blx 32c <memcpy@plt>" line,
so it can call the interceptors in libasan_preload.so, but now seems we got
some buildin functions in Clang?* *The same happened at memmove, that the
interceptors not working now.*
--
You received this message because you are subscribed to the Google Groups
"address-sanitizer" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.