좋아요, 그래서 몇 가지 실험을 해보았습니다. 파일은 "bin1.c는"이 포함되어
가와 "bin2.c는"
#include <stdio.h>
int main() {
printf("I am bin1.\n");
return 0;
}
:
내 맥에
#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.
확실하지과 : 나는 다른 바이너리의 주요 함수를 호출 할 수 있습니다. 그러나이 예는 적어도 어떤 경우에는 가능하다는 것을 보여줍니다.