]>
git.saurik.com Git - apple/dyld.git/blob - testing/test-cases/amfi-interpose.dtest/main.c
1 // BOOT_ARGS: dyld_flags=2
3 // BUILD: $CC interposer.c -dynamiclib -o $BUILD_DIR/libmyalloc.dylib -install_name $RUN_DIR/libmyalloc.dylib
4 // BUILD: $CC main.c $BUILD_DIR/libmyalloc.dylib -o $BUILD_DIR/amfi-interpose.exe
5 // BUILD: $DYLD_ENV_VARS_ENABLE $BUILD_DIR/amfi-interpose.exe
7 // RUN: DYLD_AMFI_FAKE=0x7F ./amfi-interpose.exe
8 // RUN: DYLD_AMFI_FAKE=0x3F ./amfi-interpose.exe
11 // Tests that AMFI_DYLD_OUTPUT_ALLOW_LIBRARY_INTERPOSING bit from AMFI blocks interposing
23 printf("[BEGIN] amfi-interpose\n");
25 // interposed malloc() doubles alloction size and prefills allocation with '#'
26 char* p1
= malloc(10);
27 bool interposed
= (strncmp(p1
, "####################", 20) == 0);
29 const char* amfiBits
= getenv("DYLD_AMFI_FAKE");
30 if ( amfiBits
== NULL
) {
31 printf("[FAIL] amfi-interpose: DYLD_AMFI_FAKE not setn\n");
34 #ifdef AMFI_RETURNS_INTERPOSING_FLAG
35 bool allowInterposing
= (strcmp(amfiBits
, "0x7F") == 0);
37 bool allowInterposing
= true;
40 if ( interposed
== allowInterposing
)
41 printf("[PASS] amfi-interpose\n");
42 else if ( interposed
)
43 printf("[FAIL] amfi-interpose: malloc interposed, but amfi said to block it\n");
45 printf("[FAIL] amfi-interpose: malloc not interposed, but amfi said to allow it\n");