前面已经写了几篇文章介绍MangoFix了,一个语法和Objective-C非常相似的SDL,用来对iOS App进行热修复。但是MangoFix1.x版本中对于需要用到的C函数要进行预埋,而哪些C函数需要进行预埋,这其实是不可预测的。所以MangoFix在2.0中会添加 C函数声明即用功能,这就需要用到dlsym函数,但是使用了这个函数后在App Store是审核不过的,所以最近写了一个小工具,功能和dlsym一样,即通过动态链接的C函数名字符串,获取函数指针。这个小工具就是:symdl。 GitHub地址:https://github.com/YPLiang19/symdl
下面就是对symdl的介绍:
symdl
symdl is a simple little tool, its function is very similar to dlsym, with symdl, you can pass in the dynamic linked C function name string, get the function pointer, so as to achieve the dynamic call of C function.
Example
#import <symdl/symdl.h>
#import <dlfcn.h>
int main(){
typedef void * (*MyFunc)(const char *__path, int __mode);
const char *func_name = "dlopen";
MyFunc dlopen_ptr = symdl(func_name);
if (dlopen_ptr) {
dlopen_ptr("your path",RTLD_LAZY);
}
}
Installation
CocoaPods
- Add
pod 'symdl'
to your Podfile. - Run
pod install
orpod update
. - Import
<symdl/symdl.h>