Objective C 类方法`(unsigned long long)`

Posted

技术标签:

【中文标题】Objective C 类方法`(unsigned long long)`【英文标题】:Objective C class method `(unsigned long long)` 【发布时间】:2021-07-31 10:30:47 【问题描述】:

我目前正在对应用进行反向工程以进行渗透测试。

我遇到了一个名为“hash”的方法名称,但我很难理解这个函数的类型。

/* @class SearchRequest */

-(unsigned long long)hash 
    r0 = [self terms];
    r0 = [r0 retain];
    r20 = r0;
    r22 = [r0 hash];
    r0 = [self searchFilters];
    r0 = [r0 retain];
    r23 = r0;
    r22 = [r0 hash] ^ r22;
    r0 = [self categoryFilters];
    r0 = [r0 retain];
    r21 = r22 ^ [r0 hash];
    [r0 release];
    [r23 release];
    [r20 release];
    r0 = r21;
    return r0;

我能分解的东西。

看来它调用了方法searchFilters、categoryFilters、terms。

我不确定 release、retain 代表什么。而且我也不太明白-(unsigned long long)hash,是 unsgined long long 的方法类型吗?全面了解此功能试图实现的目标或输出的目标将很有帮助。我几乎没有使用 Objective-C 作为上下文的背景。

使用 Frida,我看到这个函数的返回值通常是 0x0,我假设这意味着 nil

【问题讨论】:

【参考方案1】:

retain/release是编译器插入的调用,用来添加对象的自动引用计数,要知道什么时候应该是- [NSObject dealloc],本来retain/release/autorelease是程序员手动做的,但我觉得不是很很少有人再手动操作了。 - [NSObject hash] 是所有对象从它们最终继承的基类 NSObject 获取的方法,默认情况下我认为只使用对象地址,如果你想改变它对两个对象的含义,你覆盖它和 - [NSObject isEqual:]平等。像NSSetNSDictionary 这样的对象,使用- [NSObject hash] 来加速- [NSObject isEqual:] 比较并将它们插入到哈希表中,- [NSObject hash] 的值用于查找对象的位置,- [NSObject isEqual:] 是用于进一步区分具有相同- [NSObject hash] 值但可能或可能不相等的两个对象,两个对象可能不相等但仍然具有相同的哈希值,但对象不可能是相等但具有不同的哈希值,这将是一个错误,所有被认为相等的对象都应该具有相同的哈希值。

【讨论】:

感谢您的回答。为了进一步理解,哈希只不过是键值对的 int 表示,对吧? r0 = [自我搜索过滤器]; r0 = [r0 保留]; r23 = r0; r22 = [r0 哈希] ^ r22;这段代码,基本上是抓取了searchFilters的hash吗?您能帮我理解这篇文章以及 SearchFilters 的主要作用是什么吗? 排序除了单个hash可以映射到多个具有相同hash值但不相等的对象,所以一个hash映射到另一组对象,不知道苹果是怎么做到的,它可以是一个通过枚举来查找 isEqual 对象的数组,也可以是使用不同大小的哈希表本身,但它们仍然必须处理哈希冲突。

以上是关于Objective C 类方法`(unsigned long long)`的主要内容,如果未能解决你的问题,请参考以下文章

Objective -C 类问题

Objective C 类扩展 - 如何用 readwrite 方法覆盖只读?

无法从Objective C中的swift类调用方法

objective c, protocol

在Objective C中调用超类方法的时间是不是重要?

objective-c 中如何在一个函数中调用自己类中的另外一个函数