about summary refs log tree commit diff
path: root/frida_mode/test/osx-lib/harness2.c
diff options
context:
space:
mode:
Diffstat (limited to 'frida_mode/test/osx-lib/harness2.c')
-rw-r--r--frida_mode/test/osx-lib/harness2.c43
1 files changed, 36 insertions, 7 deletions
diff --git a/frida_mode/test/osx-lib/harness2.c b/frida_mode/test/osx-lib/harness2.c
index 83983c99..464614ee 100644
--- a/frida_mode/test/osx-lib/harness2.c
+++ b/frida_mode/test/osx-lib/harness2.c
@@ -5,15 +5,21 @@
 #include <dlfcn.h>
 
 
-extern void crashme(const uint8_t *Data, size_t Size);
+//typedef for our exported target function.
+typedef void (*CRASHME)(const uint8_t *Data, size_t Size);
+
+//globals
+CRASHME fpn_crashme = NULL;
+
 
 int LLVMFuzzerTestOneInput(const unsigned char* data, size_t size){
-    crashme(data, size);
+    fpn_crashme(data, size);
     return 0;
 }
 
-void run (int argc, const char * argv[])
+int main(int argc, const char * argv[])
 {
+
     for (int i = 1; i < argc; i++) {
         fprintf(stderr, "Running: %s\n", argv[i]);
         FILE *f = fopen(argv[i], "r");
@@ -29,12 +35,35 @@ void run (int argc, const char * argv[])
         free(buf);
         fprintf(stderr, "Done:    %s: (%zd bytes)\n", argv[i], n_read);
     }
+
+    return 0;
 }
 
-int main(int argc, const char * argv[])
-{
+__attribute__((constructor()))
+void constructor(void) {
+    // handles to required libs
+    void *dylib = NULL;
 
-    run(argc, argv);
+    dylib = dlopen("./libcrashme2.dylib", RTLD_NOW);
+    if (dylib == NULL)
+    {
 
-    return 0;
+        printf("[-] Failed to load lib\n");
+        printf("[-] Dlerror: %s\n", dlerror());
+        exit(1);
+
+    }
+
+    printf("[+] Resolve function\n");
+
+    fpn_crashme = (CRASHME)dlsym(dylib, "crashme");
+    if (!fpn_crashme)
+    {
+
+        printf("[-] Failed to find function\n");
+        exit(1);
+
+    }
+
+    printf("[+] Found function.\n");
 }