main.c   [plain text]



// BUILD:  $CC main.c -DRUN_DIR=$RUN_DIR -o $BUILD_DIR/insert_target.exe
// BUILD:  $CC foo.c -dynamiclib -install_name $RUN_DIR/libfoo.dylib -o $BUILD_DIR/libfoo.dylib
// BUILD:  $CC interposer.c -dynamiclib $BUILD_DIR/libfoo.dylib -install_name $RUN_DIR/libinterposer.dylib -o $BUILD_DIR/libinterposer.dylib
// BUILD:  $CC main.c $BUILD_DIR/libinterposer.dylib $BUILD_DIR/libfoo.dylib -DRUN_DIR=$RUN_DIR -o $BUILD_DIR/interpose_target.exe
// BUILD:  $DYLD_ENV_VARS_ENABLE $BUILD_DIR/insert_target.exe

// RUN:  ./insert_target.exe
// RUN:  DYLD_INSERT_LIBRARIES=$RUN_DIR/libfoo.dylib  ./insert_target.exe true
// RUN:  ./interpose_target.exe true

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <mach-o/dyld_priv.h>

#include "test_support.h"

int main(int argc, const char* argv[], const char* envp[], const char* apple[]) {
    bool actual = dyld_has_inserted_or_interposing_libraries();
    bool expected = (argc == 2) && (strcmp(argv[1], "true") == 0);

    if (actual != expected) {
        FAIL("dyld_has_inserted_or_interposing_libraries");
    }

    PASS("Success");
}