在iphone上使用动态库的多为dylib文件,这些文件使用标准的dlopen方式来使用是可以的。那相同的在使用framework文件也可以当做动态库的方式来动态加载,这样就可以比较自由的使用apple私有的framework了。
dlopen是打开库文件
dlsym是获取函数地址
dlclose是关闭。
当然,要使用这种方式也是有明显缺陷的,那就是你要知道函数名和参数,否则无法继续。
私有库的头文件可以使用class dump的方式导出来,这个详细的就需要google了。
下面是两个使用的例子
1: 这是使用coreTelephony.framework获取imsi
#define PRIVATE_PATH "/System/Library/PrivateFrameworks/CoreTelephony.framework/CoreTelephony"
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
#if !TARGET_IPHONE_SIMULATOR
void *kit = dlopen(PRIVATE_PATH,RTLD_LAZY);
NSString *imsi = nil;
int (*CTSIMSupportCopyMobileSubscriberIdentity)() = dlsym(kit, "CTSIMSupportCopyMobileSubscriberIdentity");
imsi = (NSString*)CTSIMSupportCopyMobileSubscriberIdentity(nil);
dlclose(kit);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"IMSI"
message:imsi
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
#endif
}
2:这是使用SpringBoardServices.framework来设置飞行模式开关
#ifdef SUPPORTS_UNDOCUMENTED_API
#define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices"
#define UIKITPATH "/System/Library/Framework/UIKit.framework/UIKit"
// Don't use this code in real life, boys and girls. It is not App Store friendly.
// It is, however, really nice for testing callbacks
+ (void) setAirplaneMode: (BOOL)status;
{
mach_port_t *thePort;
void *uikit = dlopen(UIKITPATH, RTLD_LAZY);
int (*SBSSpringBoardServerPort)() = dlsym(uikit, "SBSSpringBoardServerPort");
thePort = (mach_port_t *)SBSSpringBoardServerPort();
dlclose(uikit);
// Link to SBSetAirplaneModeEnabled
void *sbserv = dlopen(SBSERVPATH, RTLD_LAZY);
int (*setAPMode)(mach_port_t* port, BOOL status) = dlsym(sbserv, "SBSetAirplaneModeEnabled");
setAPMode(thePort, status);
dlclose(sbserv);
}
#endif
分享到:
相关推荐
详情请参看 http://blog.csdn.net/hursing/article/details/8688861
自定义弹框公告内容,时间锁,自定义跳转官网链接,锁库名等等 ...v-team-safe = 自定义动态库名称(本地验证 无需网络 未验证改名闪退)【非必填 可留空或不输入】 注意:key就是v-team-***,value就是你要显示的内容
xcode4创建dylib动态库的demo和工程模板
ipa包重签名shell脚本(包括对dylib和framework重签名).rar
苹果iOS ipa安装包动态库注入工具,十分方便,注入dylib动态库
ipa包重签名shell脚本(包括对dylib和framework重签名)
IOS静态库和Framework区别 一、什么是库? 库是共享程序代码的方式,一般分为静态库和动态库。 二、静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。 动态库:链接...
insert_dylib, 命令行 实用工具,用于将dylib加载命令插入到 Mach O 二进制文件中 insert_dylib命令行 实用工具,用于将dylib加载命令插入到 mach o 二进制文件中。执行以下( 如果二进制是 fat,那么每个arch都是):...
Windows下动态库是以.lib和.dll为扩展名的,而在Mac下,库是以.a和.dylib为扩展名的,Linux下则是以.a和.so为扩展名的,分别如下所示
Proclivity-重新加载 无需重新加载即可加载 dylib! 去做 支持重新加载现有的动态库 找到解除 dylib 的可靠方法
Inject_dylib(indy)允许您加载动态库并在另一个进程中调用函数。 Indy当前支持目标为32位和64位x86进程,可与沙箱互操作,并且已在OS X 10.10上进行了测试。 # include " indy.h " // In your injector process: ...
tensorflow 1.14 Mac 系统本地跑需要的dylib
dylib 一组帮助解析动态库的名称和路径的助手。用法一个简单的用法示例: import 'package:dylib/dylib.dart' ;print ( resolveDylibPath ( 'foo' ));// android: libfoo.so// ios: libfoo.dylib// linux: libfoo.so...
DyLibLoader 适用于C ++的动态库加载器
ios开发遇到的找不到libz.dylib,libsqlite3.0.dylib,libc++.dylib等
今天编译完程序运行的时候,报一个错误,说库文件不存在,然后我看了一下,程序的当前路径下就有这个库文件,我以前...众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当
将整个框架(或仅动态库二进制文件即可)和所有依赖的dylib复制到一个文件夹中(将其称为DYLIBS)。 您可能需要其他XCode股票swift dylib,可以在/Applications/Xcode.app/Contents/Developer/Toolchains/...
app2dylib 离线包,下载直接xcode 可编译,app2dylib.zip,app2dylib.zip,app2dylib.zip
dumpdecrypted_8.dylib砸壳插件,亲测使用iso8可用,需要的请下载