objc->cpp的对应关系。
通过clang可以方便地把objc的语法转成cpp:
clang -rewrite-objc xxx.m
所以可以很方便的看到objc与cpp之间的对应关系。
最近主要工作在符号混淆上,但是踩到了有关selector和runtime的混淆的坑。
NSClassFromString:
id obj = [[NSClassFromString(@"MyClass") alloc] init];
id obj = ((id (*)(id, SEL))(void *)objc_msgSend)((id)((id (*)(id, SEL))(void *)objc_msgSend)((id)NSClassFromString((NSString *)&__NSConstantStringImpl__var_folders_92_dfj9jsb51kj3lh2zssbw0dzm0000gn_T_1_38e0f0_mi_0), sel_registerName("alloc")), sel_registerName("init"));
NSStringFromClass:
NSString *obj = NSStringFromClass([MyClass class]);
NSString *obj = NSStringFromClass(((Class (*)(id, SEL))(void *)objc_msgSend)((id)objc_getClass("MyClass"), sel_registerName("class")));
Selector:
SEL sel = @selector(mySelector);
SEL sel = sel_registerName("mySelector");
clang -rewrite-objc xxx.m
所以可以很方便的看到objc与cpp之间的对应关系。
最近主要工作在符号混淆上,但是踩到了有关selector和runtime的混淆的坑。
NSClassFromString:
id obj = [[NSClassFromString(@"MyClass") alloc] init];
id obj = ((id (*)(id, SEL))(void *)objc_msgSend)((id)((id (*)(id, SEL))(void *)objc_msgSend)((id)NSClassFromString((NSString *)&__NSConstantStringImpl__var_folders_92_dfj9jsb51kj3lh2zssbw0dzm0000gn_T_1_38e0f0_mi_0), sel_registerName("alloc")), sel_registerName("init"));
NSStringFromClass:
NSString *obj = NSStringFromClass([MyClass class]);
NSString *obj = NSStringFromClass(((Class (*)(id, SEL))(void *)objc_msgSend)((id)objc_getClass("MyClass"), sel_registerName("class")));
Selector:
SEL sel = @selector(mySelector);
SEL sel = sel_registerName("mySelector");
评论
发表评论