我知道方法困惑方面有无数资源。但是,是否有可能从私有(private)API中混淆方法?问题是没有头文件。我想从PrivateFramework中的私有(private)类中筛选一个方法,例如(随机示例)Message.framework方法
这是用于个人测试,我知道它将被苹果遗忘。
最佳答案
您可以使用NSClassFromString
来获取Class
并使用运行时库来执行方法转换。不需要头文件。您只需要知道类名和方法签名即可。
当sel_getUid
给出有关@selector(somePrivateMethod)
的错误信息时,可以使用somePrivateMethod
无效的选择器(因为 header 不可用)
来自my Xcode plugin的代码
SEL sel = sel_getUid("codeDiagnosticsAtLocation:withCurrentFileContentDictionary:forIndex:");
Class IDEIndexClangQueryProviderClass = NSClassFromString(@"IDEIndexClangQueryProvider");
Method method = class_getInstanceMethod(IDEIndexClangQueryProviderClass, sel);
IMP originalImp = method_getImplementation(method);
IMP imp = imp_implementationWithBlock(^id(id me, id loc, id dict, IDEIndex *idx) {
id ret = ((id (*)(id,SEL,id,id,id))originalImp)(me, sel, loc, dict, idx);
// do work
return ret;
});
method_setImplementation(method, imp);
关于ios - 淹没私有(private)框架iOS API的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24442348/