2011-12-12 9 views
10

के रूप में मैक बाइनरी लोड करें मैं बिना किसी स्रोत के बाइनरी निष्पादन योग्य के साथ कुछ रिवर्स इंजीनियरिंग कर रहा हूं। विंडोज़ पर मैं क्या कर सकता हूं लोडलोडर के साथ निष्पादन योग्य फ़ाइल (EXE) लोड करें, जैसे कि यह एक डीएलएल फ़ाइल थी। अगर लोड की गई फ़ाइल स्थानांतरित नहीं हो पाती है तो मैं अपने मॉड्यूल के लिए "स्पेस बनाने" के लिए बस अपने लोडर कोड को स्थानांतरित कर सकता हूं। जब मेरे पास बाइनरी लोड हो, तो मैं इसे अपने कार्यों को कॉल कर सकता हूं (मान लीजिए कि वे कहां हैं, निश्चित रूप से), और अन्य सामान भी करें।गतिशील लाइब्रेरी

क्या मैक पर समान या समान करने का कोई तरीका है? मेरे पास एक mach-o निष्पादन योग्य है, और मैं इसे लोड करना चाहता हूं क्योंकि यह गतिशील लाइब्रेरी (DYLIB) था। या निष्पादन योग्य को DYLIB में परिवर्तित करने का कोई तरीका है? वास्तविक निष्पादन योग्य और DYLIB के बीच अंतर क्या हैं?

उत्तर

5

ठीक है, इसलिए मैंने कुछ प्रयोग किए हैं, और इसे देखते हैं। फ़ाइल "bin1.c" शामिल हैं:

#include <stdio.h> 
int main() { 
    printf("I am bin1.\n"); 
    return 0; 
} 

और "bin2.c" है:

#include <stdio.h> 
#include <dlfcn.h> 
int main() { 
    printf("I am bin2.\n"); 

    void *l = dlopen("bin1", RTLD_NOW); 
    if (l == NULL) { 
     printf("dlopen failed: %s\n", dlerror()); 
     return -1; 
    } 

    void *f = dlsym(l, "main"); 
    if (f == NULL) { 
     printf("dlsym failed: %s\n", dlerror()); 
     return -1; 
    } 

    int (*main)() = f; 
    main(); 

    return 0; 
} 

पर मेरी मैक, सब ठीक संकलित करता है तथा वास्तव में अन्य निष्पादन लोड करता है के रूप में यह किसी लोड करने योग्य पुस्तकालय था, हालांकि

Johanka:Desktop newacc$ uname -a 
Darwin Johanka.local 11.3.0 Darwin Kernel Version 11.3.0: Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64 
Johanka:Desktop newacc$ gcc bin1.c -o bin1 && ./bin1 
I am bin1. 
Johanka:Desktop newacc$ gcc bin2.c -o bin2 && ./bin2 
I am bin2. 
I am bin1. 

सुनिश्चित नहीं हैं कि, इस पर सीमाएं हैं कि क्या है और इस गैर पुनर्निधारणीय बाइनरी साथ किया जा सकता है, तो: और मैं अन्य बाइनरी में मुख्य कार्य कॉल कर सकते हैं। लेकिन यह उदाहरण दिखाता है कि कम से कम कुछ मामलों में, यह संभव है।

संबंधित मुद्दे