| #include <stdio.h> |
| #include <errno.h> |
| #include <dlfcn.h> |
| #include <stdlib.h> |
| |
| int main(int argc, char **argv) { |
| |
| if (!getenv("TEST_DLOPEN_TARGET")) { |
| |
| fprintf(stderr, "Error: TEST_DLOPEN_TARGET not set!\n"); |
| return 1; |
| |
| } |
| |
| void *lib = dlopen(getenv("TEST_DLOPEN_TARGET"), RTLD_LAZY); |
| if (!lib) { |
| |
| perror(dlerror()); |
| return 2; |
| |
| } |
| |
| int (*func)(int, char **) = dlsym(lib, "main_exported"); |
| if (!func) { |
| |
| fprintf(stderr, "Error: main_exported not found!\n"); |
| return 3; |
| |
| } |
| |
| // must use deferred forkserver as otherwise afl++ instrumentation aborts |
| // because all dlopen() of instrumented libs must be before the forkserver |
| __AFL_INIT(); |
| |
| fprintf(stderr, "Running main_exported\n"); |
| return func(argc, argv); |
| |
| } |
| |