0x00 崩溃重现
被 Hook
的类,是这样的:
@interface ViewController : UIViewController
@end
@implementation ViewController
- (void)loadView {
[super loadView];
NSLog(@"%s", __func__);
}
- (void)test {
NSLog(@"%s", __func__);
}
- (void)viewDidLoad {
[super viewDidLoad];
[self test];
}
@end
写的 Hook
逻辑是这样的:
@interface Hook : NSObject
@end
#import <objc/runtime.h>
@implementation Hook
+ (void)load {
NSLog(@"%s", __func__);
Class class = NSClassFromString(@"ViewController");
Method originalMethod = class_getInstanceMethod(class, NSSelectorFromString(@"loadView"));
Method swizzledMethod = class_getInstanceMethod([self class], NSSelectorFromString(@"swizzled_loadView"));
method_exchangeImplementations(originalMethod, swizzledMethod);
}
- (void)swizzled_loadView {
NSLog(@"%s", __func__);
[self swizzled_loadView];
}
@end
真机运行后,是这样的,直接崩溃:
+[Hook load]
-[Hook swizzled_loadView]
-[ViewController swizzled_loadView]: unrecognized selector sent to instance 0x102e08dd0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController swizzled_loadView]: unrecognized selector sent to instance 0x102e08dd0'
0x00 换个方式
写的 Hook
逻辑是这样的:
@interface UIViewController (Hook)
@end
#import <objc/runtime.h>
@implementation UIViewController (Hook)
+ (void)load {
NSLog(@"%s", __func__);
Class class = NSClassFromString(@"ViewController");
Method originalMethod = class_getInstanceMethod(class, NSSelectorFromString(@"loadView"));
Method swizzledMethod = class_getInstanceMethod([self class], NSSelectorFromString(@"swizzled_loadView"));
method_exchangeImplementations(originalMethod, swizzledMethod);
}
- (void)swizzled_loadView {
NSLog(@"%s", __func__);
[self swizzled_loadView];
UIView *view = [[UIView alloc] init];
view. frame = CGRectMake (100, 200, 200, 200);
view.backgroundColor = [UIColor redColor];
[self.view addSubview:view];
}
@end
真机运行后,不崩溃了:
+[UIViewController(Hook) load]
-[UIViewController(Hook) swizzled_loadView]
-[ViewController loadView]
-[ViewController test]
并且成功,添加了 view
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » iOS Hook 崩溃
发表评论 取消回复