背景: 特定のクラスに属する 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になるため、この場合、メソッドは常に終了するため、私にはあまり意味がありません。