Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标C类方法`(无符号长)`_Ios_Objective C_Reverse Engineering_Arm64_Frida - Fatal编程技术网

Ios 目标C类方法`(无符号长)`

Ios 目标C类方法`(无符号长)`,ios,objective-c,reverse-engineering,arm64,frida,Ios,Objective C,Reverse Engineering,Arm64,Frida,我目前正在逆向工程笔测试的应用程序 我遇到了一个名为“hash”的方法名,但我很难理解这个函数的类型是什么 /*@class搜索请求*/ -(unsigned long long)hash { r0 = [self terms]; r0 = [r0 retain]; r20 = r0; r22 = [r0 hash]; r0 = [self searchFilters]; r0 = [r0 retain]; r23 = r0; r2

我目前正在逆向工程笔测试的应用程序

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

/*@class搜索请求*/

-(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是方法类型吗?全面了解此功能试图实现的目标或输出的目标将很有帮助。我几乎没有在Objective-C环境下工作的背景


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

Retain/release是由编译器插入的调用,用于添加对象的自动引用计数,以知道它们应该在何时
-[NSObject dealloc]
,最初,retain/release/autorelease是由程序员手动完成的,但我认为很少有人再手动完成了
-[NSObject hash]
是一种所有对象都从其最终派生的基本类
NSObject
中获取的方法,默认情况下,我认为它只使用对象地址,您可以覆盖它,如果您想更改两个对象相等的含义,可以使用
-[NSObject isEqual:
。对象,如
NSSet
NSDictionary
,使用
-[NSObject hash]
来加速
-[NSObject isEqual:
比较并将其插入哈希表中,
-[NSObject hash]
的值用于查找对象的位置和
-[NSObject isEqual:]
用于进一步区分具有相同
-[NSObject hash]
值但可能相等或可能不相等的两个对象,两个对象可能不相等但仍具有相同的hash值,但对象不可能相等但具有不同的hash值,这将是一个错误,所有被认为相等的对象都应该具有相同的哈希值。

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