Objective-C运行时hook函数



运行时-Runtime

消息机制 sel类型 (方法编号)

Person * p = [Person alloc];
[p eat:@"2"];
[p performSelector:@selector(eat)];

#import <objc/message.h>
objc_msgSend

Person *  p = objc_msgSend(objc_msgSend(objc_getClass("Person"), sel_registerName("alloc")), sel_registerName("init"));

运行时 #import <objc/runtime.h>

平时所编写的OC代码,在程序运行时都转成了C语言代码,Runtime属于OC的幕后工作

有什么用?字典转模型

#import "NSURL+hook.h"

NSURL *url = [NSURL HK_UrlWithString:@"http://baidu.com/好的“];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSLog(@"%@",request);


#import <Foundation/Foundation.h>

@interface NSURL (hook)
+ (instancetype)HK_UrlWithString:(NSString *)urlstr;


@end




#import "NSURL+hook.h"

@implementation NSURL (hook)

+ (instancetype)HK_UrlWithString:(NSString *)urlstr
{
NSURL *url = [NSURL HK_UrlWithString:urlstr];

if (url == nil)
{
NSLog(@"url  kongle ");
}
return url;
}


// 加载的时候
+ (void)load
{
Method urlStr = class_getClassMethod(self, @selector(URLWithString:));
Method hkurlStr = class_getClassMethod(self, @selector(HK_UrlWithString:));

method_exchangeImplementations(urlStr, hkurlStr);


NSLog(@"load");
}


@end



hook:钩子 面向切面编程
SEL:方法编号
IMP:方法实现(执行代码的指针)

—比如 :一本书 目录

标题 ———页码
SEL———IMP
二进制  数据、指令
装载 可执行文件装载进入内存



Loading Disqus comments...
Table of Contents