在反汇编以后,代码边上的注解有方法的调用,但是怎么知道是调用哪一个类的方法?

我的用是Hopper反汇编的,在反汇编以后,代码边上的注解有方法名,但是没有写出调用的是哪个类的方法。我想确定在调用哪个类的方法,搜索了一下这个方法名,发现很多类中有同名的方法。大神们是怎么解决的?

1 个赞

下断点po一下,或者用tweak。
具体原因解释起来太麻烦,算了

可是我还是想知道原因,为什么没有办法反汇编出是哪个类调用的方法

EDIT:
以下内容不保证正确,欢迎大神纠错

你看啊
oc是这样
[AAAA bbbb];
会变成objc_msgSend(AAAA,@selector(bbbb));
如你所见的这里aaaa和bbbb是两个变量
bbbb是一个单独的selector
如你所见,他在__objc_selrefs, 这个段是一系列SEL的集合,SEL没记错的话就是char*

换句话说,sel里并不包含这个方法对应的类

1 个赞

上面我说的__objc_selrefs的部分
可以参见 https://opensource.apple.com/source/objc4/objc4-493.9/runtime/objc-file.mm

所以反汇编器想要知道对应类的话就必须分析函数调用上下文,这个工程难度比较大而且窃以为并不能提供完全准确的信息

EDIT:
部分情况下也可以通过classdump来获取

edit2:
或者通过在类/方法列表里搜索对应的selector,但是这个方法很显然的对同名sel会造成影响。

EDIT3:
当然还有一个我觉得不试图推断类的原因就是oc的运行时太强大了,静态的推断可能并不准确,反而给分析造成误导

还有人感兴趣的话圣诞节的时候我稍微写点东西介绍一下好了

2 个赞

谢谢大神,明白了。期待你写的东西

大神,还有个问题,在这里面,我应该po哪一个的值x23 or x24?应该怎么确定呢?

期待Christmas :smile:

同!!!!!