我正在尝试在 viewController 类中挂钩一个名为addition 的函数。实现看起来像这样:
@implementation ViewController
- (NSInteger)additionWithNum1:(NSInteger)num1 num2:(NSInteger)num2 {
return num1 + num2;
}
阅读theos文档这里,我写了一个theos调整如下:
#import <UIKit/UIKit.h>
NSInteger addition(NSInteger num1, NSInteger num2);
%hookf(NSInteger, addition, NSInteger num1, NSInteger num2) {
return 99;
}
但是,它会导致以下错误:
==> Linking tweak objchooker (armv7)…
ld: warning: -multiply_defined is obsolete
Undefined symbols for architecture armv7:
"_addition", referenced from:
__logosLocalInit in Tweak.x.f54e192c.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [/Users/hnin.sin/Desktop/objchooker/.theos/obj/debug/armv7/objchooker.dylib] Error 1
make[2]: *** [/Users/hnin.sin/Desktop/objchooker/.theos/obj/debug/armv7/objchooker.dylib] Error 2
make[1]: *** [internal-library-all_] Error 2
make: *** [objchooker.all.tweak.variables] Error 2
%hook 和 %hookf 都适用于我的 swift 测试应用程序,但只有 %hook 适用于这个 Objective-C 应用程序。我是否为 %hookf 做错了什么,或者 %hookf 在 Objective-C 应用程序中不起作用?
%hookf 用于挂钩 C 函数,而不是 Objective-C 方法。
经过多次尝试和错误,我发现实际上可以挂钩 Objective-C 函数。
我在这里缺少的东西导致了这个错误:
Undefined symbols for architecture armv7:"_addition",
referenced from:
__logosLocalInit in Tweak.x.f54e192c.o
ld:找不到架构armv7的符号
是我没有添加
%ctor {
%init(addition= MSFindSymbol(NULL, "_addition"));
}
这很重要,因为这个函数是我创建的,THEOS 并不真正知道它在哪里,除非它在运行时借助我提供的符号来搜索它。