1*08b48e0bSAndroid Build Coastguard Worker #include <stdio.h> 2*08b48e0bSAndroid Build Coastguard Worker #include <errno.h> 3*08b48e0bSAndroid Build Coastguard Worker #include <dlfcn.h> 4*08b48e0bSAndroid Build Coastguard Worker #include <stdlib.h> 5*08b48e0bSAndroid Build Coastguard Worker main(int argc,char ** argv)6*08b48e0bSAndroid Build Coastguard Workerint main(int argc, char **argv) { 7*08b48e0bSAndroid Build Coastguard Worker 8*08b48e0bSAndroid Build Coastguard Worker if (!getenv("TEST_DLOPEN_TARGET")) { 9*08b48e0bSAndroid Build Coastguard Worker 10*08b48e0bSAndroid Build Coastguard Worker fprintf(stderr, "Error: TEST_DLOPEN_TARGET not set!\n"); 11*08b48e0bSAndroid Build Coastguard Worker return 1; 12*08b48e0bSAndroid Build Coastguard Worker 13*08b48e0bSAndroid Build Coastguard Worker } 14*08b48e0bSAndroid Build Coastguard Worker 15*08b48e0bSAndroid Build Coastguard Worker void *lib = dlopen(getenv("TEST_DLOPEN_TARGET"), RTLD_LAZY); 16*08b48e0bSAndroid Build Coastguard Worker if (!lib) { 17*08b48e0bSAndroid Build Coastguard Worker 18*08b48e0bSAndroid Build Coastguard Worker perror(dlerror()); 19*08b48e0bSAndroid Build Coastguard Worker return 2; 20*08b48e0bSAndroid Build Coastguard Worker 21*08b48e0bSAndroid Build Coastguard Worker } 22*08b48e0bSAndroid Build Coastguard Worker 23*08b48e0bSAndroid Build Coastguard Worker int (*func)(int, char **) = dlsym(lib, "main_exported"); 24*08b48e0bSAndroid Build Coastguard Worker if (!func) { 25*08b48e0bSAndroid Build Coastguard Worker 26*08b48e0bSAndroid Build Coastguard Worker fprintf(stderr, "Error: main_exported not found!\n"); 27*08b48e0bSAndroid Build Coastguard Worker return 3; 28*08b48e0bSAndroid Build Coastguard Worker 29*08b48e0bSAndroid Build Coastguard Worker } 30*08b48e0bSAndroid Build Coastguard Worker 31*08b48e0bSAndroid Build Coastguard Worker // must use deferred forkserver as otherwise AFL++ instrumentation aborts 32*08b48e0bSAndroid Build Coastguard Worker // because all dlopen() of instrumented libs must be before the forkserver 33*08b48e0bSAndroid Build Coastguard Worker __AFL_INIT(); 34*08b48e0bSAndroid Build Coastguard Worker 35*08b48e0bSAndroid Build Coastguard Worker fprintf(stderr, "Running main_exported\n"); 36*08b48e0bSAndroid Build Coastguard Worker return func(argc, argv); 37*08b48e0bSAndroid Build Coastguard Worker 38*08b48e0bSAndroid Build Coastguard Worker } 39*08b48e0bSAndroid Build Coastguard Worker 40