这个 actParam 参数是什么样的规则生成的?
id __cdecl -[MTReserveRequest requestParams](MTReserveRequest *self, SEL a2)
{
void *v2; // x0
__int64 v3; // x1
void *v4; // x19
void *v5; // x0
void *v6; // x0
void *v7; // x20
const char *v8; // x27
id v9; // x0
void *v10; // x0
void *v11; // x0
__int64 v12; // x24
id v13; // x0
void *v14; // x0
void *v15; // x0
void *v16; // x0
id v17; // x0
char *v18; // x0
void *v19; // x0
const __CFString *v20; // x28
signed int v21; // w25
signed int v22; // w26
__int64 v23; // x21
void *v24; // x0
__int64 v25; // x1
__CFString *v26; // x23
const __CFString *v27; // x24
void *v28; // x0
__int64 v29; // x0
__CFString *v30; // x24
const __CFString *v31; // x25
void *v32; // x0
void *v33; // x0
id result; // x0
__int64 v35; // [xsp+0h] [xbp-80h]
void *v36; // [xsp+8h] [xbp-78h]
void *v37; // [xsp+10h] [xbp-70h]
const __CFString *v38; // [xsp+18h] [xbp-68h]
const __CFString *v39; // [xsp+20h] [xbp-60h]
__int64 v40; // [xsp+28h] [xbp-58h]
v2 = objc_msgSend(self, "yy_modelToJSONObject");
v4 = (void *)objc_retainAutoreleasedReturnValue(v2);
if ( v4
&& (v5 = objc_msgSend(&OBJC_CLASS___NSDictionary, "class"), (unsigned int)objc_msgSend(v4, "isKindOfClass:", v5)) )
{
v6 = (void *)objc_alloc(&OBJC_CLASS___NSMutableDictionary);
v7 = objc_msgSend(v6, "init");
v8 = "currentUser";
v9 = ((id (__cdecl *)(MTUserManager_meta *, SEL))objc_msgSend)(
(MTUserManager_meta *)&OBJC_CLASS___MTUserManager,
"currentUser");
v10 = (void *)objc_retainAutoreleasedReturnValue(v9);
v37 = v10;
v11 = objc_msgSend(v10, "userId");
v12 = objc_retainAutoreleasedReturnValue(v11);
if ( v12 )
{
v13 = ((id (__cdecl *)(MTUserManager_meta *, SEL))objc_msgSend)(
(MTUserManager_meta *)&OBJC_CLASS___MTUserManager,
"currentUser");
v14 = (void *)objc_retainAutoreleasedReturnValue(v13);
v15 = objc_msgSend(v14, "userId", v14);
v36 = (void *)objc_retainAutoreleasedReturnValue(v15);
v16 = objc_msgSend(&OBJC_CLASS___NSString, "class");
if ( (unsigned int)objc_msgSend(v36, "isKindOfClass:", v16) )
{
v17 = ((id (__cdecl *)(MTUserManager_meta *, SEL))objc_msgSend)(
(MTUserManager_meta *)&OBJC_CLASS___MTUserManager,
"currentUser");
v18 = (char *)objc_retainAutoreleasedReturnValue(v17);
v8 = v18;
v19 = objc_msgSend(v18, "userId");
v20 = (const __CFString *)objc_retainAutoreleasedReturnValue(v19);
v21 = 1;
v22 = 1;
}
else
{
v22 = 0;
v20 = &stru_100BFD020;
v21 = 1;
}
}
else
{
v21 = 0;
v22 = 0;
v20 = &stru_100BFD020;
}
objc_msgSend(v7, "setObject:forKey:", v20, CFSTR("userId"));
if ( v22 )
{
objc_release(v20);
objc_release(v8);
}
if ( v21 )
{
objc_release(v36);
objc_release(v35);
}
objc_release(v12);
objc_release(v37);
objc_msgSend(v7, "addEntriesFromDictionary:", v4);
v24 = objc_msgSend(v7, "yy_modelToJSONString");
v26 = (__CFString *)objc_retainAutoreleasedReturnValue(v24);
v27 = &stru_100BFD020;
if ( v26 )
{
v28 = objc_msgSend(&OBJC_CLASS___NSString, "class");
if ( (unsigned int)objc_msgSend(v26, "isKindOfClass:", v28) )
v27 = v26;
}
v29 = sub_10027C5FC((__int64)v27, v25);
v30 = (__CFString *)objc_retainAutoreleasedReturnValue(v29);
v38 = CFSTR("actParam");
v31 = &stru_100BFD020;
if ( v30 )
{
v32 = objc_msgSend(&OBJC_CLASS___NSString, "class");
if ( (unsigned int)objc_msgSend(v30, "isKindOfClass:", v32) )
v31 = v30;
}
v39 = v31;
v33 = objc_msgSend(&OBJC_CLASS___NSDictionary, "dictionaryWithObjects:forKeys:count:", &v39, &v38, 1LL);
v23 = objc_retainAutoreleasedReturnValue(v33);
objc_release(v30);
objc_release(v26);
objc_release(v7);
}
else
{
v23 = objc_retain(__NSDictionary0__, v3);
}
result = (id)objc_release(v4);
if ( __stack_chk_guard == v40 )
result = (id)objc_autoreleaseReturnValue(v23);
return result;
}
其它都看的懂,到这一步 v29 = sub_10027C5FC((__int64)v27, v25);
这句不知道什么意思了。双击查看是这样的
__int64 __fastcall sub_10027C5FC(__int64 a1, __int64 a2)
{
__int64 v2; // x19
unsigned int v3; // off
__int64 v4; // x9
char *v5; // x10
unsigned int v6; // off
__int64 v7; // x9
__int128 *v8; // x10
void *v9; // x0
__int64 v10; // x20
void *v11; // x0
__int64 v12; // x0
__int64 v13; // x21
__int64 v14; // x0
__int64 v15; // x22
v2 = objc_retain(a1, a2);
v3 = __ldar((unsigned __int8 *)&unk_100E5AFC8);
if ( !((unsigned __int64)&unk_100E5AFC8 & 1) && (unsigned int)__cxa_guard_acquire(&unk_100E5AFC8) )
{
byte_100E5AFC1 = 1;
*(_OWORD *)&byte_100E5AFA0 = unk_100B40C68;
*(_OWORD *)&algn_100E5AFA1[15] = unk_100B40C78;
byte_100E5AFC0 = 107;
__cxa_atexit(sub_10027C858);
__cxa_guard_release(&unk_100E5AFC8);
}
if ( byte_100E5AFC1 )
{
v4 = 0LL;
v5 = &byte_100E5AFA0;
do
{
*v5 ^= 0x5BE9895DD531356BuLL >> (v4 & 0x38);
++v5;
v4 += 8LL;
}
while ( v4 != 264 );
byte_100E5AFC1 = 0;
}
v6 = __ldar((unsigned __int8 *)&unk_100E5AFE8);
if ( !((unsigned __int64)&unk_100E5AFE8 & 1) && (unsigned int)__cxa_guard_acquire(&unk_100E5AFE8) )
{
byte_100E5AFE1 = 1;
xmmword_100E5AFD0 = xmmword_100B40C89;
byte_100E5AFE0 = -101;
__cxa_atexit(sub_10027C868);
__cxa_guard_release(&unk_100E5AFE8);
}
if ( byte_100E5AFE1 )
{
v7 = 0LL;
v8 = &xmmword_100E5AFD0;
do
{
*(_BYTE *)v8 ^= 0x7D410717B555F99BuLL >> (v7 & 0x38);
v8 = (__int128 *)((char *)v8 + 1);
v7 += 8LL;
}
while ( v7 != 136 );
byte_100E5AFE1 = 0;
}
v9 = objc_msgSend(&OBJC_CLASS___NSString, "stringWithCString:encoding:", &byte_100E5AFA0, 4LL);
v10 = objc_retainAutoreleasedReturnValue(v9);
v11 = objc_msgSend(&OBJC_CLASS___NSString, "stringWithCString:encoding:", &xmmword_100E5AFD0, 4LL);
v12 = objc_retainAutoreleasedReturnValue(v11);
v13 = v12;
v14 = sub_10027C5D0(v2, v10, v12);
v15 = objc_retainAutoreleasedReturnValue(v14);
objc_release(v13);
objc_release(v10);
objc_release(v2);
return objc_autoreleaseReturnValue(v15);
}