$ chmod +x libsomelibrary.so
$ ./libsomelibrary.so
Segmentation fault
$ gcc -O2 http://vi-server.org/vi/bin/rundll.c -ldl -o rundll
$ ./rundll ./libsomelibrary.so main
(application starts normally)
爲什麼我不能只啓動libsomelibrary.so,如果它有可用的入口點?爲什麼我無法在Linux中直接啓動共享庫?
rundll.c
很簡單:
void* d = dlopen(argv[1], RTLD_LAZY);
void* m = dlsym(d, argv[2]);
return ((int(*)(int,char**,char**))m)(argc-2, argv+2, envp);
爲什麼不能在內部使用嘗試加載一個二進制文件時?
此功能非常有用:作爲一個庫是NS插件,但是如果它是「主」開始的,它只是桌面GUI應用程序,它更易於調試。並且不需要有多個項目,靜態庫和依賴關係。 – 2010-10-05 01:11:43