背景:我正在反转属于某个类的 Obj-C 实例方法。这是类的接口
@interface myClass : NSObject
{
// aStructure contains a lot of function pointers
struct aStructure **_myStruct; // ivar offset: 0x14
int _integer; // ivar offset: 0x20
}
- (void)aMethod;
@end
问题:
这是一个aMethod
反汇编的片段
[0x0] mov edi, [ebp+arg_0] ## put self into edi
[0x2] mov edx, [edi+20h] ## put self._integer into edi
[0x3] cmp edx, 1
[0x4] jl end_of_method ## if (self._integer < 1) return;
[0x5] lea eax, [edx-0Ch] ## put &self._myStruct into eax
[0x6] cmp eax, 3
[0x7] ja end_of_method ## if (&self._myStruct > 3) return;
// other stuff
第 6 行显示了内存地址 ( &self._myStruct
) 与3
.
问题:为什么要将内存地址与 int 进行比较?这对我来说没有多大意义,因为内存地址将始终 > 3,因此在这种情况下该方法将始终退出。