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:]
平等。像NSSet
、NSDictionary
这样的对象,使用- [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)`的主要内容,如果未能解决你的问题,请参考以下文章