比如,我使用class dump导出了一些h文件,对于其中的类,如果在Xcode的文档中找不到,那肯定是私有类,那如何查找这个类对应的framework的名字呢,编写tweak的时候要导入这个私有类的吧?
有可能我理解错误,比如我class dump了AppStore,里面有个类ASIPhoneSearchViewController,我在文档中找不到其定义,那么我直接编写tweak,想在这个类的某些方法上弹出alert view来判断是否在我进行一些操作时候方法得到了调用,但结果是alert没弹出来,所以我在怀疑是不是因为没有导入需要的private framework,或者这么说,如何判断tweak被正常加载了?谢了:)
grep一下全系统,看看ASIPhoneSearchViewController
都在哪些二进制文件里出现过,然后找出其中的库文件就是了
谢谢大神,就是说将application文件夹中的所有二进制和cache中的dylib都搜索下?会很费时间吧,我试试。
grep
很快,5分钟以内搞定
okay,thanks,我试试。
Updated: grep只在AppStore.app中找到了一个匹配,后来我试了试其他的方法,都可以弹出alert,所以由此推断之前我认为调用的那几个方法并没有被真正调用,再次感谢狗神(虽然不太明白大家为什么这么叫你,搜索也无果,哈哈)
那它就是AppStore里的一个原生类,而不是来自外部framework的类,你直接class-dump出AppStore的头文件,就可以找到它了
我用grep找可执行文件位置,半个小时了还没有结果,是不是有问题啊?
完整命令发出来
iPhone-5S:~ root# grep -r PSUIAboutController
狗神大大,你说5分钟之内搞定,我等了一个多小时了,还是没结果,why?
你还没指定目录吧
不指定目录不应该就是搜索当前目录吗?
命令不太对,@byczd 说的对啊,没有指定目录。当前目录也应该用.表示吧。
参考这个:
FunMaker-5:~ root# grep -r initWithAccountID:defaults:service: /System/Library/
搜索当前目录后面确实要加. 非常感谢!
呃。拿到IMP指针用dladdr不行吗
用iOS自带的方法:
+ (NSBundle *)bundleForClass:(Class)aClass;
返回NSBundle实例,然后打印 NSBundle 的 bundlePath 就知道了。