如何在 iOS 应用程序中使用 theos %hookf 挂钩 Objective-C 函数?

问题描述 投票:0回答:2

我正在尝试在 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 应用程序中不起作用?

ios objective-c hook theos
2个回答
0
投票

%hookf 用于挂钩 C 函数,而不是 Objective-C 方法。


0
投票

经过多次尝试和错误,我发现实际上可以挂钩 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 并不真正知道它在哪里,除非它在运行时借助我提供的符号来搜索它。

© www.soinside.com 2019 - 2024. All rights reserved.