这是我第一次反汇编/逆向工程的经验,我有点难以跟上。作为参考,我试图揭示我所在行业中一个相当不错的图书馆的内部运作方式。以下方法接受一个字符串并返回一些由 表示的内容long long
。
signed __int64 __cdecl +[Lib generateLongLongValue:](Lib_meta *self, SEL a2, id a3)
{
void *v3; // x0
void *v4; // x19
char *v5; // x0
char *v6; // x20
unsigned __int64 v7; // x25
signed __int64 v8; // x22
signed __int64 v9; // x26
int v10; // w0
signed __int64 v11; // x8
signed __int64 v12; // x23
int v13; // w0
__int16 v14; // w24
__int16 i; // w23
__int16 v16; // w0
bool v17; // w9
signed __int64 v18; // x20
v3 = (void *)objc_retain(a3, a2);
v4 = v3;
v5 = (char *)objc_msgSend(v3, "length");
v6 = v5;
v7 = (unsigned __int64)(v5 - 1);
if ( v5 == (_BYTE *)&dword_0 + 1 )
{
LABEL_25:
v18 = -1LL;
goto LABEL_26;
}
...
}
转换成标准的 Objective-C,这看起来像这样(我认为):
+ (NSInteger)generateLongLongValue:(NSString*)string
{
NSInteger v18;
if (string.length - 1 == (_BYTE *)&dword_0 + 1) {
v18 = -1LL;
goto LABEL_26;
}
...
}
我真的不知道(_BYTE *)&dword_0 + 1
这里应该是什么意思。有人可以提供某种解释,或提供我可以查看的资源以便我自己理解吗?
干杯