之前实现了大大书中hook springboard的实例,但是如果我们针对的目标是一款软件,当我们要hook其中的某一个类的时候,会import相应的头文件,但是此时在编译的时候就找不到该文件了,请问这种情况如何处理?,是将class-dump得出的头文件加入到/theos/include下吗?,要是改头文件中又引用了其他的头文件了?
如果只是hook一个class,而不需要调用这个class的任何方法的话,是不需要特别import任何头文件的
首先谢谢大大的回答,如果需要调用该class中的方法的话就需要将头文件导入/theos/include目录下吧,如果缺少的该头文件中又导入了其他的头文件,是不是依次导入就可以了?但是我一开始就导入了一个第三方的class,随后提示该class中缺少nsobject.h,导入nsobject.h编译之后又发现nsobject.h缺少UIKit-Structs.h这个头文件,请问有没有什么方法可以解决了?感觉nsobject.h和UIKit-Structs.h应该是存在于系统中的,请问为什么会引用不到了?
不需要放在/theos/include下,就放在当前工程下就可以了。报这些错是因为clang编译器找不到对应的类、函数等等,你只需要定制一个头文件就可以了,没必要把所有的完整头文件都拷过来。什么叫定制头文件呢?我举个例子:
假设UIDevice类中有一个名为helloWorld的私有函数,那么我在代码中写
[UIDevice currentDevice] helloWorld];
的话,clang编译器会报warning:
那么解决办法很简单,就是自己写一个头文件,内容是:
@interface UIDevice (private)
- (void)helloWorld;
@end
将其命名为UIDevice_private.h,再在源文件里
#import "UIDevice_private.h"
即可骗过clang编译器,通过编译。当然,如果UIDevice里没有helloWorld这个函数,进程运行到这个地方是会崩溃的
搜噶,明白了,感谢大大:lol: