feat(huya): 🎯 ga IDA导出核心挖掘: 密钥槽5788=3DF88同款! 全链XTEA/deflate/编码器映射 (R29)

- 5788=5788:f15e78d2… 与 mfa 3DF88 相同 (turing 共享key!)
- ga XTEA sub_1F1CC + 封套 1F918/1F9C8 + 解码 27DBC(inflate!)
- b209202 a6==0→sub_23DF8编码器 / a6==1→27FF8解码器
- k209202 16B块: RiskDetectExt.ExtData schema + key=16B输入
- 请求密文密钥≠静态key (需编码器内部路径)
This commit is contained in:
yml2213
2026-08-29 07:54:56 +08:00
parent 5b6edc02e8
commit 9586eaa8a3
931 changed files with 88147 additions and 0 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,62 @@
/*
* func-name: sub_10170
* func-address: 0x10170
* export-type: decompile
* callers: 0xff58
* callees: 0xf9f8, 0x2462c, 0x43f70, 0x440d0, 0x44120, 0x44160, 0x44170, 0x44180, 0x44190
*/
bool __fastcall sub_10170(char *a1, __int64 a2, __int64 a3, __int64 a4)
{
DIR *v6; // x21
int v7; // w8
bool v8; // zf
struct dirent *v9; // x0
const char *d_name; // x25
struct dirent *v11; // x24
int v12; // w8
bool v13; // zf
char name[4096]; // [xsp+8h] [xbp-1008h] BYREF
__int64 v16; // [xsp+1008h] [xbp-8h]
v16 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
*(_DWORD *)__errno(a1, a2, a3, a4) = 0;
v6 = opendir(a1);
if ( v6 )
{
v7 = *(_DWORD *)(a2 + 16);
if ( v7 != *(_DWORD *)a2 || !*(_BYTE *)(a2 + 12) )
{
v8 = v7 == *(_DWORD *)(a2 + 8) || v7 == *(_DWORD *)(a2 + 4);
if ( !v8 || !*(_BYTE *)(a2 + 13) )
{
do
{
v9 = readdir(v6);
if ( !v9 )
break;
d_name = v9->d_name;
v11 = v9;
if ( strcmp(v9->d_name, ".") && strcmp(d_name, "..") )
{
sub_2462C((int)name, 4096, a1);
if ( v11->d_type == 4 )
access(name, 4);
else
sub_F9F8(a2, name);
}
v12 = *(_DWORD *)(a2 + 16);
if ( v12 == *(_DWORD *)a2 )
{
if ( *(_BYTE *)(a2 + 12) )
break;
}
v13 = v12 == *(_DWORD *)(a2 + 8) || v12 == *(_DWORD *)(a2 + 4);
}
while ( !v13 || !*(_BYTE *)(a2 + 13) );
}
}
closedir(v6);
}
return v6 != nullptr;
}
@@ -0,0 +1,44 @@
/*
* func-name: sub_102E8
* func-address: 0x102e8
* export-type: decompile
* callers: 0xff58
* callees: 0xc8a4, 0xca10, 0x24f90, 0x43f70
*/
__int64 sub_102E8()
{
char v0; // w19
__int64 v1; // x21
__int64 v4; // [xsp+0h] [xbp-70h] BYREF
_QWORD v5[13]; // [xsp+8h] [xbp-68h]
v5[12] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8A4(&v4);
v5[0] = qword_50C00;
v5[1] = qword_50C08;
v5[2] = qword_50C10;
v5[3] = qword_50C18;
v5[4] = qword_50C20;
v5[5] = qword_50C28;
v5[6] = qword_50C30;
v5[7] = qword_50C38;
v5[8] = qword_50C40;
v5[9] = qword_50C48;
v5[10] = qword_50C50;
v5[11] = qword_50C58;
v0 = sub_24F90(qword_50C00, &v4, 0);
if ( (v0 & 1) == 0 )
{
v1 = 1;
do
{
v0 = sub_24F90(v5[v1], &v4, 0);
if ( (v0 & 1) != 0 )
break;
}
while ( v1++ != 11 );
}
sub_CA10(&v4);
return v0 & 1;
}
@@ -0,0 +1,15 @@
/*
* func-name: sub_10400
* func-address: 0x10400
* export-type: decompile
* callers: 0xff58
* callees: 0x25408, 0x44180
*/
bool __fastcall sub_10400(__int64 a1)
{
__int64 v1; // x0
v1 = sub_25408(a1);
return (int)v1 >= 1 && (int)sub_25408(v1) < 11 || access((const char *)qword_50A20, 0) == 0;
}
@@ -0,0 +1,19 @@
/*
* func-name: sub_10448
* func-address: 0x10448
* export-type: decompile
* callers: 0xff58
* callees: 0x43f70, 0x43f80
*/
__int64 sub_10448(char *a1, __int64 a2, __int64 a3, __int64 a4, ...)
{
gcc_va_list arg; // [xsp+A0h] [xbp-50h] BYREF
gcc_va_list va; // [xsp+C8h] [xbp-28h] BYREF
__int64 v7; // [xsp+E8h] [xbp-8h]
va_start(va, a4);
v7 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
va_copy(arg, va);
return vsnprintf(a1, 8u, "%d", arg);
}
@@ -0,0 +1,66 @@
/*
* func-name: sub_104E8
* func-address: 0x104e8
* export-type: decompile
* callers: 0x1101c, 0x211e8
* callees: 0xc8a4, 0xca10, 0x10704, 0x107b4, 0x10b88, 0x10c80, 0x10db0, 0x10e30, 0x10fe8, 0x1c640, 0x1ef8c, 0x2452c, 0x29334, 0x2e4e0, 0x3a4bc, 0x43f70, 0x44050, 0x44090, 0x44120, 0x441c0, 0x441d0
*/
__int64 __fastcall sub_104E8(_QWORD *a1, __int64 a2, __int64 a3)
{
__int64 v6; // x22
char *i; // x0
int v8; // w24
__int64 v9; // x0
__int64 v10; // x8
__int64 v11; // x0
__int64 v12; // x0
__int64 v13; // x21
char *v14; // x0
__int64 v16; // [xsp+8h] [xbp-28h] BYREF
char *s; // [xsp+10h] [xbp-20h] BYREF
char *save_ptr; // [xsp+18h] [xbp-18h] BYREF
char *v19[2]; // [xsp+20h] [xbp-10h] BYREF
v19[1] = *(char **)(_ReadStatusReg(TPIDR_EL0) + 40);
a1[3] = sub_2452C();
sub_C8A4(&s);
sub_2E4E0(a2, off_4D340[0], &s);
v6 = operator new[](0x18u);
v16 = v6;
*(_QWORD *)(v6 + 8) = v6;
*(_QWORD *)(v6 + 16) = v6;
sub_C8A4(v19);
if ( (sub_2E4E0(a2, off_4D518[0], v19) & 1) != 0 )
{
for ( i = strtok_r(v19[0], ",", &save_ptr); i; i = strtok_r(nullptr, ",", &save_ptr) )
{
v8 = strtol(i, nullptr, 10);
v9 = operator new(0x18u);
v10 = *(_QWORD *)(v6 + 8);
*(_DWORD *)v9 = v8;
*(_QWORD *)(v9 + 8) = v10;
*(_QWORD *)(v9 + 16) = v6;
*(_QWORD *)(v10 + 16) = v9;
*(_QWORD *)(v6 + 8) = v9;
}
}
sub_CA10(v19);
sub_10704(a1[5], a2, a3, &s, &v16);
sub_C8A4(v19);
if ( (sub_2E4E0(a2, off_4D610[0], v19) & 1) != 0 && !strcmp(v19[0], "1") )
sub_107B4(a1[5], a2, a3, &s, &v16);
sub_10B88(a1[4], a2);
v11 = sub_10C80(a1[6]);
v12 = sub_10DB0(v11);
v13 = a1[9];
v14 = (char *)sub_1EF8C(v12);
sub_1C640(v13, 2, v14);
sub_29334(a1[11], a2);
sub_10E30(a1[8], a2);
sub_3A4BC(a1[8], a1[5], a1[3], a1[4], a1[6], a1[11]);
sub_1C640(a1[8], 4, s);
sub_CA10(v19);
sub_10FE8(&v16);
return sub_CA10(&s);
}
@@ -0,0 +1,24 @@
/*
* func-name: sub_10704
* func-address: 0x10704
* export-type: decompile
* callers: 0x104e8
* callees: 0x11394, 0x11e0c, 0x11e88, 0x11f14, 0x2452c, 0x29b98
*/
__int64 __fastcall sub_10704(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5)
{
__int64 v10; // x0
__int64 v11; // x24
__int64 v12; // x0
__int64 v13; // x0
v10 = sub_11394(a1, a2, a3, a5, a4);
v11 = sub_2452C(v10);
v12 = sub_11E0C(a1);
v13 = sub_2452C(v12);
sub_29B98(a4, 20, v13 - v11);
sub_11E88(a1, a2);
sub_11F14(a1, a2);
return sub_11FA0(a1, a2, a3, a5, a4);
}
@@ -0,0 +1,126 @@
/*
* func-name: sub_107B4
* func-address: 0x107b4
* export-type: decompile
* callers: 0x104e8
* callees: 0xc8a4, 0xca10, 0xca28, 0xcc84, 0xf5c4, 0x19de0, 0x1a0dc, 0x1a0e8, 0x1c640, 0x2452c, 0x24d70, 0x24f90, 0x25014, 0x25c2c, 0x29b98, 0x2e4e0, 0x425c4, 0x43f70, 0x44120
*/
__int64 __fastcall sub_107B4(int a1, __int64 a2, __int64 a3, __int64 a4, __int64 *a5)
{
__int64 v10; // x0
__int64 v11; // x0
__int64 v12; // x8
__int64 v13; // x24
__int64 v14; // x9
__int64 v15; // x25
char *v16; // x0
__int64 v17; // x0
__int64 v18; // x0
__int64 v19; // x9
__int64 v20; // x25
char *v21; // x0
__int64 v22; // x0
__int64 v23; // x0
__int64 v24; // x9
__int64 v25; // x25
char *v26; // x0
__int64 v27; // x0
__int64 v28; // x0
__int64 v29; // x9
__int64 v30; // x9
__int64 v32; // [xsp+8h] [xbp-18h] BYREF
char *s1[2]; // [xsp+10h] [xbp-10h] BYREF
s1[1] = *(char **)(_ReadStatusReg(TPIDR_EL0) + 40);
v10 = sub_C8A4(s1);
v11 = sub_1A0E8(v10);
v12 = *a5;
v13 = v11;
v32 = v11;
v14 = v12;
while ( 1 )
{
v14 = *(_QWORD *)(v14 + 16);
if ( v14 == v12 )
break;
if ( *(_DWORD *)v14 == 9 )
goto LABEL_6;
}
v15 = sub_2452C(v11);
sub_25014(v13);
v16 = (char *)sub_1A0DC(v13);
v17 = sub_1C640(a1, 9, v16);
v18 = sub_2452C(v17);
v11 = sub_29B98(a4, 9, v18 - v15);
v12 = *a5;
LABEL_6:
v19 = v12;
while ( 1 )
{
v19 = *(_QWORD *)(v19 + 16);
if ( v19 == v12 )
break;
if ( *(_DWORD *)v19 == 15 )
goto LABEL_11;
}
v20 = sub_2452C(v11);
sub_25C2C(a3, v13);
v21 = (char *)sub_1A0DC(v13);
v22 = sub_1C640(a1, 15, v21);
v23 = sub_2452C(v22);
v11 = sub_29B98(a4, 15, v23 - v20);
v12 = *a5;
LABEL_11:
v24 = v12;
while ( 1 )
{
v24 = *(_QWORD *)(v24 + 16);
if ( v24 == v12 )
break;
if ( *(_DWORD *)v24 == 16 )
goto LABEL_16;
}
v25 = sub_2452C(v11);
sub_F5C4(v13);
v26 = (char *)sub_1A0DC(v13);
v27 = sub_1C640(a1, 16, v26);
v28 = sub_2452C(v27);
sub_29B98(a4, 16, v28 - v25);
LABEL_16:
if ( (sub_2E4E0(a2, off_4D410[0], s1) & 1) != 0 )
sub_1C640(a1, 46, s1[0]);
v29 = *a5;
while ( 1 )
{
v29 = *(_QWORD *)(v29 + 16);
if ( v29 == *a5 )
break;
if ( *(_DWORD *)v29 == 51 )
goto LABEL_23;
}
sub_24F90(qword_50BE8, s1, &unk_534B);
sub_1C640(a1, 51, s1[0]);
LABEL_23:
if ( (sub_2E4E0(a2, off_4D508[0], s1) & 1) != 0 && !strcmp(s1[0], "1") && !(unsigned int)sub_425C4(a3, s1) )
sub_1C640(a1, 136, s1[0]);
if ( (sub_2E4E0(a2, off_4D598[0], s1) & 1) != 0 && sub_CA28(s1) )
sub_1C640(a1, 143, s1[0]);
if ( (sub_2E4E0(a2, off_4D5B0[0], s1) & 1) != 0 )
sub_1C640(a1, 144, s1[0]);
v30 = *a5;
while ( 1 )
{
v30 = *(_QWORD *)(v30 + 16);
if ( v30 == *a5 )
break;
if ( *(_DWORD *)v30 == 148 )
goto LABEL_39;
}
sub_CC84(s1);
if ( (sub_24D70(qword_50B20, s1) & 1) != 0 && sub_CA28(s1) )
sub_1C640(a1, 148, s1[0]);
LABEL_39:
sub_19DE0(&v32);
return sub_CA10(s1);
}
@@ -0,0 +1,43 @@
/*
* func-name: sub_10B88
* func-address: 0x10b88
* export-type: decompile
* callers: 0x104e8
* callees: 0xc8a4, 0xca10, 0x13514, 0x1c408, 0x2e4e0, 0x43f70
*/
__int64 __fastcall sub_10B88(__int64 a1, __int64 a2)
{
__int64 v4; // x0
char *v5; // x1
int v6; // w1
int v7; // w2
int v8; // w4
int v9; // w5
int v10; // w6
int v11; // w7
char v13; // [xsp+0h] [xbp-30h]
int v14[2]; // [xsp+8h] [xbp-28h] BYREF
char s[8]; // [xsp+10h] [xbp-20h] BYREF
__int64 v16; // [xsp+18h] [xbp-18h]
int v17; // [xsp+20h] [xbp-10h]
__int64 v18; // [xsp+28h] [xbp-8h]
v18 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
*(_QWORD *)s = 0;
v16 = 0;
v4 = *(_QWORD *)(a1 + 32);
v17 = 0;
v5 = off_4D318[0];
*(_DWORD *)(a1 + 24) = 209202;
sub_1C408(v4, v5);
sub_1C408(*(_QWORD *)(a1 + 40), off_4D320[0]);
sub_C8A4(v14);
if ( (sub_2E4E0(a2, off_4D328[0], v14) & 1) != 0 )
sub_13514((int)s, v6, v7, "%s", v14[0], v9, v10, v11, v13);
else
sub_13514((int)s, v6, v7, "0", v8, v9, v10, v11, v13);
sub_1C408(*(_QWORD *)(a1 + 48), s);
*(_DWORD *)(a1 + 56) = 2;
return sub_CA10(v14);
}
@@ -0,0 +1,43 @@
/*
* func-name: sub_10C80
* func-address: 0x10c80
* export-type: decompile
* callers: 0x104e8
* callees: 0xc8a4, 0xca10, 0xcfd0, 0x11238, 0x135b0, 0x13630, 0x1c408, 0x2cd74, 0x2d4cc, 0x2d724, 0x2fa94, 0x43f70
*/
__int64 __fastcall sub_10C80(__int64 a1, __int64 a2, __int64 a3)
{
__int64 v5; // x20
__int64 v6; // x20
int v8; // [xsp+Ch] [xbp-34h] BYREF
char *v9; // [xsp+10h] [xbp-30h] BYREF
char *s; // [xsp+18h] [xbp-28h] BYREF
_QWORD v11[4]; // [xsp+20h] [xbp-20h] BYREF
v11[3] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
v5 = sub_135B0();
sub_C8A4(&s);
if ( !(unsigned int)sub_11238(a3, (int)&s, (char *)qword_503B8) )
{
sub_1C408(*(_QWORD *)(a1 + 32), s);
sub_2FA94(v11, v5, a3, s, 0);
if ( (sub_2CD74(v11) & 1) != 0 )
{
sub_1C408(*(_QWORD *)(a1 + 24), "0");
}
else
{
sub_C8A4(&v9);
v6 = *(_QWORD *)(v5 + 240);
if ( v6 && !(unsigned int)sub_13630(v11, &v9, qword_50668) && !(unsigned int)sub_2D724(v11, &v8, v6) )
{
sub_CFD0((__int64 *)&v9, ",%d", v8);
sub_1C408(*(_QWORD *)(a1 + 24), v9);
}
sub_CA10(&v9);
}
sub_2D4CC(v11);
}
return sub_CA10(&s);
}
@@ -0,0 +1,21 @@
/*
* func-name: sub_10DB0
* func-address: 0x10db0
* export-type: decompile
* callers: 0x104e8, 0x11fa0, 0x1daf8, 0x1fcb8, 0x20984, 0x21624, 0x21948, 0x21de4, 0x327f4
* callees: 0x138cc, 0x43f40, 0x441e0, 0x441f0
*/
void *sub_10DB0()
{
int v0; // w8
v0 = atomic_load((unsigned __int8 *)&byte_4FB78);
if ( ((v0 ^ 0xFE) & v0) == 0 && __cxa_guard_acquire((__guard *)&byte_4FB78) )
{
sub_138CC(&unk_4FAA0);
__cxa_atexit((void (*)(void *))sub_1DBC0, &unk_4FAA0, &off_48720);
__cxa_guard_release((__guard *)&byte_4FB78);
}
return &unk_4FAA0;
}
@@ -0,0 +1,42 @@
/*
* func-name: sub_10E30
* func-address: 0x10e30
* export-type: decompile
* callers: 0x104e8
* callees: 0xc8a4, 0xca10, 0xce08, 0xcf74, 0xcfd0, 0x13d84, 0x1c640, 0x28a14, 0x28b80, 0x2e4e0, 0x43f70
*/
__int64 __fastcall sub_10E30(int a1, __int64 a2)
{
const void *v5; // [xsp+8h] [xbp-28h] BYREF
int v6; // [xsp+14h] [xbp-1Ch] BYREF
const void *v7; // [xsp+18h] [xbp-18h] BYREF
char *v8[2]; // [xsp+20h] [xbp-10h] BYREF
v8[1] = *(char **)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8A4(v8);
if ( (sub_2E4E0(a2, off_4D4A8[0], v8) & 1) != 0 )
sub_1C640(a1, 3, v8[0]);
if ( (sub_2E4E0(a2, off_4D4C0[0], v8) & 1) != 0 )
sub_1C640(a1, 8, v8[0]);
if ( (sub_2E4E0(a2, off_4D4C8[0], v8) & 1) != 0 )
sub_1C640(a1, 9, v8[0]);
if ( (sub_28B80(v8) & 1) != 0 )
{
sub_CF74((__int64 *)v8, ",");
sub_C8A4(&v7);
if ( (sub_2E4E0(a2, off_4D588[0], &v7) & 1) != 0 )
sub_CE08((__int64 *)v8, &v7);
sub_CF74((__int64 *)v8, ",");
if ( (sub_13D84(&v6) & 1) != 0 )
sub_CFD0((__int64 *)v8, "%d", v6);
sub_CF74((__int64 *)v8, ",");
sub_C8A4(&v5);
if ( (sub_28A14(qword_50AB8, &v5) & 1) != 0 )
sub_CE08((__int64 *)v8, &v5);
sub_1C640(a1, 7, v8[0]);
sub_CA10(&v5);
sub_CA10(&v7);
}
return sub_CA10(v8);
}
@@ -0,0 +1,14 @@
/*
* func-name: sub_10FE8
* func-address: 0x10fe8
* export-type: decompile
* callers: 0x104e8, 0x21de4
* callees: 0x13aa8
*/
void __fastcall sub_10FE8(void **a1)
{
sub_13AA8();
if ( *a1 )
operator delete[](*a1);
}
@@ -0,0 +1,63 @@
/*
* func-name: sub_1101C
* func-address: 0x1101c
* export-type: decompile
* callers: 0x21bdc
* callees: 0xc8a4, 0xca10, 0x104e8, 0x11238, 0x1c440, 0x1c640, 0x2452c, 0x24f90, 0x2e4e0, 0x43f70, 0x441d0, 0x44200
*/
__int64 __fastcall sub_1101C(__int64 a1, __int64 a2, __int64 a3)
{
__int64 v6; // x0
__int64 v7; // x0
__int64 v8; // x0
char *v9; // x21
int v10; // w0
__int64 v11; // x8
char *s; // [xsp+8h] [xbp-18h] BYREF
char *nptr[2]; // [xsp+10h] [xbp-10h] BYREF
nptr[1] = *(char **)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8A4(nptr);
v6 = sub_2E4E0(a2, off_4D600[0], nptr);
if ( (v6 & 1) != 0 )
v7 = strtol(nptr[0], nullptr, 10);
else
v7 = sub_2452C(v6);
*(_QWORD *)(a1 + 32) = v7;
sub_24F90(qword_50B98, nptr, &unk_534B);
sub_1C640(*(_QWORD *)(a1 + 24), 2, nptr[0]);
sub_24F90(qword_50B90, nptr, &unk_534B);
sub_1C640(*(_QWORD *)(a1 + 24), 1, nptr[0]);
if ( (sub_2E4E0(a2, off_4D328[0], nptr) & 1) != 0 )
sub_1C640(*(_QWORD *)(a1 + 24), 3, nptr[0]);
sub_C8A4(&s);
if ( !(unsigned int)sub_11238(a3, (int)&s, (char *)qword_503B8) )
sub_1C640(*(_QWORD *)(a1 + 24), 4, s);
if ( (sub_2E4E0(a2, off_4D5F8[0], nptr) & 1) != 0 )
*(_DWORD *)(a1 + 40) = atoi(nptr[0]);
if ( (sub_2E4E0(a2, off_4D5E8[0], nptr) & 1) != 0 )
{
v8 = *(_QWORD *)(a1 + 48);
LABEL_16:
sub_1C440(v8, nptr[0]);
goto LABEL_17;
}
sub_104E8(*(_QWORD **)(a1 + 56), a2, a3);
if ( (sub_2E4E0(a2, off_4D5F0[0], nptr) & 1) != 0 )
{
v9 = nptr[0];
v10 = atoi(nptr[0]);
v11 = *(_QWORD *)(a1 + 72);
*(_DWORD *)(a1 + 64) = v10;
sub_1C440(v11, v9);
}
if ( (sub_2E4E0(a2, off_4D608[0], nptr) & 1) != 0 )
{
v8 = *(_QWORD *)(a1 + 80);
goto LABEL_16;
}
LABEL_17:
sub_CA10(&s);
return sub_CA10(nptr);
}
@@ -0,0 +1,46 @@
/*
* func-name: sub_11238
* func-address: 0x11238
* export-type: decompile
* callers: 0x10c80, 0x1101c, 0x1435c, 0x1dcd4, 0x20984, 0x21de4, 0x25220, 0x252cc, 0x25630, 0x25914, 0x2cba0, 0x2e22c, 0x3126c
* callees: 0xc8a4, 0xc8d8, 0xc8f8, 0xca10, 0xce08, 0xcf74, 0x2d104, 0x2d330, 0x2d534, 0x43f70, 0x43fc0
*/
__int64 __fastcall sub_11238(__int64 a1, __int64 a2, char *s)
{
unsigned int v6; // w21
const void *v8; // [xsp+8h] [xbp-38h] BYREF
const void *v9; // [xsp+10h] [xbp-30h] BYREF
__int64 v10; // [xsp+18h] [xbp-28h] BYREF
__int64 v11; // [xsp+20h] [xbp-20h] BYREF
__int64 v12; // [xsp+28h] [xbp-18h] BYREF
__int64 v13[2]; // [xsp+30h] [xbp-10h] BYREF
v13[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
if ( !strchr(s, 40) )
{
sub_C8F8(&v10, "(");
sub_C8A4(&v9);
sub_C8D8(&v11, &v10);
sub_CE08(&v11, &v9);
sub_C8D8(v13, &v11);
sub_CF74(v13, ")");
sub_C8F8(&v8, (char *)qword_50210);
sub_C8D8(&v12, v13);
sub_CE08(&v12, &v8);
sub_CA10(&v8);
sub_CA10(v13);
sub_CA10(&v11);
sub_CA10(&v9);
sub_CA10(&v10);
v6 = sub_2D330(a1, v13, s, v12);
sub_CA10(&v12);
if ( v6 )
return v6;
return (unsigned int)sub_2D104(a1, a2, v13[0], 0);
}
v6 = sub_2D534(a1, v13, s);
if ( !v6 )
return (unsigned int)sub_2D104(a1, a2, v13[0], 0);
return v6;
}
@@ -0,0 +1,357 @@
/*
* func-name: sub_11394
* func-address: 0x11394
* export-type: decompile
* callers: 0x10704
* callees: 0xc8a4, 0xca10, 0xca28, 0xff58, 0x19de0, 0x1a0dc, 0x1a0e8, 0x1c640, 0x2452c, 0x247fc, 0x24af8, 0x24d80, 0x24f90, 0x259b4, 0x25afc, 0x26128, 0x29b98, 0x2c4f0, 0x2e4e0, 0x43f70, 0x44120
*/
__int64 __fastcall sub_11394(__int64 a1, __int64 a2, __int64 a3, __int64 *a4, __int64 a5)
{
int v9; // w19
__int64 v10; // x22
__int64 v11; // x25
__int64 v12; // x0
char v13; // w28
__int64 v14; // x26
__int64 v15; // x0
__int64 v16; // x0
char *v17; // x0
char *v18; // x0
__int64 v19; // x0
__int64 v20; // x8
__int64 v21; // x9
__int64 v22; // x25
__int64 v23; // x0
__int64 v24; // x0
char *v25; // x0
__int64 v26; // x9
__int64 v27; // x25
__int64 v28; // x0
__int64 v29; // x0
char *v30; // x0
__int64 v31; // x9
__int64 v32; // x9
__int64 v33; // x25
__int64 v34; // x0
__int64 v35; // x0
char *v36; // x0
__int64 v37; // x0
__int64 v38; // x9
__int64 v39; // x8
__int64 v40; // x9
__int64 v41; // x9
__int64 v42; // x25
__int64 v43; // x0
__int64 v44; // x0
__int64 v45; // x9
__int64 v46; // x0
_BOOL4 v47; // w24
__int64 v48; // x25
__int64 v49; // x0
__int64 v50; // x0
char *v51; // x0
__int64 v52; // x9
__int64 v53; // x24
__int64 v54; // x0
__int64 v55; // x0
__int64 v56; // x9
__int64 v57; // x24
__int64 v58; // x0
__int64 v59; // x0
char *v60; // x0
__int64 v61; // x9
__int64 v62; // x24
__int64 v63; // x0
__int64 v64; // x0
__int64 v65; // x9
__int64 v66; // x24
__int64 v67; // x0
__int64 v68; // x0
char *v69; // x0
__int64 v70; // x9
__int64 v71; // x24
__int64 v72; // x0
__int64 v73; // x0
char *v74; // x0
__int64 v75; // x9
__int64 v76; // x21
__int64 v77; // x0
__int64 v78; // x0
char *s1; // [xsp+8h] [xbp-38h] BYREF
char *v81; // [xsp+10h] [xbp-30h] BYREF
char *s; // [xsp+18h] [xbp-28h] BYREF
__int64 v83; // [xsp+20h] [xbp-20h] BYREF
_BYTE v84[8]; // [xsp+28h] [xbp-18h] BYREF
_QWORD v85[2]; // [xsp+30h] [xbp-10h] BYREF
v9 = a1;
v85[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
v10 = sub_1A0E8(a1);
v85[0] = v10;
v11 = sub_1A0E8(v10);
v83 = v11;
sub_C8A4(&s);
v12 = sub_2E4E0(a2, off_4D528[0], &s);
v13 = ~(_BYTE)v12;
v14 = sub_2452C(v12);
v15 = sub_FF58((__int64)v84, v10, v11, v13 & 1);
v16 = sub_2452C(v15);
sub_29B98(a5, 21, v16 - v14);
v17 = (char *)sub_1A0DC(v10);
sub_1C640(v9, 21, v17);
v18 = (char *)sub_1A0DC(v11);
sub_1C640(v9, 108, v18);
sub_19DE0(&v83);
v19 = sub_C8A4(&v81);
v20 = *a4;
v21 = *a4;
while ( 1 )
{
v21 = *(_QWORD *)(v21 + 16);
if ( v21 == v20 )
break;
if ( *(_DWORD *)v21 == 7 )
goto LABEL_6;
}
v22 = sub_2452C(v19);
v23 = sub_247FC(v10);
v24 = sub_2452C(v23);
sub_29B98(a5, 7, v24 - v22);
v25 = (char *)sub_1A0DC(v10);
v19 = sub_1C640(v9, 7, v25);
v20 = *a4;
LABEL_6:
v26 = v20;
while ( 1 )
{
v26 = *(_QWORD *)(v26 + 16);
if ( v26 == v20 )
break;
if ( *(_DWORD *)v26 == 10 )
goto LABEL_11;
}
v27 = sub_2452C(v19);
v28 = sub_259B4(v10);
v29 = sub_2452C(v28);
sub_29B98(a5, 10, v29 - v27);
v30 = (char *)sub_1A0DC(v10);
v19 = sub_1C640(v9, 10, v30);
v20 = *a4;
LABEL_11:
v31 = v20;
while ( 1 )
{
v31 = *(_QWORD *)(v31 + 16);
if ( v31 == v20 )
break;
if ( *(_DWORD *)v31 == 105 )
goto LABEL_18;
}
sub_C8A4(&s1);
if ( (sub_2E4E0(a2, off_4D3B0[0], &s1) & 1) != 0 )
sub_1C640(v9, 105, s1);
v19 = sub_CA10(&s1);
v20 = *a4;
LABEL_18:
v32 = v20;
while ( 1 )
{
v32 = *(_QWORD *)(v32 + 16);
if ( v32 == v20 )
break;
if ( *(_DWORD *)v32 == 14 )
goto LABEL_23;
}
v33 = sub_2452C(v19);
v34 = sub_25AFC(a3, v10);
v35 = sub_2452C(v34);
sub_29B98(a5, 14, v35 - v33);
v36 = (char *)sub_1A0DC(v10);
sub_1C640(v9, 14, v36);
LABEL_23:
if ( (sub_2E4E0(a2, off_4D390[0], &s) & 1) != 0 && sub_CA28(&s) )
sub_1C640(v9, 101, s);
v37 = sub_2E4E0(a2, off_4D490[0], &s);
if ( (v37 & 1) != 0 )
{
v37 = sub_CA28(&s);
if ( v37 )
v37 = sub_1C640(v9, 152, s);
}
v38 = *a4;
while ( 1 )
{
v38 = *(_QWORD *)(v38 + 16);
if ( v38 == *a4 )
break;
if ( *(_DWORD *)v38 == 103 )
goto LABEL_35;
}
v37 = sub_2E4E0(a2, off_4D3A0[0], &s);
if ( (v37 & 1) != 0 )
v37 = sub_1C640(v9, 103, s);
LABEL_35:
v39 = *a4;
v40 = *a4;
while ( 1 )
{
v40 = *(_QWORD *)(v40 + 16);
if ( v40 == v39 )
break;
if ( *(_DWORD *)v40 == 104 )
goto LABEL_42;
}
sub_C8A4(&s1);
if ( (sub_2E4E0(a2, off_4D3A8[0], &s1) & 1) != 0 )
sub_1C640(v9, 104, s1);
v37 = sub_CA10(&s1);
v39 = *a4;
LABEL_42:
v41 = v39;
while ( 1 )
{
v41 = *(_QWORD *)(v41 + 16);
if ( v41 == v39 )
break;
if ( *(_DWORD *)v41 == 33 )
goto LABEL_47;
}
v42 = sub_2452C(v37);
v43 = sub_24F90(qword_50BA8, &v81, &unk_534B);
v44 = sub_2452C(v43);
sub_29B98(a5, 33, v44 - v42);
v37 = sub_1C640(v9, 33, v81);
v39 = *a4;
LABEL_47:
v45 = v39;
while ( 1 )
{
v45 = *(_QWORD *)(v45 + 16);
if ( v45 == v39 )
break;
if ( *(_DWORD *)v45 == 11 )
goto LABEL_55;
}
sub_C8A4(&s1);
v46 = sub_2E4E0(a2, off_4D330[0], &s1);
if ( (v46 & 1) != 0 )
{
v46 = strcmp(s1, "1");
v47 = v46 == 0;
}
else
{
v47 = 0;
}
v48 = sub_2452C(v46);
v49 = sub_2C4F0(v10, v47);
v50 = sub_2452C(v49);
sub_29B98(a5, 11, v50 - v48);
v51 = (char *)sub_1A0DC(v10);
sub_1C640(v9, 11, v51);
v37 = sub_CA10(&s1);
v39 = *a4;
LABEL_55:
v52 = v39;
while ( 1 )
{
v52 = *(_QWORD *)(v52 + 16);
if ( v52 == v39 )
break;
if ( *(_DWORD *)v52 == 24 )
goto LABEL_60;
}
v53 = sub_2452C(v37);
v54 = sub_24F90(qword_50B98, &v81, &unk_534B);
v55 = sub_2452C(v54);
sub_29B98(a5, 24, v55 - v53);
v37 = sub_1C640(v9, 24, v81);
v39 = *a4;
LABEL_60:
v56 = v39;
while ( 1 )
{
v56 = *(_QWORD *)(v56 + 16);
if ( v56 == v39 )
break;
if ( *(_DWORD *)v56 == 12 )
goto LABEL_65;
}
v57 = sub_2452C(v37);
v58 = sub_24AF8(v10);
v59 = sub_2452C(v58);
sub_29B98(a5, 12, v59 - v57);
v60 = (char *)sub_1A0DC(v10);
v37 = sub_1C640(v9, 12, v60);
v39 = *a4;
LABEL_65:
v61 = v39;
while ( 1 )
{
v61 = *(_QWORD *)(v61 + 16);
if ( v61 == v39 )
break;
if ( *(_DWORD *)v61 == 23 )
goto LABEL_70;
}
v62 = sub_2452C(v37);
v63 = sub_24F90(qword_50B90, &v81, &unk_534B);
v64 = sub_2452C(v63);
sub_29B98(a5, 23, v64 - v62);
v37 = sub_1C640(v9, 23, v81);
v39 = *a4;
LABEL_70:
v65 = v39;
while ( 1 )
{
v65 = *(_QWORD *)(v65 + 16);
if ( v65 == v39 )
break;
if ( *(_DWORD *)v65 == 8 )
goto LABEL_75;
}
v66 = sub_2452C(v37);
v67 = sub_24D80(v10);
v68 = sub_2452C(v67);
sub_29B98(a5, 8, v68 - v66);
v69 = (char *)sub_1A0DC(v10);
v37 = sub_1C640(v9, 8, v69);
v39 = *a4;
LABEL_75:
v70 = v39;
while ( 1 )
{
v70 = *(_QWORD *)(v70 + 16);
if ( v70 == v39 )
break;
if ( *(_DWORD *)v70 == 13 )
goto LABEL_80;
}
v71 = sub_2452C(v37);
v72 = sub_26128(a3, v10);
v73 = sub_2452C(v72);
sub_29B98(a5, 13, v73 - v71);
v74 = (char *)sub_1A0DC(v10);
v37 = sub_1C640(v9, 13, v74);
v39 = *a4;
LABEL_80:
v75 = v39;
while ( 1 )
{
v75 = *(_QWORD *)(v75 + 16);
if ( v75 == v39 )
break;
if ( *(_DWORD *)v75 == 25 )
goto LABEL_85;
}
v76 = sub_2452C(v37);
v77 = sub_24F90(qword_50BA0, &v81, &unk_534B);
v78 = sub_2452C(v77);
sub_29B98(a5, 25, v78 - v76);
sub_1C640(v9, 25, v81);
LABEL_85:
sub_19DE0(v85);
sub_CA10(&v81);
return sub_CA10(&s);
}
@@ -0,0 +1,23 @@
/*
* func-name: sub_11E0C
* func-address: 0x11e0c
* export-type: decompile
* callers: 0x10704
* callees: 0x19de0, 0x1a0dc, 0x1a0e8, 0x1c640, 0x278e8, 0x43f70
*/
__int64 __fastcall sub_11E0C(__int64 a1)
{
int v1; // w19
__int64 v2; // x1
char *v3; // x0
_QWORD v5[2]; // [xsp+0h] [xbp-10h] BYREF
v1 = a1;
v5[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
v5[0] = sub_1A0E8(a1);
sub_278E8(v5[0], v2);
v3 = (char *)sub_1A0DC(v5[0]);
sub_1C640(v1, 20, v3);
return sub_19DE0(v5);
}
@@ -0,0 +1,18 @@
/*
* func-name: sub_11E88
* func-address: 0x11e88
* export-type: decompile
* callers: 0x10704
* callees: 0xc8a4, 0xca10, 0x1c640, 0x2e4e0, 0x43f70
*/
__int64 __fastcall sub_11E88(int a1, __int64 a2)
{
char *s[2]; // [xsp+0h] [xbp-10h] BYREF
s[1] = *(char **)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8A4(s);
if ( (sub_2E4E0(a2, off_4D388[0], s) & 1) != 0 )
sub_1C640(a1, 100, s[0]);
return sub_CA10(s);
}
@@ -0,0 +1,18 @@
/*
* func-name: sub_11F14
* func-address: 0x11f14
* export-type: decompile
* callers: 0x10704
* callees: 0xc8a4, 0xca10, 0x1c640, 0x2e4e0, 0x43f70
*/
__int64 __fastcall sub_11F14(int a1, __int64 a2)
{
char *s[2]; // [xsp+0h] [xbp-10h] BYREF
s[1] = *(char **)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8A4(s);
if ( (sub_2E4E0(a2, off_4D358[0], s) & 1) != 0 )
sub_1C640(a1, 22, s[0]);
return sub_CA10(s);
}
@@ -0,0 +1,433 @@
/*
* func-name: sub_11FA0
* func-address: 0x11fa0
* export-type: decompile
* callers: 0x10704
* callees: 0xc8a4, 0xc8f8, 0xca10, 0xca28, 0xcc84, 0xd210, 0xd494, 0x10db0, 0x1300c, 0x13eb8, 0x1435c, 0x14edc, 0x14f84, 0x15150, 0x153b0, 0x15694, 0x15940, 0x19de0, 0x19e28, 0x1a0c8, 0x1a0dc, 0x1a0e8, 0x1c440, 0x1c640, 0x2452c, 0x2462c, 0x24f90, 0x27324, 0x299f0, 0x29b98, 0x2bbbc, 0x2e4e0, 0x43f70, 0x44120, 0x44150, 0x44160, 0x44170, 0x44190, 0x441b0, 0x44210
*/
__int64 __fastcall sub_11FA0(int a1, __int64 a2, __int64 a3, __int64 *a4, __int64 a5)
{
unsigned __int64 StatusReg; // x27
__int64 v11; // x0
__int64 v12; // x22
__int64 v13; // x0
__int64 v14; // x25
__int64 v15; // x0
__int64 v16; // x0
__int64 v17; // x0
__int64 v18; // x25
__int64 v19; // x0
__int64 v20; // x0
char **v21; // x0
__int64 v22; // x0
__int64 v23; // x9
__int64 v24; // x25
__int64 v25; // x0
char *v26; // x0
__int64 v27; // x0
__int64 v28; // x0
__int64 v29; // x8
__int64 v30; // x9
__int64 v31; // x25
__int64 v32; // x0
__int64 v33; // x0
__int64 v34; // x9
__int64 v35; // x25
DIR *v36; // x0
DIR *v37; // x26
struct dirent *v38; // x0
ssize_t v39; // x0
int v40; // w8
__int64 v41; // x9
int v42; // w8
__int64 i; // x27
__int64 v44; // x0
char *v45; // x0
__int64 v46; // x25
__int64 v47; // x0
char *v48; // x0
__int64 v49; // x0
__int64 v50; // x0
__int64 v51; // x8
__int64 v52; // x9
__int64 v53; // x0
__int64 v54; // x25
__int64 v55; // x0
__int64 v56; // x0
__int64 v57; // x9
__int64 v58; // x25
__int64 v59; // x0
__int64 v60; // x0
__int64 v61; // x9
__int64 v62; // x23
__int64 v63; // x0
__int64 v64; // x0
__int64 v65; // x23
__int64 v66; // x0
char *v67; // x0
__int64 v68; // x0
__int64 v69; // x0
__int64 v70; // x23
__int64 v71; // x0
char *v72; // x0
__int64 v73; // x0
__int64 v74; // x0
__int64 v75; // x23
__int64 v76; // x0
char *v77; // x0
__int64 v78; // x0
__int64 v79; // x0
__int64 v80; // x23
__int64 v81; // x0
__int64 v82; // x0
_BOOL4 v83; // w23
__int64 v84; // x0
__int64 v85; // x24
__int64 v86; // x0
char *v87; // x0
__int64 v88; // x0
unsigned __int64 v90; // [xsp+8h] [xbp-20C8h]
__uid_t v91; // [xsp+14h] [xbp-20BCh]
__int64 v92; // [xsp+18h] [xbp-20B8h]
char *v93; // [xsp+20h] [xbp-20B0h] BYREF
char *s; // [xsp+28h] [xbp-20A8h] BYREF
__int64 v95; // [xsp+30h] [xbp-20A0h] BYREF
char *s1; // [xsp+38h] [xbp-2098h] BYREF
__int128 v97; // [xsp+40h] [xbp-2090h] BYREF
__int128 v98; // [xsp+50h] [xbp-2080h]
__int128 v99; // [xsp+60h] [xbp-2070h]
__int128 v100; // [xsp+70h] [xbp-2060h]
__int128 v101; // [xsp+80h] [xbp-2050h]
__int128 v102; // [xsp+90h] [xbp-2040h]
__int128 v103; // [xsp+A0h] [xbp-2030h]
__int128 v104; // [xsp+B0h] [xbp-2020h]
char buf[4096]; // [xsp+C0h] [xbp-2010h] BYREF
char v106[4096]; // [xsp+10C0h] [xbp-1010h] BYREF
__int64 v107; // [xsp+20C0h] [xbp-10h]
StatusReg = _ReadStatusReg(TPIDR_EL0);
v107 = *(_QWORD *)(StatusReg + 40);
v11 = sub_C8A4(&s1);
v12 = sub_1A0E8(v11);
v95 = v12;
if ( (sub_2E4E0(a2, off_4D360[0], &s1) & 1) != 0 )
sub_1C640(a1, 28, s1);
if ( (sub_2E4E0(a2, off_4D398[0], &s1) & 1) != 0 )
sub_1C640(a1, 102, s1);
if ( (sub_2E4E0(a2, off_4D3B8[0], &s1) & 1) != 0 )
sub_1C640(a1, 106, s1);
if ( (sub_2E4E0(a2, off_4D3F8[0], &s1) & 1) != 0 )
sub_1C640(a1, 115, s1);
if ( (sub_2E4E0(a2, off_4D3C8[0], &s1) & 1) != 0 )
sub_1C640(a1, 114, s1);
if ( (sub_2E4E0(a2, off_4D380[0], &s1) & 1) != 0 )
sub_1C640(a1, 44, s1);
v13 = sub_C8A4(&s);
v14 = sub_2452C(v13);
v15 = sub_24F90(qword_50B88, &s, &unk_534B);
v16 = sub_2452C(v15);
sub_29B98(a5, 35, v16 - v14);
v17 = sub_1C640(a1, 35, s);
v18 = sub_2452C(v17);
v19 = sub_24F90(qword_50978, &s, &unk_534B);
v20 = sub_2452C(v19);
sub_29B98(a5, 42, v20 - v18);
sub_1C640(a1, 42, s);
if ( (sub_2E4E0(a2, off_4D3F0[0], &s1) & 1) != 0 )
sub_1C640(a1, 17, s1);
if ( (sub_2E4E0(a2, off_4D3C0[0], &s1) & 1) != 0 )
sub_1C640(a1, 107, s1);
if ( (sub_2E4E0(a2, off_4D428[0], &s1) & 1) != 0 )
sub_1C640(a1, 47, s1);
if ( (sub_2E4E0(a2, off_4D438[0], &s1) & 1) != 0 )
sub_1C640(a1, 49, s1);
if ( (sub_2E4E0(a2, off_4D430[0], &s1) & 1) != 0 )
sub_1C640(a1, 48, s1);
sub_CC84(&s1);
if ( (sub_2E4E0(a2, off_4D518[0], &s1) & 1) != 0 )
sub_1C640(a1, 200, s1);
if ( (sub_2E4E0(a2, off_4D400[0], &s1) & 1) != 0 )
sub_1C640(a1, 116, s1);
if ( (sub_2E4E0(a2, off_4D408[0], &s1) & 1) != 0 )
sub_1C640(a1, 117, s1);
if ( (sub_2E4E0(a2, off_4D420[0], &s1) & 1) != 0 && sub_CA28(&s1) )
sub_1C640(a1, 119, s1);
v21 = (char **)sub_10DB0();
sub_C8F8(&v93, v21[4]);
sub_D494(&v93);
sub_D210((const char **)&v93, "-");
sub_1C640(a1, 26, v93);
if ( (sub_2E4E0(a2, off_4D3E8[0], &s1) & 1) != 0 )
sub_1C640(a1, 45, s1);
if ( (sub_2E4E0(a2, off_4D418[0], &s1) & 1) != 0 )
sub_1C640(a1, 118, s1);
v22 = sub_2E4E0(a2, off_4D448[0], &s1);
if ( (v22 & 1) != 0 )
v22 = sub_1C640(a1, 120, s1);
v23 = *a4;
while ( 1 )
{
v23 = *(_QWORD *)(v23 + 16);
if ( v23 == *a4 )
break;
if ( *(_DWORD *)v23 == 121 )
goto LABEL_45;
}
v24 = sub_2452C(v22);
v25 = sub_2BBBC(v12);
if ( (v25 & 1) != 0 )
{
v26 = (char *)sub_1A0DC(v12);
v25 = sub_1C640(a1, 121, v26);
}
v27 = sub_2452C(v25);
sub_29B98(a5, 121, v27 - v24);
LABEL_45:
v28 = sub_2E4E0(a2, off_4D450[0], &s1);
if ( (v28 & 1) != 0 )
v28 = sub_1C640(a1, 122, s1);
v29 = *a4;
v30 = *a4;
while ( 1 )
{
v30 = *(_QWORD *)(v30 + 16);
if ( v30 == v29 )
break;
if ( *(_DWORD *)v30 == 135 )
goto LABEL_52;
}
v31 = sub_2452C(v28);
v32 = sub_1300C(&s1);
v33 = sub_2452C(v32);
sub_29B98(a5, 135, v33 - v31);
v28 = sub_1C640(a1, 135, s1);
v29 = *a4;
LABEL_52:
v34 = v29;
while ( 1 )
{
v34 = *(_QWORD *)(v34 + 16);
if ( v34 == v29 )
break;
if ( *(_DWORD *)v34 == 124 )
goto LABEL_81;
}
v35 = sub_2452C(v28);
sub_19E28(v12);
v36 = opendir((const char *)qword_50B10);
if ( v36 )
{
v37 = v36;
v91 = getuid();
v92 = 0;
while ( 1 )
{
v38 = readdir(v37);
if ( !v38 )
break;
if ( v38->d_type == 10 && (sub_2462C((int)v106, 4096, (char *)qword_50B10) & 0x80000000) == 0 )
{
v39 = readlink(v106, buf, 0x1000u);
if ( v39 < 1 )
goto LABEL_77;
v40 = (unsigned __int8)buf[0];
v41 = 4095;
if ( (unsigned __int64)v39 < 0xFFF )
v41 = v39;
buf[v41] = 0;
if ( v40 == 47 )
{
v103 = 0u;
v104 = 0u;
v101 = 0u;
v102 = 0u;
v99 = 0u;
v100 = 0u;
v97 = 0u;
v98 = 0u;
if ( stat(v106, (struct stat *)&v97)
|| (v42 = 2, (DWORD2(v98) % 0x186A0) >> 4 >= 0x271) && DWORD2(v98) % 0x186A0 != v91 )
{
v90 = StatusReg;
for ( i = 0; i != 4; ++i )
{
if ( (sub_27324(buf, off_48728[i]) & 1) != 0 )
{
StatusReg = v90;
goto LABEL_77;
}
}
StatusReg = v90;
if ( !(unsigned int)sub_1A0C8(v12) )
sub_1C440(v12, ",");
sub_1C440(v12, buf);
if ( (unsigned __int64)++v92 <= 9 )
v42 = 0;
else
v42 = 3;
}
}
else
{
LABEL_77:
v42 = 2;
}
if ( v42 == 3 )
break;
}
}
v36 = (DIR *)closedir(v37);
}
v44 = sub_2452C(v36);
sub_29B98(a5, 124, v44 - v35);
v45 = (char *)sub_1A0DC(v12);
v28 = sub_1C640(a1, 124, v45);
LABEL_81:
v46 = sub_2452C(v28);
v47 = sub_15694(a2, v12);
if ( (v47 & 1) != 0 )
{
v48 = (char *)sub_1A0DC(v12);
v47 = sub_1C640(a1, 125, v48);
}
v49 = sub_2452C(v47);
sub_29B98(a5, 125, v49 - v46);
if ( (sub_2E4E0(a2, off_4D458[0], &s1) & 1) != 0 )
sub_1C640(a1, 126, s1);
v50 = sub_2E4E0(a2, off_4D370[0], &s1);
if ( (v50 & 1) != 0 )
{
v50 = sub_CA28(&s1);
if ( v50 )
v50 = sub_1C640(a1, 34, s1);
}
v51 = *a4;
v52 = *a4;
while ( 1 )
{
v52 = *(_QWORD *)(v52 + 16);
if ( v52 == v51 )
break;
if ( *(_DWORD *)v52 == 129 )
goto LABEL_95;
}
v53 = sub_CC84(&s1);
v54 = sub_2452C(v53);
v55 = sub_13EB8(1, &s1, 0);
if ( (v55 & 1) == 0 )
v55 = sub_13EB8(1, &s1, 1);
v56 = sub_2452C(v55);
sub_29B98(a5, 129, v56 - v54);
v50 = sub_1C640(a1, 129, s1);
v51 = *a4;
LABEL_95:
v57 = v51;
while ( 1 )
{
v57 = *(_QWORD *)(v57 + 16);
if ( v57 == v51 )
break;
if ( *(_DWORD *)v57 == 131 )
goto LABEL_102;
}
v58 = sub_2452C(v50);
v59 = sub_1435C(a3, &s1);
if ( (v59 & 1) != 0 )
v59 = sub_1C640(a1, 131, s1);
v60 = sub_2452C(v59);
v50 = sub_29B98(a5, 131, v60 - v58);
v51 = *a4;
LABEL_102:
v61 = v51;
while ( 1 )
{
v61 = *(_QWORD *)(v61 + 16);
if ( v61 == v51 )
break;
if ( *(_DWORD *)v61 == 134 )
goto LABEL_109;
}
v62 = sub_2452C(v50);
v63 = sub_14EDC();
if ( (v63 & 1) != 0 )
v63 = sub_1C640(a1, 134, "1");
v64 = sub_2452C(v63);
v50 = sub_29B98(a5, 134, v64 - v62);
LABEL_109:
v65 = sub_2452C(v50);
v66 = sub_14F84(a2, v12);
if ( (v66 & 1) != 0 )
{
v67 = (char *)sub_1A0DC(v12);
v66 = sub_1C640(a1, 132, v67);
}
v68 = sub_2452C(v66);
v69 = sub_29B98(a5, 132, v68 - v65);
v70 = sub_2452C(v69);
v71 = sub_15150(a2, v12);
if ( (v71 & 1) != 0 )
{
v72 = (char *)sub_1A0DC(v12);
v71 = sub_1C640(a1, 137, v72);
}
v73 = sub_2452C(v71);
v74 = sub_29B98(a5, 137, v73 - v70);
v75 = sub_2452C(v74);
v76 = sub_153B0(a2, v12);
if ( (v76 & 1) != 0 )
{
v77 = (char *)sub_1A0DC(v12);
v76 = sub_1C640(a1, 142, v77);
}
v78 = sub_2452C(v76);
sub_29B98(a5, 142, v78 - v75);
if ( (sub_2E4E0(a2, off_4D590[0], &s1) & 1) != 0 && sub_CA28(&s1) )
sub_1C640(a1, 133, s1);
if ( (sub_2E4E0(a2, off_4D5A0[0], &s1) & 1) != 0 )
sub_1C640(a1, 140, s1);
v79 = sub_2E4E0(a2, off_4D460[0], &s1);
if ( (v79 & 1) != 0 )
{
v79 = sub_CA28(&s1);
if ( v79 )
v79 = sub_1C640(a1, 138, s1);
}
v80 = sub_2452C(v79);
v81 = sub_299F0(&s1);
if ( (v81 & 1) != 0 )
v81 = sub_1C640(a1, 141, s1);
v82 = sub_2452C(v81);
sub_29B98(a5, 141, v82 - v80);
if ( (sub_2E4E0(a2, off_4D468[0], &s1) & 1) != 0 && sub_CA28(&s1) )
sub_1C640(a1, 145, s1);
if ( (sub_2E4E0(a2, off_4D470[0], &s1) & 1) != 0 && sub_CA28(&s1) )
sub_1C640(a1, 146, s1);
v83 = (sub_2E4E0(a2, off_4D5E0[0], &s1) & 1) != 0 && strcmp(s1, "1") == 0;
sub_CC84(&s1);
v84 = sub_2E4E0(a2, off_4D5B8[0], &s1);
if ( v83 || (v84 = sub_CA28(&s1)) != 0 )
{
v85 = sub_2452C(v84);
v86 = sub_15940(&s1, v12, v83);
if ( (v86 & 1) != 0 )
{
v87 = (char *)sub_1A0DC(v12);
v86 = sub_1C640(a1, 147, v87);
}
v88 = sub_2452C(v86);
sub_29B98(a5, 147, v88 - v85);
}
if ( (sub_2E4E0(a2, off_4D478[0], &s1) & 1) != 0 && sub_CA28(&s1) )
sub_1C640(a1, 149, s1);
if ( (sub_2E4E0(a2, off_4D480[0], &s1) & 1) != 0 && sub_CA28(&s1) )
sub_1C640(a1, 150, s1);
if ( (sub_2E4E0(a2, off_4D488[0], &s1) & 1) != 0 && sub_CA28(&s1) )
sub_1C640(a1, 151, s1);
if ( (sub_2E4E0(a2, off_4D498[0], &s1) & 1) != 0 && sub_CA28(&s1) )
sub_1C640(a1, 154, s1);
sub_19DE0(&v95);
sub_CA10(&v93);
sub_CA10(&s);
return sub_CA10(&s1);
}
@@ -0,0 +1,49 @@
/*
* func-name: sub_1300C
* func-address: 0x1300c
* export-type: decompile
* callers: 0x11fa0, 0x21de4
* callees: 0xca28, 0xcc84, 0xcf74, 0xcfd0, 0x24a94, 0x2cd0c, 0x2d4cc, 0x4283c, 0x43f70
*/
__int64 __fastcall sub_1300C(__int64 *a1)
{
char v2; // w21
__int64 *v4; // [xsp+8h] [xbp-48h] BYREF
_BYTE v5[8]; // [xsp+10h] [xbp-40h] BYREF
_BYTE v6[40]; // [xsp+18h] [xbp-38h] BYREF
__int64 v7; // [xsp+40h] [xbp-10h]
__int64 v8; // [xsp+48h] [xbp-8h]
v8 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_CC84(a1);
v5[0] = 0;
sub_2CD0C(v6);
v7 = 0;
v4 = a1;
v2 = sub_4283C(v5);
if ( (v2 & 1) != 0 )
{
sub_24A94(qword_50A90, &sub_1318C, &v4);
if ( (_DWORD)v7 )
{
if ( sub_CA28(a1) )
sub_CF74(a1, ",");
sub_CF74(a1, (char *)qword_50B28);
sub_CF74(a1, ":");
sub_CF74(a1, ":");
sub_CFD0(a1, "%u", v7);
}
if ( HIDWORD(v7) )
{
if ( sub_CA28(a1) )
sub_CF74(a1, ",");
sub_CF74(a1, (char *)qword_50B30);
sub_CF74(a1, ":");
sub_CF74(a1, ":");
sub_CFD0(a1, "%u", HIDWORD(v7));
}
}
sub_2D4CC(v6);
return v2 & 1;
}
@@ -0,0 +1,129 @@
/*
* func-name: sub_1318C
* func-address: 0x1318c
* export-type: decompile
* callers: 0x1300c
* callees: 0xc8a4, 0xc8f8, 0xca10, 0xca28, 0xce08, 0xcf74, 0xcfd0, 0xd210, 0x27324, 0x2cd74, 0x2d4cc, 0x2f78c, 0x428bc, 0x42954, 0x43f70, 0x44060, 0x44150, 0x44220, 0x44230, 0x44240
*/
__int64 __fastcall sub_1318C(const char *a1, __int64 a2, _QWORD **a3)
{
int v6; // w21
__int64 v7; // x20
size_t v8; // x0
__int64 v9; // x8
char *v10; // x9
int v11; // w10
char v12; // w10
const void *v13; // [xsp+0h] [xbp-25A0h] BYREF
const void *v14; // [xsp+8h] [xbp-2598h] BYREF
const void *v15; // [xsp+10h] [xbp-2590h] BYREF
__int64 v16; // [xsp+18h] [xbp-2588h] BYREF
_OWORD v17[8]; // [xsp+20h] [xbp-2580h] BYREF
int v18; // [xsp+A4h] [xbp-24FCh] BYREF
_QWORD v19[3]; // [xsp+A8h] [xbp-24F8h] BYREF
struct statfs buf; // [xsp+C0h] [xbp-24E0h] BYREF
char v21[1028]; // [xsp+13Ch] [xbp-2464h] BYREF
char v22[16]; // [xsp+540h] [xbp-2060h] BYREF
__int128 v23; // [xsp+550h] [xbp-2050h]
__int128 v24; // [xsp+560h] [xbp-2040h]
__int128 v25; // [xsp+570h] [xbp-2030h]
char v26; // [xsp+580h] [xbp-2020h]
char s[4100]; // [xsp+590h] [xbp-2010h] BYREF
char v28[4100]; // [xsp+1594h] [xbp-100Ch] BYREF
__int64 v29; // [xsp+2598h] [xbp-8h]
v29 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
if ( !a3 || !*a3 )
return 1;
v18 = 0;
memset(v28, 0, 0x1001u);
memset(s, 0, 0x1001u);
v26 = 0;
v25 = 0u;
v24 = 0u;
v23 = 0u;
*(_OWORD *)v22 = 0u;
memset(v21, 0, 0x401u);
if ( sscanf(a1, "%4096s %4096s %64s %1024s%n", s, v28, v22, v21, &v18) == 4 && v18 >= 1 )
{
if ( (sub_27324(s, qword_50B28) & 1) != 0 )
{
++*((_DWORD *)a3 + 14);
return 0;
}
if ( (sub_27324(s, qword_50B30) & 1) != 0 )
{
++*((_DWORD *)a3 + 15);
return 0;
}
memset(v17, 0, sizeof(v17));
v6 = stat(v28, (struct stat *)v17);
v7 = *(_QWORD *)&v17[0];
if ( !v6 && !*(_QWORD *)&v17[0] )
return 0;
memset(&buf, 0, sizeof(buf));
if ( !statfs(v28, &buf) && !buf.f_blocks )
return 0;
sub_C8A4(&v16);
if ( v6 )
sub_CFD0(&v16, "fsName:%s", s);
else
sub_CFD0(&v16, "dev:%lu", v7);
sub_2F78C(v19, v16);
if ( (sub_2CD74(v19) & 1) == 0 && (sub_42954(a3 + 1, v19) & 1) == 0 )
{
sub_428BC(a3 + 1, v19);
if ( sub_CA28(*a3) )
sub_CF74(*a3, ",");
sub_C8F8(&v15, s);
sub_D210((const char **)&v15, ",");
sub_D210((const char **)&v15, ":");
sub_CE08(*a3, &v15);
sub_CF74(*a3, ":");
sub_C8F8(&v14, v28);
sub_D210((const char **)&v14, ",");
sub_D210((const char **)&v14, ":");
sub_CE08(*a3, &v14);
sub_CF74(*a3, ":");
sub_C8F8(&v13, v22);
sub_D210((const char **)&v13, ",");
sub_D210((const char **)&v13, ":");
sub_CE08(*a3, &v13);
sub_CF74(*a3, ":");
v8 = __strlen_chk(v21, 0x401u);
if ( v8 )
{
v9 = 0;
v10 = v21;
while ( 1 )
{
v11 = (unsigned __int8)*v10;
if ( v11 == 44 )
break;
if ( v11 == 58 )
{
v12 = 35;
LABEL_27:
*v10 = v12;
}
++v9;
--v8;
++v10;
if ( !v8 )
goto LABEL_29;
}
v12 = 38;
goto LABEL_27;
}
LABEL_29:
sub_CF74(*a3, v21);
sub_CA10(&v13);
sub_CA10(&v14);
sub_CA10(&v15);
}
sub_2D4CC(v19);
sub_CA10(&v16);
}
return 0;
}
@@ -0,0 +1,19 @@
/*
* func-name: sub_13514
* func-address: 0x13514
* export-type: decompile
* callers: 0x10b88
* callees: 0x43f70, 0x43f80
*/
__int64 sub_13514(char *a1, __int64 a2, __int64 a3, char *format, ...)
{
gcc_va_list arg; // [xsp+A0h] [xbp-50h] BYREF
gcc_va_list va; // [xsp+C8h] [xbp-28h] BYREF
__int64 v7; // [xsp+E8h] [xbp-8h]
va_start(va, format);
v7 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
va_copy(arg, va);
return vsnprintf(a1, 0x14u, format, arg);
}
@@ -0,0 +1,21 @@
/*
* func-name: sub_135B0
* func-address: 0x135b0
* export-type: decompile
* callers: 0x10c80, 0x1435c, 0x15f7c, 0x1ed3c, 0x1fcb8, 0x20110, 0x20574, 0x20688, 0x20984, 0x20fc4, 0x211e8, 0x21468, 0x21624, 0x21bdc, 0x21de4, 0x252cc, 0x25408, 0x25630, 0x2671c, 0x2822c, 0x28d98, 0x28fe8, 0x2958c, 0x29b9c, 0x2be88, 0x2c4f0, 0x2e460, 0x30c58, 0x3126c, 0x31efc, 0x32398, 0x32a84, 0x32b58, 0x32dd0, 0x42120, 0x425c4, 0x4283c, 0x429ec, 0x42d50, 0x43818, 0x43900
* callees: 0x2eb44, 0x43f40, 0x441e0, 0x441f0
*/
void *sub_135B0()
{
int v0; // w8
v0 = atomic_load((unsigned __int8 *)&byte_4FF68);
if ( ((v0 ^ 0xFE) & v0) == 0 && __cxa_guard_acquire((__guard *)&byte_4FF68) )
{
sub_2EB44(&unk_4FB80);
__cxa_atexit((void (*)(void *))sub_139C0, &unk_4FB80, &off_48720);
__cxa_guard_release((__guard *)&byte_4FF68);
}
return &unk_4FB80;
}
@@ -0,0 +1,22 @@
/*
* func-name: sub_13630
* func-address: 0x13630
* export-type: decompile
* callers: 0x10c80, 0x20984, 0x21de4
* callees: 0xc8f8, 0xca10, 0x2d6b4, 0x2d948, 0x43f70
*/
__int64 __fastcall sub_13630(__int64 a1, __int64 a2, __int64 a3)
{
unsigned int v6; // w21
__int64 v8; // [xsp+8h] [xbp-18h] BYREF
_QWORD v9[2]; // [xsp+10h] [xbp-10h] BYREF
v9[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8F8(&v8, (char *)qword_50210);
v6 = sub_2D948(a1, v9, a3, v8);
sub_CA10(&v8);
if ( !v6 )
return (unsigned int)sub_2D6B4(a1, a2, v9[0]);
return v6;
}
@@ -0,0 +1,87 @@
/*
* func-name: sub_136D0
* func-address: 0x136d0
* export-type: decompile
* callers: 0x21468
* callees: 0xc8a4, 0xca10, 0x2671c, 0x2e4e0, 0x43f70, 0x44120, 0x441d0
*/
__int64 __fastcall sub_136D0(__int64 a1, int a2, int a3)
{
__int64 v6; // x23
unsigned int v7; // w22
int v8; // w0
int v9; // w4
unsigned int v10; // w19
int v11; // w0
int v12; // w1
int v13; // w2
char *s1; // [xsp+8h] [xbp-28h] BYREF
_BYTE v16[12]; // [xsp+10h] [xbp-20h] BYREF
char v17; // [xsp+1Ch] [xbp-14h] BYREF
const char *v18[2]; // [xsp+20h] [xbp-10h] BYREF
v18[1] = *(const char **)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8A4(v18);
if ( (sub_2E4E0(a1, off_4D338[0], v18) & 1) != 0 )
{
v6 = strtol(v18[0], nullptr, 10);
sub_C8A4(&s1);
v7 = 1;
if ( (sub_2E4E0(a1, off_4D610[0], &s1) & 1) != 0 )
{
if ( !strcmp(s1, "1") )
v7 = 2;
else
v7 = 1;
}
if ( (sub_2E4E0(a1, off_4D618, &s1) & 1) != 0 )
{
v8 = strcmp(s1, "1");
if ( v8 )
v9 = 300;
else
v9 = 30;
if ( !v8 )
v7 = (~((v7 ^ 0xFFFFFFFE) & v7) & 0x5D | (v7 ^ 0xFFFFFFFE) & v7 & 0xFFFFFFA2)
^ (((~v7 & 0x33 | v7 & 0xFFFFFFCC) ^ 0xFFFFFFC9) & 0x5D | ((~v7 & 0x33 | v7 & 0xFFFFFFCC)
^ 0x7E)
& 0xFFFFFFA2)
| ~((~v7 & 0x33 | v7 & 0xFFFFFFCC) ^ 0xFFFFFFC9 | ~((v7 ^ 0xFFFFFFFE) & v7));
}
else
{
v9 = 300;
}
if ( v6 != 17 )
{
if ( v6 == 43 )
{
v11 = a2;
v12 = a1;
v13 = 2;
LABEL_20:
if ( (sub_2671C(v11, v12, v13, 0, v9, v7, a3, (int)&v17, (__int64)v16) & 1) != 0 )
v10 = 0;
else
v10 = -4001;
goto LABEL_24;
}
if ( v6 != 40 )
{
v10 = -4002;
LABEL_24:
sub_CA10(&s1);
goto LABEL_25;
}
}
v11 = a2;
v12 = a1;
v13 = 3;
goto LABEL_20;
}
v10 = -4000;
LABEL_25:
sub_CA10(v18);
return v10;
}
@@ -0,0 +1,44 @@
/*
* func-name: sub_138CC
* func-address: 0x138cc
* export-type: decompile
* callers: 0x10db0
* callees: 0xc8a4, 0x2cd0c, 0x43f70, 0x44090, 0x44250, 0x44260, 0x44270, 0x44280
*/
__n128 __fastcall sub_138CC(__int64 a1)
{
__int64 v2; // x0
__n128 result; // q0
pthread_mutexattr_t v4; // [xsp+0h] [xbp-10h] BYREF
__int64 v5; // [xsp+8h] [xbp-8h]
v5 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
*(_BYTE *)(a1 + 4) = 0;
sub_C8A4((_QWORD *)(a1 + 8));
sub_C8A4((_QWORD *)(a1 + 16));
sub_C8A4((_QWORD *)(a1 + 24));
sub_C8A4((_QWORD *)(a1 + 32));
sub_C8A4((_QWORD *)(a1 + 40));
v2 = operator new[](0x18u);
*(_QWORD *)(a1 + 48) = v2;
*(_QWORD *)(v2 + 8) = v2;
*(_QWORD *)(v2 + 16) = v2;
pthread_mutexattr_init(&v4);
pthread_mutexattr_settype(&v4, 1);
pthread_mutex_init((pthread_mutex_t *)(a1 + 56), &v4);
pthread_mutexattr_destroy(&v4);
pthread_mutexattr_init(&v4);
pthread_mutexattr_settype(&v4, 1);
pthread_mutex_init((pthread_mutex_t *)(a1 + 96), &v4);
pthread_mutexattr_destroy(&v4);
sub_2CD0C(a1 + 136);
result.n128_u64[0] = -1;
result.n128_u64[1] = -1;
*(_QWORD *)(a1 + 160) = 0;
*(_DWORD *)(a1 + 168) = 0;
*(_QWORD *)(a1 + 204) = -1;
*(__n128 *)(a1 + 172) = result;
*(__n128 *)(a1 + 188) = result;
return result;
}
@@ -0,0 +1,37 @@
/*
* func-name: sub_139C0
* func-address: 0x139c0
* export-type: decompile
* callers: 0x135b0
* callees: 0xca10, 0x2d4cc
*/
__int64 __fastcall sub_139C0(__int64 a1)
{
sub_2D4CC(a1 + 968);
sub_2D4CC(a1 + 936);
sub_2D4CC(a1 + 904);
sub_2D4CC(a1 + 840);
sub_2D4CC(a1 + 808);
sub_2D4CC(a1 + 784);
sub_2D4CC(a1 + 760);
sub_2D4CC(a1 + 720);
sub_2D4CC(a1 + 672);
sub_2D4CC(a1 + 624);
sub_2D4CC(a1 + 600);
sub_2D4CC(a1 + 560);
sub_2D4CC(a1 + 496);
sub_2D4CC(a1 + 472);
sub_2D4CC(a1 + 440);
sub_2D4CC(a1 + 368);
sub_2D4CC(a1 + 328);
sub_2D4CC(a1 + 304);
sub_2D4CC(a1 + 272);
sub_2D4CC(a1 + 216);
sub_2D4CC(a1 + 176);
sub_CA10((_QWORD *)(a1 + 168));
sub_2D4CC(a1 + 96);
sub_2D4CC(a1 + 64);
sub_2D4CC(a1 + 24);
return sub_2D4CC(a1);
}
@@ -0,0 +1,29 @@
/*
* func-name: sub_13AA8
* func-address: 0x13aa8
* export-type: decompile
* callers: 0x10fe8
* callees: 0x441a0
*/
_QWORD *__fastcall sub_13AA8(__int64 a1)
{
_QWORD *v1; // x20
_QWORD *result; // x0
v1 = *(_QWORD **)a1;
result = *(_QWORD **)(*(_QWORD *)a1 + 16LL);
if ( result != v1 )
{
do
{
v1 = (_QWORD *)result[2];
operator delete(result);
result = v1;
}
while ( v1 != *(_QWORD **)a1 );
}
v1[1] = v1;
v1[2] = v1;
return result;
}
@@ -0,0 +1,66 @@
/*
* func-name: sub_13AF0
* func-address: 0x13af0
* export-type: decompile
* callers: 0x20688
* callees: 0xca10, 0xca28, 0x13c2c, 0x25914, 0x2cd0c, 0x2cd74, 0x2d4cc, 0x43f70, 0x44210, 0x44290
*/
bool __fastcall sub_13AF0(__int64 a1)
{
_BOOL4 v2; // w19
unsigned int v4; // w22
__int128 v5; // [xsp+0h] [xbp-B0h] BYREF
__int128 v6; // [xsp+10h] [xbp-A0h]
__int128 v7; // [xsp+20h] [xbp-90h]
__int128 v8; // [xsp+30h] [xbp-80h]
__int128 v9; // [xsp+40h] [xbp-70h]
__int128 v10; // [xsp+50h] [xbp-60h]
__int128 v11; // [xsp+60h] [xbp-50h]
__int128 v12; // [xsp+70h] [xbp-40h]
__int64 v13; // [xsp+88h] [xbp-28h] BYREF
_BYTE v14[24]; // [xsp+90h] [xbp-20h] BYREF
__int64 v15; // [xsp+A8h] [xbp-8h]
v15 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
if ( (sub_2CD74(a1) & 1) != 0 )
{
return 0;
}
else
{
sub_2CD0C(v14);
if ( (unsigned int)sub_13C2C(a1, (int)v14, "getFilesDir()Ljava/io/File;") || (sub_2CD74(v14) & 1) != 0 )
{
v2 = 0;
}
else
{
sub_25914(&v13, a1);
if ( sub_CA28(&v13) )
{
v11 = 0u;
v12 = 0u;
v9 = 0u;
v10 = 0u;
v7 = 0u;
v8 = 0u;
v5 = 0u;
v6 = 0u;
v2 = 0;
if ( !syscall(79, 4294967196LL, v13, &v5, 0) && DWORD2(v6) )
{
v4 = DWORD2(v6) % 0x186A0;
v2 = v4 != getuid() % 0x186A0;
}
}
else
{
v2 = 0;
}
sub_CA10(&v13);
}
sub_2D4CC(v14);
}
return v2;
}
@@ -0,0 +1,46 @@
/*
* func-name: sub_13C2C
* func-address: 0x13c2c
* export-type: decompile
* callers: 0x13af0, 0x1435c, 0x252cc, 0x25914, 0x25afc, 0x43900
* callees: 0xc8a4, 0xc8d8, 0xc8f8, 0xca10, 0xce08, 0xcf74, 0x2d22c, 0x2d330, 0x2d534, 0x2e22c, 0x43f70, 0x43fc0
*/
__int64 __fastcall sub_13C2C(__int64 a1, __int64 a2, char *s)
{
unsigned int v6; // w21
const void *v8; // [xsp+8h] [xbp-38h] BYREF
const void *v9; // [xsp+10h] [xbp-30h] BYREF
__int64 v10; // [xsp+18h] [xbp-28h] BYREF
__int64 v11; // [xsp+20h] [xbp-20h] BYREF
__int64 v12; // [xsp+28h] [xbp-18h] BYREF
__int64 v13[2]; // [xsp+30h] [xbp-10h] BYREF
v13[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
if ( !strchr(s, 40) )
{
sub_C8F8(&v10, "(");
sub_C8A4(&v9);
sub_C8D8(&v11, &v10);
sub_CE08(&v11, &v9);
sub_C8D8(v13, &v11);
sub_CF74(v13, ")");
sub_2E22C(&v8, 0);
sub_C8D8(&v12, v13);
sub_CE08(&v12, &v8);
sub_CA10(&v8);
sub_CA10(v13);
sub_CA10(&v11);
sub_CA10(&v9);
sub_CA10(&v10);
v6 = sub_2D330(a1, v13, s, v12);
sub_CA10(&v12);
if ( v6 )
return v6;
return (unsigned int)sub_2D22C(a1, a2, v13[0], 0);
}
v6 = sub_2D534(a1, v13, s);
if ( !v6 )
return (unsigned int)sub_2D22C(a1, a2, v13[0], 0);
return v6;
}
@@ -0,0 +1,44 @@
/*
* func-name: sub_13D84
* func-address: 0x13d84
* export-type: decompile
* callers: 0x10e30
* callees: 0xc8a4, 0xca10, 0xcf74, 0xd14c, 0x43f70, 0x44220, 0x44290
*/
bool __fastcall sub_13D84(__int64 a1)
{
unsigned int v2; // w20
__int64 v3; // x0
__int64 i; // x2
__int64 v5; // x0
_BOOL4 v6; // w19
__int64 v8; // [xsp+8h] [xbp-78h] BYREF
_OWORD v9[6]; // [xsp+10h] [xbp-70h] BYREF
int v10; // [xsp+70h] [xbp-10h]
__int64 v11; // [xsp+78h] [xbp-8h]
v11 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
v2 = syscall(56, 4294967196LL, qword_50B50, 0);
if ( (v2 & 0x80000000) != 0 )
{
return 0;
}
else
{
v10 = 0;
memset(v9, 0, sizeof(v9));
sub_C8A4(&v8);
v3 = syscall(63, v2, v9, 100);
if ( v3 >= 1 )
{
for ( i = v3; i > 0; i = syscall(63, v2, v9, 100) )
((void (__fastcall *)(__int64 *, _OWORD *, __int64))loc_CFA8)(&v8, v9, i);
}
syscall(57, v2);
v5 = sub_D14C(&v8, (const char *)qword_50B58, 0);
v6 = (v5 & 0x8000000000000000LL) == 0 && sscanf((const char *)(v8 + v5), (const char *)qword_50B60, a1) != 0;
sub_CA10(&v8);
}
return v6;
}
@@ -0,0 +1,173 @@
/*
* func-name: sub_13EB8
* func-address: 0x13eb8
* export-type: decompile
* callers: 0x11fa0, 0x219d8, 0x21de4
* callees: 0xc8d8, 0xc8f8, 0xca10, 0xca28, 0xcc84, 0xce08, 0xcf74, 0xcfd0, 0xd210, 0xda34, 0xda60, 0x14250, 0x142e8, 0x27324, 0x43f70, 0x43fc0, 0x44090, 0x44120, 0x442a0
*/
bool __fastcall sub_13EB8(char a1, __int64 *a2, unsigned int a3)
{
__int64 v6; // x0
int v7; // w20
_QWORD *v8; // x24
int v9; // w28
__int64 v10; // x0
int v11; // w8
int v12; // w9
unsigned __int16 *v13; // x8
int v14; // w9
const void *v15; // x1
int v16; // w0
__int64 v17; // x21
const char *v18; // x26
__int64 v19; // x22
int v20; // w8
const char *v21; // x0
_QWORD *v22; // x0
unsigned int v23; // w2
__int64 i; // x21
char v26; // [xsp+8h] [xbp-88h]
char v27; // [xsp+Ch] [xbp-84h]
__int64 v28; // [xsp+18h] [xbp-78h] BYREF
__int64 v29; // [xsp+20h] [xbp-70h] BYREF
int v30; // [xsp+28h] [xbp-68h]
int v31; // [xsp+2Ch] [xbp-64h]
const char *v32; // [xsp+30h] [xbp-60h] BYREF
__int64 v33; // [xsp+38h] [xbp-58h] BYREF
_QWORD *v34; // [xsp+40h] [xbp-50h] BYREF
__int64 v35; // [xsp+48h] [xbp-48h] BYREF
__int64 v36; // [xsp+50h] [xbp-40h] BYREF
char buf[48]; // [xsp+58h] [xbp-38h] BYREF
__int64 v38; // [xsp+88h] [xbp-8h]
v38 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_CC84(a2);
v34 = nullptr;
v6 = operator new[](0x28u);
v33 = v6;
*(_QWORD *)(v6 + 24) = v6;
*(_QWORD *)(v6 + 32) = v6;
v7 = sub_DA60(a3, (char *)&v34);
if ( !v7 )
{
v8 = v34;
if ( v34 )
{
v26 = a1;
v27 = a3;
v9 = 0;
while ( 1 )
{
if ( !v8[3] )
goto LABEL_23;
if ( (v8[2] & 0x49) != 0x41 )
goto LABEL_23;
v10 = v8[1];
if ( !v10 )
goto LABEL_23;
if ( (sub_27324(v10, qword_507F0) & 1) != 0 )
break;
if ( ((*((_DWORD *)v8 + 4) ^ 0xFFFFFFEF) & (_DWORD)v8[2]) != 0 )
{
v11 = v9 & 2;
v12 = v9 ^ 2;
goto LABEL_11;
}
v21 = (const char *)v8[1];
if ( v21 && strchr(v21, 58) )
v9 = v9 & 4 | v9 ^ 4;
LABEL_12:
v13 = (unsigned __int16 *)v8[3];
if ( v13 )
{
v14 = *v13;
if ( v14 == 10 )
{
v15 = v13 + 4;
v16 = 10;
LABEL_17:
inet_ntop(v16, v15, buf, 0x2Eu);
sub_C8F8(&v32, (char *)v8[1]);
sub_D210(&v32, ",");
sub_D210(&v32, ";");
v18 = v32;
v17 = v33;
v19 = v33;
while ( 1 )
{
v19 = *(_QWORD *)(v19 + 32);
if ( v19 == v17 )
break;
if ( !strcmp(*(const char **)v19, v18) )
{
sub_CF74((__int64 *)(v19 + 8), ";");
sub_CF74((__int64 *)(v19 + 8), buf);
++*(_DWORD *)(v19 + 16);
goto LABEL_22;
}
}
sub_C8D8(&v28, &v32);
sub_C8F8(&v29, buf);
v30 = 1;
v20 = *((_DWORD *)v8 + 4);
v35 = v33;
v31 = v20;
sub_142E8(&v36, &v33, &v35, &v28);
sub_CA10(&v29);
sub_CA10(&v28);
LABEL_22:
sub_CA10(&v32);
goto LABEL_23;
}
if ( v14 == 2 )
{
v15 = v13 + 2;
v16 = 2;
goto LABEL_17;
}
}
LABEL_23:
v8 = (_QWORD *)*v8;
if ( !v8 )
{
a1 = v26;
LOBYTE(a3) = v27;
v22 = v34;
goto LABEL_29;
}
}
v11 = v9 & 1;
v12 = v9 ^ 1;
LABEL_11:
v9 = v11 | v12;
goto LABEL_12;
}
v22 = nullptr;
v9 = 0;
LABEL_29:
sub_DA34(v22);
if ( (a1 & 1) != 0 )
{
if ( (a3 & 1) != 0 )
v23 = v9;
else
v23 = (~v9 & 0x2A318D49 | v9 & 0xD5CE72B6) ^ 0x2A318D41 | v9 & 8;
sub_CFD0(a2, "%u", v23);
}
for ( i = *(_QWORD *)(v33 + 32); i != v33; i = *(_QWORD *)(i + 32) )
{
if ( sub_CA28(a2) )
sub_CF74(a2, ",");
sub_CE08(a2, (const void **)i);
sub_CF74(a2, ";");
sub_CFD0(a2, "%u", *(_DWORD *)(i + 20));
sub_CF74(a2, ";");
sub_CFD0(a2, "%u", *(_DWORD *)(i + 16));
sub_CF74(a2, ";");
sub_CE08(a2, (const void **)(i + 8));
}
}
sub_14250(&v33);
return v7 == 0;
}
@@ -0,0 +1,14 @@
/*
* func-name: sub_14250
* func-address: 0x14250
* export-type: decompile
* callers: 0x13eb8
* callees: 0x14284
*/
void __fastcall sub_14250(void **a1)
{
sub_14284();
if ( *a1 )
operator delete[](*a1);
}
@@ -0,0 +1,30 @@
/*
* func-name: sub_14284
* func-address: 0x14284
* export-type: decompile
* callers: 0x14250
* callees: 0xca10, 0x441a0
*/
void __fastcall sub_14284(__int64 a1)
{
_QWORD *v1; // x21
_QWORD *v2; // x20
v1 = *(_QWORD **)a1;
v2 = *(_QWORD **)(*(_QWORD *)a1 + 32LL);
if ( v2 != *(_QWORD **)a1 )
{
do
{
v1 = (_QWORD *)v2[4];
sub_CA10(v2 + 1);
sub_CA10(v2);
operator delete(v2);
v2 = v1;
}
while ( v1 != *(_QWORD **)a1 );
}
v1[3] = v1;
v1[4] = v1;
}
@@ -0,0 +1,32 @@
/*
* func-name: sub_142E8
* func-address: 0x142e8
* export-type: decompile
* callers: 0x13eb8
* callees: 0xc8d8, 0x44050
*/
__int64 __usercall sub_142E8@<X0>(__int64 *a1@<X1>, _QWORD *a2@<X2>, _QWORD *a3@<X8>)
{
_QWORD *v6; // x22
__int64 result; // x0
__int64 v8; // x8
__int64 v9; // x9
__int64 v10; // x8
__int64 v11; // x8
v6 = (_QWORD *)operator new(0x28u);
sub_C8D8(v6, a2);
result = sub_C8D8(v6 + 1, a2 + 1);
v8 = a2[2];
*a3 = v6;
v9 = *a1;
v6[2] = v8;
v10 = *(_QWORD *)(v9 + 24);
v6[4] = v9;
v6[3] = v10;
v11 = *(_QWORD *)(v9 + 24);
*(_QWORD *)(v9 + 24) = v6;
*(_QWORD *)(v11 + 32) = v6;
return result;
}
@@ -0,0 +1,127 @@
/*
* func-name: sub_1435C
* func-address: 0x1435c
* export-type: decompile
* callers: 0x11fa0
* callees: 0xc8a4, 0xca10, 0xca28, 0xcc84, 0xcf74, 0xcfd0, 0xd210, 0x11238, 0x135b0, 0x13c2c, 0x146c8, 0x14838, 0x14994, 0x14b14, 0x14bb4, 0x25408, 0x2cad8, 0x2cd0c, 0x2cd74, 0x2cdc0, 0x2d4cc, 0x2daa0, 0x43f70
*/
bool __fastcall sub_1435C(__int64 a1, __int64 *a2)
{
int v3; // w20
_BOOL4 v4; // w20
__int64 v6; // x0
__int64 v7; // x22
__int64 v8; // x21
int v9; // w0
int v10; // w23
int v11; // w0
unsigned int i; // w24
__int64 v13; // x0
unsigned __int64 v14; // [xsp+20h] [xbp-B0h] BYREF
__int64 v15; // [xsp+28h] [xbp-A8h] BYREF
__int64 v16; // [xsp+30h] [xbp-A0h] BYREF
const char *v17; // [xsp+38h] [xbp-98h] BYREF
const char *v18; // [xsp+40h] [xbp-90h] BYREF
_BYTE v19[24]; // [xsp+48h] [xbp-88h] BYREF
_BYTE v20[24]; // [xsp+60h] [xbp-70h] BYREF
_BYTE v21[24]; // [xsp+78h] [xbp-58h] BYREF
_QWORD v22[3]; // [xsp+90h] [xbp-40h] BYREF
_BYTE v23[24]; // [xsp+A8h] [xbp-28h] BYREF
__int64 v24; // [xsp+C0h] [xbp-10h]
v3 = a1;
v24 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
if ( (int)sub_25408(a1) >= 17 )
{
sub_135B0();
sub_2CD0C(v23);
if ( (unsigned int)sub_14BB4(v3, (int)v23, (char *)qword_503C8) || (sub_2CD74(v23) & 1) != 0 )
{
v4 = 0;
}
else
{
sub_2CD0C(v22);
if ( (unsigned int)sub_13C2C((__int64)v23, (__int64)v22, (char *)qword_505B0)
|| (sub_2CD74(v22) & 1) != 0
|| (v6 = sub_2CAD8(),
v7 = v22[0],
v8 = v6,
v9 = (*(__int64 (__fastcall **)(__int64, _QWORD))(*(_QWORD *)v6 + 1368LL))(v6, v22[0]),
v9 < 1) )
{
v4 = 0;
}
else
{
v10 = v9;
sub_2DAA0(v21, qword_50300);
sub_2CD0C(v20);
v11 = sub_146C8(v21, v20, &unk_534B);
v4 = v11 == 0;
if ( !v11 )
{
sub_CC84(a2);
sub_C8A4(&v18);
sub_C8A4(&v17);
for ( i = 0; i != v10; ++i )
{
v13 = (*(__int64 (__fastcall **)(__int64, __int64, _QWORD))(*(_QWORD *)v8 + 1384LL))(v8, v7, i);
sub_2CDC0(v19, v13, 0);
if ( (sub_2CD74(v19) & 1) == 0 )
{
v15 = 0;
v16 = 0;
v14 = 0;
sub_CC84(&v18);
sub_14838((int)v19, (int)&v16, (char *)qword_503D0);
sub_14838((int)v19, (int)&v15 + 4, (char *)qword_503D8);
sub_11238((__int64)v19, (__int64)&v17, (char *)qword_503E0);
if ( !(unsigned int)sub_14838((int)v19, (int)&v16 + 4, (char *)qword_503E8)
&& !(unsigned int)sub_14838((int)v19, (int)&v15, (char *)qword_503F0)
&& !(unsigned int)sub_11238((__int64)v19, (__int64)&v18, (char *)qword_503F8)
&& !(unsigned int)sub_14994((int)v19, (int)&unk_50058, (char *)qword_50400)
&& !(unsigned int)sub_14B14(v20, (char *)&v14 + 4, qword_50690)
&& !(unsigned int)sub_14B14(v20, &v14, qword_50698) )
{
if ( SHIDWORD(v14) > (int)v14 )
v14 = __PAIR64__(v14, HIDWORD(v14));
sub_D210(&v17, ",");
sub_D210(&v17, ";");
sub_D210(&v18, ",");
sub_D210(&v18, ";");
if ( sub_CA28(a2) )
sub_CF74(a2, ";");
sub_CFD0(
a2,
"%d,%d,%s,%dx%d,%d,%d,%d,%s",
(HIDWORD(v16) >> 3) & 1,
v15,
v18,
HIDWORD(v14),
v14,
HIDWORD(v16),
v16,
HIDWORD(v15),
v17);
}
}
sub_2D4CC(v19);
}
sub_CA10(&v17);
sub_CA10(&v18);
}
sub_2D4CC(v20);
sub_2D4CC(v21);
}
sub_2D4CC(v22);
}
sub_2D4CC(v23);
}
else
{
return 0;
}
return v4;
}
@@ -0,0 +1,49 @@
/*
* func-name: sub_146C8
* func-address: 0x146c8
* export-type: decompile
* callers: 0x1435c, 0x2822c, 0x30c58, 0x3126c, 0x31efc, 0x32398, 0x32dd0, 0x4283c, 0x429ec
* callees: 0xc8a4, 0xc8d8, 0xc8f8, 0xca10, 0xce08, 0xcf74, 0x2d438, 0x2e0d0, 0x43f70
*/
__int64 __fastcall sub_146C8(__int64 a1, __int64 a2, char *a3)
{
unsigned int v6; // w21
__int64 *v7; // x0
const void *v9; // [xsp+0h] [xbp-30h] BYREF
__int64 v10; // [xsp+8h] [xbp-28h] BYREF
__int64 v11; // [xsp+10h] [xbp-20h] BYREF
__int64 v12; // [xsp+18h] [xbp-18h] BYREF
_QWORD v13[2]; // [xsp+20h] [xbp-10h] BYREF
v13[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
if ( a3 )
{
sub_C8F8(&v10, "(");
sub_C8D8(&v11, &v10);
sub_CF74(&v11, a3);
sub_C8D8(&v12, &v11);
sub_CF74(&v12, ")V");
v6 = sub_2D438(a1, v13, "<init>", v12);
sub_CA10(&v12);
v7 = &v11;
}
else
{
sub_C8F8(&v10, "(");
sub_C8A4(&v9);
sub_C8D8(&v11, &v10);
sub_CE08(&v11, &v9);
sub_C8D8(&v12, &v11);
sub_CF74(&v12, ")V");
v6 = sub_2D438(a1, v13, "<init>", v12);
sub_CA10(&v12);
sub_CA10(&v11);
v7 = (__int64 *)&v9;
}
sub_CA10(v7);
sub_CA10(&v10);
if ( !v6 )
return (unsigned int)sub_2E0D0(a1, a2, v13[0], 0);
return v6;
}
@@ -0,0 +1,46 @@
/*
* func-name: sub_14838
* func-address: 0x14838
* export-type: decompile
* callers: 0x1435c
* callees: 0xc8a4, 0xc8d8, 0xc8f8, 0xca10, 0xce08, 0xcf74, 0x2d00c, 0x2d330, 0x2d534, 0x43f70, 0x43fc0
*/
__int64 __fastcall sub_14838(__int64 a1, __int64 a2, char *s)
{
unsigned int v6; // w21
const void *v8; // [xsp+8h] [xbp-38h] BYREF
const void *v9; // [xsp+10h] [xbp-30h] BYREF
__int64 v10; // [xsp+18h] [xbp-28h] BYREF
__int64 v11; // [xsp+20h] [xbp-20h] BYREF
__int64 v12; // [xsp+28h] [xbp-18h] BYREF
__int64 v13[2]; // [xsp+30h] [xbp-10h] BYREF
v13[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
if ( !strchr(s, 40) )
{
sub_C8F8(&v10, "(");
sub_C8A4(&v9);
sub_C8D8(&v11, &v10);
sub_CE08(&v11, &v9);
sub_C8D8(v13, &v11);
sub_CF74(v13, ")");
sub_C8F8(&v8, (char *)qword_501E0);
sub_C8D8(&v12, v13);
sub_CE08(&v12, &v8);
sub_CA10(&v8);
sub_CA10(v13);
sub_CA10(&v11);
sub_CA10(&v9);
sub_CA10(&v10);
v6 = sub_2D330(a1, v13, s, v12);
sub_CA10(&v12);
if ( v6 )
return v6;
return (unsigned int)sub_2D00C(a1, a2, v13[0], 0);
}
v6 = sub_2D534(a1, v13, s);
if ( !v6 )
return (unsigned int)sub_2D00C(a1, a2, v13[0], 0);
return v6;
}
@@ -0,0 +1,53 @@
/*
* func-name: sub_14994
* func-address: 0x14994
* export-type: decompile
* callers: 0x1435c, 0x2822c, 0x42d50, 0x43900
* callees: 0xc8d8, 0xc8f8, 0xca10, 0xce08, 0xcf74, 0x14e60, 0x2cf1c, 0x2d330, 0x2d534, 0x2e3ac, 0x43f70, 0x43fc0
*/
__int64 __fastcall sub_14994(__int64 a1, __int64 a2, char *s, __int64 a4)
{
unsigned int v8; // w22
__int64 v9; // x22
const void *v11; // [xsp+8h] [xbp-38h] BYREF
const void *v12; // [xsp+10h] [xbp-30h] BYREF
__int64 v13; // [xsp+18h] [xbp-28h] BYREF
__int64 v14; // [xsp+20h] [xbp-20h] BYREF
__int64 v15; // [xsp+28h] [xbp-18h] BYREF
__int64 v16[2]; // [xsp+30h] [xbp-10h] BYREF
v16[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
if ( !strchr(s, 40) )
{
sub_C8F8(&v13, "(");
sub_14E60(&v12, a4);
sub_C8D8(&v14, &v13);
sub_CE08(&v14, &v12);
sub_C8D8(&v15, &v14);
sub_CF74(&v15, ")");
sub_C8F8(&v11, (char *)qword_501B8);
sub_C8D8(v16, &v15);
sub_CE08(v16, &v11);
sub_CA10(&v11);
sub_CA10(&v15);
sub_CA10(&v14);
sub_CA10(&v12);
sub_CA10(&v13);
v8 = sub_2D330(a1, &v15, s, v16[0]);
sub_CA10(v16);
if ( v8 )
return v8;
goto LABEL_3;
}
v8 = sub_2D534(a1, &v15, s);
if ( !v8 )
{
LABEL_3:
v9 = v15;
v16[0] = 0;
sub_2E3AC(v16, a4);
return (unsigned int)sub_2CF1C(a1, a2, v9, v16);
}
return v8;
}
@@ -0,0 +1,22 @@
/*
* func-name: sub_14B14
* func-address: 0x14b14
* export-type: decompile
* callers: 0x1435c, 0x25afc, 0x2822c
* callees: 0xc8f8, 0xca10, 0x2d724, 0x2d948, 0x43f70
*/
__int64 __fastcall sub_14B14(__int64 a1, __int64 a2, __int64 a3)
{
unsigned int v6; // w21
__int64 v8; // [xsp+8h] [xbp-18h] BYREF
_QWORD v9[2]; // [xsp+10h] [xbp-10h] BYREF
v9[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8F8(&v8, (char *)qword_501E0);
v6 = sub_2D948(a1, v9, a3, v8);
sub_CA10(&v8);
if ( !v6 )
return (unsigned int)sub_2D724(a1, a2, v9[0]);
return v6;
}
@@ -0,0 +1,46 @@
/*
* func-name: sub_14BB4
* func-address: 0x14bb4
* export-type: decompile
* callers: 0x1435c, 0x3126c
* callees: 0xc8d8, 0xc8f8, 0xca10, 0xce08, 0xcf74, 0x14d1c, 0x14da0, 0x2d330, 0x2d534, 0x2e22c, 0x43f70, 0x43fc0
*/
__int64 __fastcall sub_14BB4(__int64 a1, __int64 a2, char *s, __int64 a4)
{
unsigned int v8; // w22
const void *v10; // [xsp+8h] [xbp-38h] BYREF
const void *v11; // [xsp+10h] [xbp-30h] BYREF
__int64 v12; // [xsp+18h] [xbp-28h] BYREF
__int64 v13; // [xsp+20h] [xbp-20h] BYREF
__int64 v14; // [xsp+28h] [xbp-18h] BYREF
__int64 v15[2]; // [xsp+30h] [xbp-10h] BYREF
v15[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
if ( !strchr(s, 40) )
{
sub_C8F8(&v12, "(");
sub_14D1C(&v11, a4);
sub_C8D8(&v13, &v12);
sub_CE08(&v13, &v11);
sub_C8D8(v15, &v13);
sub_CF74(v15, ")");
sub_2E22C(&v10, 0);
sub_C8D8(&v14, v15);
sub_CE08(&v14, &v10);
sub_CA10(&v10);
sub_CA10(v15);
sub_CA10(&v13);
sub_CA10(&v11);
sub_CA10(&v12);
v8 = sub_2D330(a1, v15, s, v14);
sub_CA10(&v14);
if ( v8 )
return v8;
return (unsigned int)sub_14DA0(a1, a2, v15[0], a4);
}
v8 = sub_2D534(a1, v15, s);
if ( !v8 )
return (unsigned int)sub_14DA0(a1, a2, v15[0], a4);
return v8;
}
@@ -0,0 +1,21 @@
/*
* func-name: sub_14D1C
* func-address: 0x14d1c
* export-type: decompile
* callers: 0x14bb4
* callees: 0xc8a4, 0xc8d8, 0xc8f8, 0xca10, 0xce08, 0x43f70
*/
__int64 __usercall sub_14D1C@<X0>(__int64 *a1@<X8>)
{
const void *v3; // [xsp+8h] [xbp-18h] BYREF
_QWORD v4[2]; // [xsp+10h] [xbp-10h] BYREF
v4[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8F8(v4, (char *)qword_50210);
sub_C8A4(&v3);
sub_C8D8(a1, v4);
sub_CE08(a1, &v3);
sub_CA10(&v3);
return sub_CA10(v4);
}
@@ -0,0 +1,18 @@
/*
* func-name: sub_14DA0
* func-address: 0x14da0
* export-type: decompile
* callers: 0x14bb4
* callees: 0x14e24, 0x2d22c, 0x2e3b8, 0x43f70
*/
__int64 __fastcall sub_14DA0(__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
_QWORD v8[2]; // [xsp+0h] [xbp-10h] BYREF
v8[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_14E24(v8, a4);
LODWORD(a3) = sub_2D22C(a1, a2, a3, v8);
sub_2E3B8(v8);
return (unsigned int)a3;
}
@@ -0,0 +1,19 @@
/*
* func-name: sub_14E24
* func-address: 0x14e24
* export-type: decompile
* callers: 0x14da0
* callees: 0x2cad8
*/
__int64 __fastcall sub_14E24(__int64 *a1, _QWORD *a2)
{
__int64 v4; // x0
__int64 result; // x0
*a1 = 0;
v4 = sub_2CAD8();
result = (*(__int64 (__fastcall **)(__int64, _QWORD))(*(_QWORD *)v4 + 1336LL))(v4, *a2);
*a1 = result;
return result;
}
@@ -0,0 +1,21 @@
/*
* func-name: sub_14E60
* func-address: 0x14e60
* export-type: decompile
* callers: 0x14994, 0x25fa8, 0x26270, 0x28590, 0x2a5dc, 0x2a8f8, 0x343ec
* callees: 0xc8a4, 0xc8d8, 0xca10, 0xce08, 0x2e22c, 0x43f70
*/
__int64 __usercall sub_14E60@<X0>(__int64 a1@<X0>, __int64 *a2@<X8>)
{
const void *v4; // [xsp+8h] [xbp-18h] BYREF
_QWORD v5[2]; // [xsp+10h] [xbp-10h] BYREF
v5[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_2E22C(v5, a1);
sub_C8A4(&v4);
sub_C8D8(a2, v5);
sub_CE08(a2, &v4);
sub_CA10(&v4);
return sub_CA10(v5);
}
@@ -0,0 +1,18 @@
/*
* func-name: sub_14EDC
* func-address: 0x14edc
* export-type: decompile
* callers: 0x11fa0
* callees: 0x43f70, 0x442b0
*/
bool sub_14EDC()
{
unsigned __int8 vec[4]; // [xsp+4h] [xbp-Ch] BYREF
__int64 v2; // [xsp+8h] [xbp-8h]
v2 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
vec[0] = 0;
mincore((void *)qword_4FF78, dword_4FF70, vec);
return vec[0] == 1;
}
@@ -0,0 +1,17 @@
/*
* func-name: sub_14F44
* func-address: 0x14f44
* export-type: decompile
* callers: none
* callees: 0x44110, 0x442c0
*/
void *sub_14F44()
{
void *result; // x0
dword_4FF70 = getpagesize();
result = mmap(nullptr, dword_4FF70, 3, 34, -1, 0);
qword_4FF78 = (__int64)result;
return result;
}
@@ -0,0 +1,65 @@
/*
* func-name: sub_14F84
* func-address: 0x14f84
* export-type: decompile
* callers: 0x11fa0
* callees: 0xc8a4, 0xc8f8, 0xca10, 0xca28, 0xcc84, 0xcf74, 0xcfd0, 0xd068, 0xd0a8, 0xf188, 0x19e28, 0x1a0c8, 0x1c440, 0x2cd74, 0x2d4cc, 0x2daa0, 0x2e4e0, 0x43f70, 0x441c0
*/
bool __fastcall sub_14F84(__int64 a1, __int64 a2)
{
char *v4; // x20
char *v5; // x0
char *v6; // x22
unsigned __int8 *v7; // x22
int v8; // w0
unsigned __int64 v9; // x22
_BOOL4 v10; // w19
unsigned __int8 *v12; // [xsp+0h] [xbp-40h] BYREF
char *s; // [xsp+8h] [xbp-38h] BYREF
char *save_ptr; // [xsp+10h] [xbp-30h] BYREF
const char *v15; // [xsp+18h] [xbp-28h] BYREF
_BYTE v16[24]; // [xsp+20h] [xbp-20h] BYREF
__int64 v17; // [xsp+38h] [xbp-8h]
v17 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8A4(&v15);
sub_2E4E0(a1, off_4D578[0], &v15);
if ( sub_CA28(&v15) )
sub_CF74((__int64 *)&v15, ",");
sub_CF74((__int64 *)&v15, (char *)qword_503A0);
sub_19E28(a2);
sub_CA28(&v15);
v4 = (char *)sub_D068((__int64 *)&v15);
sub_C8A4(&s);
v5 = strtok_r(v4, ",", &save_ptr);
if ( v5 )
{
v6 = v5;
do
{
sub_2DAA0(v16, v6);
if ( (sub_2CD74(v16) & 1) == 0 )
{
sub_C8F8(&v12, v6);
v7 = v12;
v8 = sub_CA28(&v12);
v9 = sub_F188(v7, v8, 0);
if ( !(unsigned int)sub_1A0C8(a2) )
sub_1C440(a2, ",");
sub_CC84(&s);
sub_CFD0((__int64 *)&s, "%ld", v9);
sub_1C440(a2, s);
sub_CA10(&v12);
}
v6 = strtok_r(nullptr, ",", &save_ptr);
sub_2D4CC(v16);
}
while ( v6 );
}
sub_D0A8(&v15);
v10 = sub_1A0C8(a2) == 0;
sub_CA10(&s);
sub_CA10(&v15);
return v10;
}
@@ -0,0 +1,81 @@
/*
* func-name: sub_15150
* func-address: 0x15150
* export-type: decompile
* callers: 0x11fa0
* callees: 0xc8a4, 0xc8f8, 0xca10, 0xca28, 0xcc84, 0xcf74, 0xcfd0, 0xd068, 0xd0a8, 0xd210, 0xf188, 0x19e28, 0x1a0c8, 0x1c440, 0x24f90, 0x2e4e0, 0x43f70, 0x441c0, 0x442d0
*/
bool __fastcall sub_15150(__int64 a1, __int64 a2)
{
char *v4; // x20
char *v5; // x0
char *v6; // x24
unsigned __int8 *v7; // x25
int v8; // w0
unsigned __int64 v9; // x25
__int64 v10; // x0
unsigned int *v11; // x24
unsigned int v12; // w8
_BOOL4 v13; // w19
unsigned __int8 *v15; // [xsp+0h] [xbp-30h] BYREF
char *v16; // [xsp+8h] [xbp-28h] BYREF
char *s; // [xsp+10h] [xbp-20h] BYREF
char *save_ptr; // [xsp+18h] [xbp-18h] BYREF
const char *v19[2]; // [xsp+20h] [xbp-10h] BYREF
v19[1] = *(const char **)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8A4(v19);
sub_2E4E0(a1, off_4D580[0], v19);
if ( sub_CA28(v19) )
sub_CF74((__int64 *)v19, ",");
sub_CF74((__int64 *)v19, (char *)qword_50C78);
sub_19E28(a2);
sub_CA28(v19);
v4 = (char *)sub_D068((__int64 *)v19);
sub_C8A4(&s);
sub_C8A4(&v16);
v5 = strtok_r(v4, ",", &save_ptr);
if ( v5 )
{
v6 = v5;
do
{
if ( (sub_24F90(v6, &v16, 0) & 1) != 0 )
{
sub_C8F8(&v15, v6);
v7 = v15;
v8 = sub_CA28(&v15);
v9 = sub_F188(v7, v8, 0);
if ( !(unsigned int)sub_1A0C8(a2) )
sub_1C440(a2, ",");
sub_CC84(&s);
sub_CFD0((__int64 *)&s, "%ld", v9);
sub_1C440(a2, s);
sub_1C440(a2, ":");
sub_D210((const char **)&v16, ":");
sub_D210((const char **)&v16, ",");
sub_1C440(a2, v16);
sub_1C440(a2, ":");
v10 = __system_property_find(v6);
if ( v10 )
{
v11 = (unsigned int *)v10;
sub_CC84(&s);
v12 = atomic_load(v11);
sub_CFD0((__int64 *)&s, "%u", (v12 ^ 0xFF000000) & v12);
sub_1C440(a2, s);
}
sub_CA10(&v15);
}
v6 = strtok_r(nullptr, ",", &save_ptr);
}
while ( v6 );
}
sub_D0A8(v19);
v13 = sub_1A0C8(a2) == 0;
sub_CA10(&v16);
sub_CA10(&s);
sub_CA10(v19);
return v13;
}
@@ -0,0 +1,91 @@
/*
* func-name: sub_153B0
* func-address: 0x153b0
* export-type: decompile
* callers: 0x11fa0
* callees: 0xc8a4, 0xc8f8, 0xca10, 0xca28, 0xcc84, 0xcf74, 0xcfd0, 0xd068, 0xd0a8, 0xd210, 0xf188, 0x19e28, 0x1a0c8, 0x1c440, 0x28fe8, 0x2be88, 0x2e4e0, 0x43f70, 0x44120, 0x441c0
*/
bool __fastcall sub_153B0(__int64 a1, __int64 a2)
{
char *v4; // x22
char *v5; // x0
char *v6; // x24
unsigned __int8 *v7; // x24
int v8; // w0
unsigned __int64 v9; // x24
_BOOL4 v10; // w19
unsigned __int8 *v12; // [xsp+8h] [xbp-38h] BYREF
char *v13; // [xsp+10h] [xbp-30h] BYREF
char *v14; // [xsp+18h] [xbp-28h] BYREF
char *s; // [xsp+20h] [xbp-20h] BYREF
char *save_ptr; // [xsp+28h] [xbp-18h] BYREF
const char *v17[2]; // [xsp+30h] [xbp-10h] BYREF
v17[1] = *(const char **)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8A4(v17);
sub_2E4E0(a1, off_4D5A8[0], v17);
if ( sub_CA28(v17) )
sub_CF74((__int64 *)v17, ",");
sub_CF74((__int64 *)v17, (char *)qword_50B90);
sub_CF74((__int64 *)v17, ",");
sub_CF74((__int64 *)v17, (char *)qword_50978);
sub_19E28(a2);
sub_CA28(v17);
v4 = (char *)sub_D068((__int64 *)v17);
sub_C8A4(&s);
sub_C8A4(&v14);
sub_C8A4(&v13);
v5 = strtok_r(v4, ",", &save_ptr);
if ( v5 )
{
v6 = v5;
do
{
if ( (sub_2BE88(v6, &v14, 0, 0) & 1) != 0 && sub_CA28(&v14) )
{
if ( !strcmp((const char *)qword_50B98, v6) )
{
if ( (sub_2E4E0(a1, off_4D3D8[0], &v13) & 1) != 0 )
{
LABEL_11:
if ( sub_CA28(&v13) && strcmp(v14, v13) )
{
sub_C8F8(&v12, v6);
v7 = v12;
v8 = sub_CA28(&v12);
v9 = sub_F188(v7, v8, 0);
if ( !(unsigned int)sub_1A0C8(a2) )
sub_1C440(a2, ",");
sub_CC84(&s);
sub_CFD0((__int64 *)&s, "%ld", v9);
sub_1C440(a2, s);
sub_1C440(a2, ":");
sub_D210((const char **)&v14, ":");
sub_D210((const char **)&v14, ",");
sub_1C440(a2, v14);
sub_1C440(a2, ":");
sub_D210((const char **)&v13, ":");
sub_D210((const char **)&v13, ",");
sub_1C440(a2, v13);
sub_CA10(&v12);
}
}
}
else if ( (sub_28FE8(v6, &v13) & 1) != 0 )
{
goto LABEL_11;
}
}
v6 = strtok_r(nullptr, ",", &save_ptr);
}
while ( v6 );
}
sub_D0A8(v17);
v10 = sub_1A0C8(a2) == 0;
sub_CA10(&v13);
sub_CA10(&v14);
sub_CA10(&s);
sub_CA10(v17);
return v10;
}
@@ -0,0 +1,102 @@
/*
* func-name: sub_15694
* func-address: 0x15694
* export-type: decompile
* callers: 0x11fa0, 0x21de4
* callees: 0xc8a4, 0xca10, 0xca28, 0xcc84, 0xcd24, 0xcfd0, 0xd068, 0xd0a8, 0xf188, 0x19e28, 0x1a0c8, 0x1c440, 0x2e4e0, 0x43f70, 0x440b0, 0x44180, 0x441c0
*/
__int64 __fastcall sub_15694(__int64 a1, __int64 a2)
{
char *v4; // x20
char *i; // x0
char *v6; // x26
char *v7; // x27
int v8; // w25
char *v9; // x1
unsigned __int8 *v10; // x27
int v11; // w0
unsigned __int64 v12; // x27
unsigned int v13; // w19
__int128 v15; // [xsp+10h] [xbp-C0h] BYREF
__int128 v16; // [xsp+20h] [xbp-B0h]
__int128 v17; // [xsp+30h] [xbp-A0h]
__int128 v18; // [xsp+40h] [xbp-90h]
__int128 v19; // [xsp+50h] [xbp-80h]
__int128 v20; // [xsp+60h] [xbp-70h]
__int128 v21; // [xsp+70h] [xbp-60h]
__int128 v22; // [xsp+80h] [xbp-50h]
char *v23; // [xsp+98h] [xbp-38h] BYREF
char *v24; // [xsp+A0h] [xbp-30h] BYREF
char *v25; // [xsp+A8h] [xbp-28h] BYREF
char *save_ptr; // [xsp+B0h] [xbp-20h] BYREF
const char *v27[3]; // [xsp+B8h] [xbp-18h] BYREF
v27[1] = *(const char **)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_C8A4(v27);
if ( (sub_2E4E0(a1, off_4D560[0], v27) & 1) != 0 && sub_CA28(v27) )
{
sub_19E28(a2);
sub_CA28(v27);
v4 = (char *)sub_D068((__int64 *)v27);
sub_C8A4(&v24);
sub_C8A4(&v23);
for ( i = strtok_r(v4, ",", &save_ptr); i; i = strtok_r(nullptr, ",", &save_ptr) )
{
v6 = strtok_r(i, ";", &v25);
v7 = strtok_r(nullptr, ";", &v25);
if ( !access(v6, 0) )
{
if ( access(v6, 2) )
v8 = 1;
else
v8 = 3;
if ( v7 )
v9 = v7;
else
v9 = v6;
sub_CD24((__int64 *)&v23, v9);
v10 = (unsigned __int8 *)v23;
v11 = sub_CA28(&v23);
v12 = sub_F188(v10, v11, 0);
if ( !(unsigned int)sub_1A0C8(a2) )
sub_1C440(a2, ",");
sub_CC84(&v23);
v21 = 0u;
v22 = 0u;
v19 = 0u;
v20 = 0u;
v17 = 0u;
v18 = 0u;
v15 = 0u;
v16 = 0u;
if ( real_syscall(79, 4294967196LL, v6, &v15) )
v8 |= 4u;
else
sub_CFD0(
(__int64 *)&v23,
"%d_%lu_%ld_%d_%lu_%lu_%lu",
DWORD2(v16),
(_QWORD)v15,
(_QWORD)v18,
((unsigned int)v16 ^ 0xFFFFFE00) & (unsigned int)v16,
*((_QWORD *)&v15 + 1),
(__int64)v20 / 1000000 + 1000LL * *((_QWORD *)&v19 + 1),
(__int64)v21 / 1000000 + 1000LL * *((_QWORD *)&v20 + 1));
sub_CC84(&v24);
sub_CFD0((__int64 *)&v24, "%ld%s%u%s%s", v12, ":", v8, ":", v23);
sub_1C440(a2, v24);
}
}
sub_D0A8(v27);
sub_CA10(&v23);
sub_CA10(&v24);
v13 = 1;
}
else
{
v13 = 0;
}
sub_CA10(v27);
return v13;
}
@@ -0,0 +1,229 @@
/*
* func-name: sub_15940
* func-address: 0x15940
* export-type: decompile
* callers: 0x11fa0
* callees: 0xc8a4, 0xc8f8, 0xca10, 0xca28, 0xcc84, 0xcfd0, 0xd068, 0xd0a8, 0xd210, 0x15f7c, 0x165d4, 0x16628, 0x169f0, 0x16c74, 0x16e34, 0x16e68, 0x19e28, 0x1a0c8, 0x1c440, 0x43f70, 0x44090, 0x441c0, 0x441d0, 0x442e0
*/
__int64 __fastcall sub_15940(__int64 *a1, __int64 a2, char a3)
{
__int64 v6; // x0
__int64 v7; // x0
char v8; // w23
__int64 v9; // x23
char *v10; // x0
char *v11; // x0
char *v12; // x26
char *v13; // x0
char *v14; // x0
unsigned __int64 v15; // x0
char *v16; // x26
char *v17; // x0
int v18; // w3
__int64 v19; // x21
__int64 v20; // x0
__int64 i; // x19
__int64 v22; // x0
__int64 v23; // x1
__int64 v24; // x2
__int64 v25; // x3
__int64 v26; // x4
int v27; // w26
char v29; // [xsp+2Ch] [xbp-F4h]
char *v30; // [xsp+38h] [xbp-E8h] BYREF
char *save_ptr; // [xsp+40h] [xbp-E0h] BYREF
__int64 v32; // [xsp+48h] [xbp-D8h] BYREF
_QWORD v33[2]; // [xsp+50h] [xbp-D0h] BYREF
__int128 v34; // [xsp+60h] [xbp-C0h]
__int128 v35; // [xsp+70h] [xbp-B0h]
__int128 v36; // [xsp+80h] [xbp-A0h]
__int64 v37; // [xsp+90h] [xbp-90h] BYREF
_QWORD v38[2]; // [xsp+98h] [xbp-88h] BYREF
char v39; // [xsp+A8h] [xbp-78h]
__int64 (__fastcall *v40)(__int64, __int64, __int64, __int64, __int64); // [xsp+B0h] [xbp-70h]
char v41; // [xsp+B8h] [xbp-68h]
int v42; // [xsp+B9h] [xbp-67h]
__int128 v43; // [xsp+C0h] [xbp-60h]
__int128 v44; // [xsp+D0h] [xbp-50h]
__int64 v45; // [xsp+E0h] [xbp-40h] BYREF
__int64 v46; // [xsp+E8h] [xbp-38h] BYREF
__int64 v47; // [xsp+F0h] [xbp-30h] BYREF
__int64 v48; // [xsp+F8h] [xbp-28h]
__int64 v49; // [xsp+100h] [xbp-20h] BYREF
char v50; // [xsp+108h] [xbp-18h]
char v51; // [xsp+10Ch] [xbp-14h]
__int64 v52; // [xsp+110h] [xbp-10h]
v52 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
sub_19E28(a2);
v6 = operator new[](0x50u);
v33[0] = v6;
*(_QWORD *)(v6 + 64) = v6;
*(_QWORD *)(v6 + 72) = v6;
v7 = operator new[](0x50u);
v33[1] = v7;
*(_QWORD *)(v7 + 64) = v7;
*(_QWORD *)(v7 + 72) = v7;
v34 = 0u;
v35 = 0u;
v36 = 0u;
v8 = sub_15F7C(v33);
if ( (v8 & 1) != 0 )
{
v29 = v8;
v9 = operator new[](0x90u);
v32 = v9;
*(_QWORD *)(v9 + 128) = v9;
*(_QWORD *)(v9 + 136) = v9;
sub_C8A4(&v37);
sub_C8A4(v38);
v39 = 0;
v40 = nullptr;
v41 = 0;
v42 = 0;
v43 = 0u;
v44 = 0u;
sub_C8A4(&v45);
sub_C8A4(&v46);
sub_C8A4(&v47);
v48 = 0;
sub_C8A4(&v49);
v50 = 0;
v51 = 0;
if ( sub_CA28(a1) )
{
sub_CA28(a1);
v10 = (char *)sub_D068(a1);
v11 = strtok_r(v10, ",", &save_ptr);
if ( v11 )
{
v12 = v11;
do
{
sub_165D4(&v37);
v13 = strtok_r(v12, ":", &v30);
v50 = strtol(v13, nullptr, 10);
v48 = 0;
if ( (unsigned __int8)*v30 < 0x31u
|| (unsigned __int8)v30[1] > 0x38u
|| (v14 = strtok_r(nullptr, ":", &v30), v15 = strtoul(v14, nullptr, 10), v15 - 513 <= 0xFFFFFFFFFFFFFDFFLL) )
{
v15 = 8;
}
v48 = v15;
v16 = strtok_r(nullptr, ":", &v30);
v17 = strtok_r(nullptr, ":", &v30);
if ( v50 == 1 )
{
v18 = 0;
}
else
{
if ( v50 != 2 )
{
if ( v50 == 3 )
sub_16628(v33, v16, v17, &v37, &v32);
goto LABEL_16;
}
v18 = 1;
}
sub_169F0((int)v33, (int)v16, (int)v17, v18, (int)&v37);
LABEL_16:
v12 = strtok_r(nullptr, ",", &save_ptr);
}
while ( v12 );
}
sub_D0A8((const char **)a1);
}
if ( (a3 & 1) != 0 )
{
sub_165D4(&v37);
v50 = 3;
v51 = v51 & 1 | v51 ^ 1;
v48 = 12;
sub_C8F8(&save_ptr, (char *)qword_50CF0);
v19 = qword_50CE8;
sub_CA28(&save_ptr);
v20 = sub_D068((__int64 *)&save_ptr);
sub_16628(v33, v19, v20, &v37, &v32);
sub_CA10(&save_ptr);
}
sub_16C74(v33, &v32);
sub_1C440(a2, "1");
sub_C8A4(&save_ptr);
for ( i = *(_QWORD *)(v9 + 136); i != v9; i = *(_QWORD *)(i + 136) )
{
if ( *(_BYTE *)(i + 24) )
{
if ( !(unsigned int)sub_1A0C8(a2) )
sub_1C440(a2, ",");
sub_CC84(&save_ptr);
sub_CFD0((__int64 *)&save_ptr, "%ld", *(_QWORD *)(i + 16));
sub_1C440(a2, save_ptr);
sub_1C440(a2, ":");
sub_CC84(&save_ptr);
sub_CFD0((__int64 *)&save_ptr, "%lx", *(_QWORD *)(i + 32));
sub_1C440(a2, save_ptr);
sub_1C440(a2, ":");
sub_D210((const char **)(i + 80), ",");
sub_D210((const char **)(i + 80), ":");
sub_1C440(a2, *(char **)(i + 80));
sub_1C440(a2, ":");
sub_1C440(a2, *(char **)(i + 88));
sub_1C440(a2, ":");
sub_1C440(a2, (char *)(i + 40));
sub_1C440(a2, ":");
sub_CC84(&save_ptr);
sub_CFD0((__int64 *)&save_ptr, "%ju", *(_QWORD *)(i + 48));
sub_1C440(a2, save_ptr);
sub_1C440(a2, ":");
sub_CC84(&save_ptr);
sub_CFD0((__int64 *)&save_ptr, "%ju", *(_QWORD *)(i + 56));
sub_1C440(a2, save_ptr);
if ( *(_BYTE *)(i + 120) == 3 )
{
sub_1C440(a2, ":");
sub_CC84(&save_ptr);
sub_CFD0((__int64 *)&save_ptr, "%u", *(unsigned __int16 *)(i + 122));
sub_1C440(a2, save_ptr);
sub_1C440(a2, ":");
sub_1C440(a2, *(char **)(i + 112));
sub_1C440(a2, ":");
sub_CC84(&save_ptr);
sub_CFD0((__int64 *)&save_ptr, "%ju", *(_QWORD *)(i + 64));
sub_1C440(a2, save_ptr);
sub_1C440(a2, ":");
sub_CC84(&save_ptr);
sub_CFD0((__int64 *)&save_ptr, "%ju", *(_QWORD *)(i + 72));
sub_1C440(a2, save_ptr);
sub_1C440(a2, ":");
sub_1C440(a2, *(char **)(i + 96));
sub_1C440(a2, ":");
if ( (*(unsigned __int8 *)(i + 124) ^ 1 | 0xFE) != 0xFF )
{
v22 = sub_CA28((_QWORD *)(i + 88));
if ( v22 )
v27 = v40(v22, v23, v24, v25, v26) & 1;
else
v27 = 2;
sub_CC84(&save_ptr);
sub_CFD0((__int64 *)&save_ptr, "%u", v27);
sub_1C440(a2, save_ptr);
}
}
}
}
sub_CA10(&save_ptr);
sub_CA10(&v49);
sub_CA10(&v47);
sub_CA10(&v46);
sub_CA10(&v45);
sub_CA10(v38);
sub_CA10(&v37);
sub_16E34(&v32);
v8 = v29;
}
sub_16E68(v33);
return v8 & 1;
}
@@ -0,0 +1,249 @@
/*
* func-name: sub_15F7C
* func-address: 0x15f7c
* export-type: decompile
* callers: 0x15940
* callees: 0xc8a4, 0xca10, 0xca28, 0xcd24, 0x135b0, 0x16eac, 0x16f34, 0x17040, 0x25408, 0x2cad8, 0x2cc98, 0x2cd0c, 0x2cd74, 0x2cdc0, 0x2d22c, 0x2d438, 0x2d4cc, 0x2d724, 0x2d9cc, 0x2daa0, 0x43f70, 0x44060, 0x440b0, 0x44120, 0x44220, 0x442f0, 0x44300, 0x44310, 0x44320
*/
bool __fastcall sub_15F7C(_QWORD *a1)
{
int v2; // w20
__int64 v3; // x0
char *v4; // x1
__int64 v5; // x0
int v6; // w22
int v7; // w23
void *v8; // x21
__int64 v10; // x21
__int64 v11; // x0
__int64 v12; // x0
__int64 v13; // x0
__int64 v14; // x0
__int64 v15; // x0
__int64 v16; // x0
__int64 v17; // x21
__int64 v18; // x0
int v19; // w0
FILE *v20; // x0
FILE *v21; // x20
char *v22; // x0
__int64 v23; // x8
unsigned __int64 v24; // x8
unsigned __int64 v25; // x9
__int64 v26; // [xsp+18h] [xbp-1128h]
_BYTE v27[8]; // [xsp+28h] [xbp-1118h] BYREF
_BYTE v28[8]; // [xsp+30h] [xbp-1110h] BYREF
__int64 v29; // [xsp+38h] [xbp-1108h] BYREF
__int64 v30; // [xsp+40h] [xbp-1100h] BYREF
_QWORD v31[3]; // [xsp+48h] [xbp-10F8h] BYREF
__int64 v32; // [xsp+60h] [xbp-10E0h] BYREF
__int64 v33; // [xsp+68h] [xbp-10D8h] BYREF
__int16 v34; // [xsp+70h] [xbp-10D0h] BYREF
char *s2; // [xsp+78h] [xbp-10C8h] BYREF
char v36; // [xsp+80h] [xbp-10C0h]
_DWORD v37[6]; // [xsp+88h] [xbp-10B8h] BYREF
_BYTE v38[24]; // [xsp+A0h] [xbp-10A0h] BYREF
_BYTE v39[24]; // [xsp+B8h] [xbp-1088h] BYREF
_QWORD v40[3]; // [xsp+D0h] [xbp-1070h] BYREF
_BYTE v41[24]; // [xsp+E8h] [xbp-1058h] BYREF
_QWORD v42[3]; // [xsp+100h] [xbp-1040h] BYREF
_BYTE v43[24]; // [xsp+118h] [xbp-1028h] BYREF
_QWORD s[514]; // [xsp+130h] [xbp-1010h] BYREF
s[512] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
v2 = sub_25408(a1);
if ( v2 < 26 )
{
v5 = sub_2CC98("java/lang/reflect/AbstractMethod");
a1[2] = v5;
if ( v5 )
{
sub_C8A4(&v30);
if ( v2 <= 22 )
{
sub_CD24(&v30, "java/lang/reflect/ArtMethod");
sub_2DAA0(v43, v30);
v6 = 0;
goto LABEL_11;
}
v4 = "java/lang/reflect/AbstractMethod";
LABEL_7:
sub_CD24(&v30, v4);
sub_2DAA0(v43, v30);
sub_2D9CC(v43, a1 + 3, "artMethod", "J");
if ( !a1[3] )
goto LABEL_15;
v6 = 1;
LABEL_11:
v8 = sub_135B0();
if ( (sub_2CD74(v8) & 1) == 0 )
{
v29 = 0;
sub_2D438(v8, &v29, "getDeclaredConstructors", "()[Ljava/lang/reflect/Constructor;");
if ( v29 )
{
sub_2DAA0(v42, "java/lang/Throwable");
if ( (sub_2CD74(v42) & 1) != 0 )
{
v7 = 2;
}
else
{
sub_2CDC0(v41, v42[0], 1);
sub_2CD0C(v40);
if ( (unsigned int)sub_2D22C(v41, v40, v29, 0)
|| (v10 = v40[0]) == 0
|| (v11 = ((__int64 (*)(void))sub_2CAD8)(),
(*(int (__fastcall **)(__int64, __int64))(*(_QWORD *)v11 + 1368LL))(v11, v10) < 2) )
{
v7 = 2;
}
else
{
v12 = ((__int64 (*)(void))sub_2CAD8)();
v13 = (*(__int64 (__fastcall **)(__int64, __int64, _QWORD))(*(_QWORD *)v12 + 1384LL))(v12, v10, 0);
v14 = sub_2CDC0(v39, v13, 1);
v15 = sub_2CAD8(v14);
v16 = (*(__int64 (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)v15 + 1384LL))(v15, v10, 1);
sub_2CDC0(v38, v16, 1);
v17 = sub_16EAC(a1, v39);
v18 = sub_16EAC(a1, v38);
v7 = 2;
if ( (v17 == 0) == (v18 == 0) && v17 | v18 )
{
a1[4] = v18 - v17;
a1[5] = v18 - v17 - 8;
if ( v6 )
{
if ( !(unsigned int)sub_2D9CC(v43, s, "accessFlags", "I") && !(unsigned int)sub_2D724(v39, v31, s[0]) )
{
v24 = a1[4];
if ( v24 )
{
v25 = 0;
while ( *(_DWORD *)(v17 + v25) != LODWORD(v31[0]) )
{
v25 += 4LL;
if ( v25 >= v24 )
goto LABEL_29;
}
a1[6] = v25;
}
}
LABEL_29:
if ( !a1[6] )
a1[6] = 4;
}
else
{
sub_2DAA0(v31, "java/lang/reflect/ArtField");
sub_2DAA0(v37, "java/lang/reflect/Field");
if ( (sub_2CD74(v37) & 1) == 0 )
sub_2D9CC(v37, v28, "artField", "Ljava/lang/reflect/ArtField;");
if ( (sub_2CD74(v31) & 1) == 0 )
sub_2D9CC(v31, v27, "offset", "I");
s[0] = v43;
s[1] = a1;
s[2] = v28;
s[3] = v27;
a1[6] = (int)sub_16F34(s, "accessFlags", "I");
if ( v2 == 21 )
{
a1[5] = (int)sub_16F34(s, "entryPointFromQuickCompiledCode", "J");
a1[7] = (int)sub_16F34(s, "entryPointFromInterpreter", "J");
}
sub_2D4CC(v37);
sub_2D4CC(v31);
}
v19 = real_syscall(56, 4294967196LL, qword_50B18, 0);
if ( v19 >= 1 && (v20 = fdopen(v19, "r")) != nullptr )
{
v21 = v20;
memset(s, 0, 0x1000u);
memset(v31, 0, 21);
v32 = 0;
v33 = 0;
v34 = 0;
sub_C8A4(&s2);
v36 = 0;
while ( fgets((char *)s, 4096, v21) )
{
v22 = __strchr_chk((const char *)s, 10, 0x1000u);
if ( v22 )
*v22 = 0;
v37[0] = 0;
if ( sscanf(
(const char *)s,
"%lx-%lx %4c %llx %hhx:%hhx %ld %n",
v31,
&v31[1],
&v31[2],
&v32,
&v34,
(char *)&v34 + 1,
&v33,
v37) >= 7
&& BYTE3(v31[2]) == 112
&& (LOBYTE(v31[2]) == 114 || BYTE2(v31[2]) == 120) )
{
sub_CD24((__int64 *)&s2, (char *)s + v37[0]);
if ( sub_CA28(&s2) && *s2 == 47 && !v32 && v33 )
sub_17040(a1 + 1, v31);
if ( BYTE2(v31[2]) == 120 )
{
sub_17040(a1, v31);
if ( sub_CA28(&s2) )
{
v23 = a1[1];
if ( *(_QWORD *)(v23 + 72) != v23 )
{
v26 = *(_QWORD *)(v23 + 64);
if ( !strcmp(*(const char **)(v26 + 48), s2) )
*(_BYTE *)(v26 + 56) = 1;
}
}
}
}
}
fclose(v21);
sub_CA10(&s2);
v7 = 1;
}
else
{
v7 = 2;
}
}
sub_2D4CC(v38);
sub_2D4CC(v39);
}
sub_2D4CC(v40);
sub_2D4CC(v41);
}
sub_2D4CC(v42);
goto LABEL_20;
}
}
LABEL_15:
v7 = 2;
LABEL_20:
sub_2D4CC(v43);
sub_CA10(&v30);
return v7 != 2;
}
}
else
{
v3 = sub_2CC98("java/lang/reflect/Executable");
a1[2] = v3;
if ( v3 )
{
sub_C8A4(&v30);
v4 = "java/lang/reflect/Executable";
goto LABEL_7;
}
}
v7 = 2;
return v7 != 2;
}
@@ -0,0 +1,23 @@
/*
* func-name: sub_165D4
* func-address: 0x165d4
* export-type: decompile
* callers: 0x15940
* callees: 0xcc84
*/
__int64 __fastcall sub_165D4(__int64 a1)
{
__int64 result; // x0
*(_BYTE *)(a1 + 24) = 0;
*(_QWORD *)(a1 + 32) = 0;
sub_CC84((_QWORD *)a1);
sub_CC84((_QWORD *)(a1 + 8));
sub_CC84((_QWORD *)(a1 + 80));
sub_CC84((_QWORD *)(a1 + 88));
sub_CC84((_QWORD *)(a1 + 96));
result = sub_CC84((_QWORD *)(a1 + 112));
*(_WORD *)(a1 + 122) = 0;
return result;
}
@@ -0,0 +1,184 @@
/*
* func-name: sub_16628
* func-address: 0x16628
* export-type: decompile
* callers: 0x15940
* callees: 0xc8a4, 0xc8d8, 0xca10, 0xca28, 0xcc84, 0xccd0, 0xcd24, 0xce08, 0xcf74, 0xe7a0, 0xed30, 0xee70, 0xf188, 0x171dc, 0x174d4, 0x25408, 0x27358, 0x43f70, 0x44050, 0x44120, 0x441a0, 0x441c0, 0x44330
*/
__int64 __fastcall sub_16628(__int64 result, char *a2, char *a3, __int64 a4, __int64 *a5)
{
__int64 v7; // x23
__int64 v10; // x0
__int64 *v11; // x8
__int64 *v12; // x24
const char *v13; // x0
__int64 v14; // x8
__int64 *v15; // x25
__int64 v16; // x8
__int64 v17; // x9
__int64 v18; // x11
unsigned __int64 *v19; // x12
unsigned __int64 v20; // x10
__int64 v21; // x24
int v22; // w8
char *v23; // x0
char *v24; // x25
unsigned __int8 *v25; // x25
int v26; // w0
__int64 v27; // x27
__int64 v28; // x25
unsigned __int8 *v29; // [xsp+8h] [xbp-C8h] BYREF
__int64 v30; // [xsp+10h] [xbp-C0h] BYREF
__int64 v31; // [xsp+18h] [xbp-B8h] BYREF
char *save_ptr; // [xsp+20h] [xbp-B0h] BYREF
size_t v33; // [xsp+28h] [xbp-A8h] BYREF
__int64 v34; // [xsp+30h] [xbp-A0h]
__int64 v35; // [xsp+38h] [xbp-98h]
__int16 v36; // [xsp+40h] [xbp-90h]
__int128 v37; // [xsp+48h] [xbp-88h]
__int128 v38; // [xsp+58h] [xbp-78h]
__int128 v39; // [xsp+68h] [xbp-68h]
__int64 v40; // [xsp+78h] [xbp-58h] BYREF
__int128 v41; // [xsp+80h] [xbp-50h]
__int64 v42; // [xsp+90h] [xbp-40h] BYREF
__int64 v43; // [xsp+98h] [xbp-38h] BYREF
__int64 v44; // [xsp+A0h] [xbp-30h] BYREF
_QWORD data[5]; // [xsp+A8h] [xbp-28h] BYREF
data[4] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
if ( !a2 || (a3 == nullptr) != (*a2 == 0) || a3 == nullptr && *a2 == 0 || !*a3 )
return result;
v7 = result;
v43 = 0;
v44 = 0;
v10 = sub_C8A4(&v42);
data[0] = a2;
data[1] = &v44;
data[2] = &v43;
data[3] = &v42;
if ( &dl_iterate_phdr && (int)sub_25408(v10) >= 23 )
dl_iterate_phdr((int (*)(struct dl_phdr_info *, size_t, void *))sub_170B0, data);
if ( v44 )
{
LABEL_27:
v21 = v42;
v34 = 0;
v35 = 0;
v33 = 0;
v36 = 0;
v37 = 0u;
v38 = 0u;
v39 = 0u;
sub_C8A4(&v40);
v41 = 0u;
sub_E7A0((__int64)&v33, v21);
if ( v34 )
{
v22 = *(unsigned __int16 *)(v34 + 18);
*(_WORD *)(a4 + 122) = v22;
if ( v22 )
{
sub_CCD0((_QWORD *)(a4 + 112), &v40);
*(_OWORD *)(a4 + 64) = v41;
sub_CD24((__int64 *)a4, a2);
v23 = strtok_r(a3, "#", &save_ptr);
if ( v23 )
{
v24 = v23;
do
{
v30 = 0;
v31 = 0;
if ( (sub_EE70((__int64)&v33, v43, v24, &v31, &v30) & 1) != 0 && v31 )
{
sub_CC84((_QWORD *)(a4 + 96));
if ( v30 )
sub_171DC(v30, *(_QWORD *)(a4 + 104), a4 + 96);
*(_QWORD *)(a4 + 32) = v31;
sub_CD24((__int64 *)(a4 + 8), v24);
sub_C8D8(&v29, (_QWORD *)a4);
sub_CF74((__int64 *)&v29, ":");
sub_CE08((__int64 *)&v29, (const void **)(a4 + 8));
v25 = v29;
v26 = sub_CA28(&v29);
*(_QWORD *)(a4 + 16) = sub_F188(v25, v26, 0);
v27 = *a5;
v28 = operator new(0x90u);
sub_174D4(v28, a4);
*(_QWORD *)(v28 + 136) = v27;
*(_QWORD *)(v28 + 128) = *(_QWORD *)(v27 + 128);
*(_QWORD *)(*(_QWORD *)(v27 + 128) + 136LL) = v28;
*(_QWORD *)(v27 + 128) = v28;
sub_CA10(&v29);
}
v24 = strtok_r(nullptr, "#", &save_ptr);
}
while ( v24 );
}
}
}
else
{
*(_WORD *)(a4 + 122) = 0;
}
sub_ED30(&v33);
return sub_CA10(&v42);
}
v11 = *(__int64 **)(v7 + 8);
v12 = (__int64 *)v11[9];
while ( v12 != v11 )
{
if ( !*((_BYTE *)v12 + 56) )
{
v14 = v12[8];
v15 = (__int64 *)v12[9];
*(_QWORD *)(v14 + 72) = v15;
v15[8] = v14;
sub_CA10(v12 + 6);
operator delete(v12);
v12 = v15;
goto LABEL_24;
}
v13 = (const char *)v12[6];
if ( *a2 == 47 )
{
if ( strcmp(v13, a2) )
goto LABEL_24;
}
else if ( (sub_27358(v13, a2) & 1) == 0 )
{
goto LABEL_24;
}
v16 = *v12;
v17 = *(unsigned __int16 *)(*v12 + 56);
if ( *(_WORD *)(*v12 + 56) )
{
v18 = 0;
v19 = (unsigned __int64 *)(*(_QWORD *)(v16 + 32) + v16 + 16);
v20 = -1;
do
{
if ( *((_DWORD *)v19 - 4) == 1 && v20 > *v19 )
v20 = *v19;
++v18;
--v17;
v19 += 7;
}
while ( v17 );
if ( v20 != -1 )
{
v43 = v16 - v20;
v44 = v16;
sub_CCD0(&v42, v12 + 6);
break;
}
}
LABEL_24:
v12 = (__int64 *)v12[9];
v11 = *(__int64 **)(v7 + 8);
}
if ( v44 )
goto LABEL_27;
return sub_CA10(&v42);
}
@@ -0,0 +1,117 @@
/*
* func-name: sub_169F0
* func-address: 0x169f0
* export-type: decompile
* callers: 0x15940
* callees: 0xc8d8, 0xca10, 0xca28, 0xcd24, 0xce08, 0xcf74, 0xf188, 0x174d4, 0x2cad8, 0x2cd74, 0x2cdc0, 0x2d4cc, 0x2d5b0, 0x2d790, 0x2daa0, 0x2dc10, 0x43f70, 0x44050, 0x441c0
*/
_QWORD *__fastcall sub_169F0(_QWORD *result, char *a2, char *a3, char a4, __int64 *a5, __int64 *a6)
{
_QWORD *v6; // x22
char *v12; // x0
char *v13; // x27
__int64 v14; // x0
__int64 v15; // x0
__int64 v16; // x0
__int64 v17; // x0
__int64 v18; // x0
__int64 v19; // x0
__int64 v20; // x0
__int64 v21; // x28
unsigned __int8 *v22; // x27
int v23; // w0
__int64 v24; // x28
__int64 v25; // x27
__int64 v26; // [xsp+8h] [xbp-68h] BYREF
char *save_ptr; // [xsp+10h] [xbp-60h] BYREF
__int64 v28; // [xsp+18h] [xbp-58h] BYREF
__int64 v29[3]; // [xsp+20h] [xbp-50h] BYREF
_QWORD v30[3]; // [xsp+38h] [xbp-38h] BYREF
_QWORD v31[4]; // [xsp+50h] [xbp-20h] BYREF
v31[3] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
if ( (unsigned __int64)a2 | (unsigned __int64)a3 && (a2 == nullptr) == (a3 == nullptr) )
{
v6 = result;
sub_CD24(a5, a2);
sub_2DAA0(v31, a2);
if ( (sub_2CD74(v31) & 1) == 0 )
{
v12 = strtok_r(a3, "#", &save_ptr);
if ( v12 )
{
v13 = v12;
do
{
v26 = 0;
if ( (a4 & 1) != 0 )
v14 = sub_2DC10((int)v31, (int)&v26, v13);
else
v14 = sub_2D5B0((int)v31, (int)&v26, v13);
if ( !v26 )
goto LABEL_20;
v15 = sub_2CAD8(v14);
v16 = (*(__int64 (__fastcall **)(__int64, _QWORD, __int64, _QWORD))(*(_QWORD *)v15 + 72LL))(
v15,
v31[0],
v26,
a4 & 1);
sub_2CDC0(v30, v16, 0);
v17 = sub_2CD74(v30);
if ( (v17 & 1) == 0 )
{
v18 = sub_2CAD8(v17);
if ( (*(unsigned __int8 (__fastcall **)(__int64, _QWORD, _QWORD))(*(_QWORD *)v18 + 256LL))(
v18,
v30[0],
v6[2]) )
{
v19 = sub_2CDC0(v29, v30[0], 0);
if ( !v6[3] )
{
v20 = sub_2CAD8(v19);
v21 = (*(__int64 (__fastcall **)(__int64, __int64))(*(_QWORD *)v20 + 56LL))(v20, v29[0]);
goto LABEL_17;
}
if ( !(unsigned int)sub_2D790(v29, &v28) )
{
v21 = v28;
LABEL_17:
sub_2D4CC(v29);
if ( v21 )
{
a5[4] = *(_QWORD *)(v6[5] + v21);
sub_CD24(a5 + 1, v13);
sub_C8D8(v29, a5);
sub_CF74(v29, ":");
sub_CE08(v29, (const void **)a5 + 1);
v22 = (unsigned __int8 *)v29[0];
v23 = sub_CA28(v29);
a5[2] = sub_F188(v22, v23, 0);
v24 = *a6;
v25 = operator new(0x90u);
sub_174D4(v25, a5);
*(_QWORD *)(v25 + 136) = v24;
*(_QWORD *)(v25 + 128) = *(_QWORD *)(v24 + 128);
*(_QWORD *)(*(_QWORD *)(v24 + 128) + 136LL) = v25;
*(_QWORD *)(v24 + 128) = v25;
sub_CA10(v29);
}
goto LABEL_19;
}
sub_2D4CC(v29);
}
}
LABEL_19:
sub_2D4CC(v30);
LABEL_20:
v13 = strtok_r(nullptr, "#", &save_ptr);
}
while ( v13 );
}
}
return (_QWORD *)sub_2D4CC(v31);
}
return result;
}
@@ -0,0 +1,84 @@
/*
* func-name: sub_16C74
* func-address: 0x16c74
* export-type: decompile
* callers: 0x15940
* callees: 0xccd0, 0x171dc
*/
__int64 __fastcall sub_16C74(__int64 result, __int64 *a2)
{
__int64 v2; // x8
__int64 v4; // x9
__int64 v5; // x22
__int64 v6; // x23
__int64 i; // x26
unsigned __int64 v8; // x9
int v9; // w9
__int64 v10; // x0
unsigned __int64 v11; // x1
unsigned __int64 v12; // x8
__int64 v13; // x8
unsigned __int64 v14; // x9
_QWORD *v15; // [xsp+8h] [xbp-8h]
v2 = *a2;
v15 = (_QWORD *)result;
v4 = *(_QWORD *)(*a2 + 136);
if ( v4 == *a2 )
{
v5 = 0;
}
else
{
v5 = 0;
do
{
v4 = *(_QWORD *)(v4 + 136);
++v5;
}
while ( v4 != v2 );
}
v6 = *(_QWORD *)(*(_QWORD *)result + 72LL);
if ( v6 != *(_QWORD *)result )
{
do
{
for ( i = *(_QWORD *)(v2 + 136); i != v2; i = *(_QWORD *)(i + 136) )
{
if ( !*(_BYTE *)(i + 24) )
{
v8 = *(_QWORD *)(i + 32);
if ( *(_QWORD *)v6 <= v8 && v8 < *(_QWORD *)(v6 + 8) )
{
v9 = *(_DWORD *)(v6 + 16);
v10 = *(_QWORD *)(i + 32);
*(_BYTE *)(i + 44) = *(_BYTE *)(v6 + 20);
v11 = *(_QWORD *)(i + 104);
*(_DWORD *)(i + 40) = v9;
v12 = *(_QWORD *)(v6 + 8) - v10;
if ( v12 < v11 )
{
v11 = *(_QWORD *)(v6 + 8) - v10;
*(_QWORD *)(i + 104) = v12;
}
sub_171DC(v10, v11, i + 88);
result = sub_CCD0((_QWORD *)(i + 80), (_QWORD *)(v6 + 48));
--v5;
*(_QWORD *)(i + 56) = *(_QWORD *)(v6 + 32);
v13 = *(unsigned __int16 *)(v6 + 40);
*(_BYTE *)(i + 24) = 1;
v14 = bswap64(v13 << 48);
v2 = *a2;
*(_QWORD *)(i + 48) = v14;
}
}
}
if ( !v5 )
break;
v6 = *(_QWORD *)(v6 + 72);
}
while ( v6 != *v15 );
}
return result;
}
@@ -0,0 +1,14 @@
/*
* func-name: sub_16E34
* func-address: 0x16e34
* export-type: decompile
* callers: 0x15940
* callees: 0x17430
*/
void __fastcall sub_16E34(void **a1)
{
sub_17430();
if ( *a1 )
operator delete[](*a1);
}
@@ -0,0 +1,20 @@
/*
* func-name: sub_16E68
* func-address: 0x16e68
* export-type: decompile
* callers: 0x15940
* callees: 0x172fc, 0x2cad8
*/
__int64 __fastcall sub_16E68(__int64 a1)
{
__int64 v2; // x0
if ( *(_QWORD *)(a1 + 16) )
{
v2 = sub_2CAD8(a1);
(*(void (__fastcall **)(__int64, _QWORD))(*(_QWORD *)v2 + 176LL))(v2, *(_QWORD *)(a1 + 16));
}
sub_172FC(a1 + 8);
return sub_172FC(a1);
}
@@ -0,0 +1,27 @@
/*
* func-name: sub_16EAC
* func-address: 0x16eac
* export-type: decompile
* callers: 0x15f7c
* callees: 0x2cad8, 0x2d790, 0x43f70
*/
__int64 __fastcall sub_16EAC(__int64 a1, _QWORD *a2)
{
__int64 v4; // x0
_QWORD v5[2]; // [xsp+0h] [xbp-10h] BYREF
v5[1] = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
if ( *(_QWORD *)(a1 + 24) )
{
if ( (unsigned int)sub_2D790(a2, v5) )
return 0;
else
return v5[0];
}
else
{
v4 = sub_2CAD8(a1);
return (*(__int64 (__fastcall **)(__int64, _QWORD))(*(_QWORD *)v4 + 56LL))(v4, *a2);
}
}
@@ -0,0 +1,60 @@
/*
* func-name: sub_16F34
* func-address: 0x16f34
* export-type: decompile
* callers: 0x15f7c
* callees: 0x2cad8, 0x2cd0c, 0x2cd74, 0x2cdc0, 0x2d4cc, 0x2d724, 0x2d7fc, 0x2d9cc, 0x43f70
*/
__int64 __fastcall sub_16F34(__int64 a1, __int64 a2, __int64 a3)
{
__int64 v4; // x20
__int64 v5; // x0
unsigned int v6; // w20
__int64 v7; // x0
__int64 v8; // x0
unsigned int v10; // [xsp+Ch] [xbp-44h] BYREF
__int64 v11; // [xsp+10h] [xbp-40h] BYREF
_BYTE v12[24]; // [xsp+18h] [xbp-38h] BYREF
_BYTE v13[24]; // [xsp+30h] [xbp-20h] BYREF
__int64 v14; // [xsp+48h] [xbp-8h]
v14 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
v4 = *(_QWORD *)(a1 + 8);
v5 = sub_2D9CC(*(_QWORD *)a1, &v11, a2, a3);
if ( (_DWORD)v5 )
{
return 0;
}
else
{
v7 = sub_2CAD8(v5);
v8 = (*(__int64 (__fastcall **)(__int64, _QWORD, __int64, _QWORD))(*(_QWORD *)v7 + 96LL))(
v7,
*(_QWORD *)(v4 + 16),
v11,
0);
sub_2CDC0(v13, v8, 1);
v6 = 0;
if ( (sub_2CD74(v13) & 1) == 0 )
{
sub_2CD0C(v12);
sub_2D7FC(v13, v12, **(_QWORD **)(a1 + 16));
if ( (sub_2CD74(v12) & 1) != 0 )
{
v6 = 0;
}
else if ( (unsigned int)sub_2D724(v12, &v10, **(_QWORD **)(a1 + 24)) )
{
v6 = 0;
}
else
{
v6 = v10;
}
sub_2D4CC(v12);
}
sub_2D4CC(v13);
}
return v6;
}
@@ -0,0 +1,39 @@
/*
* func-name: sub_17040
* func-address: 0x17040
* export-type: decompile
* callers: 0x15f7c
* callees: 0xc8d8, 0x44050
*/
__int64 __fastcall sub_17040(__int64 *a1, __int64 a2)
{
__int64 v2; // x21
__int64 v4; // x0
__int128 v5; // q1
__int64 v6; // x20
__int128 v7; // q2
__int64 result; // x0
__int64 v9; // x8
char v10; // w9
__int64 v11; // x8
v2 = *a1;
v4 = operator new(0x50u);
v5 = *(_OWORD *)(a2 + 16);
v6 = v4;
v7 = *(_OWORD *)(a2 + 26);
*(_OWORD *)v4 = *(_OWORD *)a2;
*(_OWORD *)(v4 + 16) = v5;
*(_OWORD *)(v4 + 26) = v7;
result = sub_C8D8((_QWORD *)(v4 + 48), (_QWORD *)(a2 + 48));
v9 = *(_QWORD *)(v2 + 64);
*(_QWORD *)(v6 + 72) = v2;
v10 = *(_BYTE *)(a2 + 56);
*(_QWORD *)(v6 + 64) = v9;
v11 = *(_QWORD *)(v2 + 64);
*(_BYTE *)(v6 + 56) = v10;
*(_QWORD *)(v2 + 64) = v6;
*(_QWORD *)(v11 + 72) = v6;
return result;
}
@@ -0,0 +1,79 @@
/*
* func-name: sub_170B0
* func-address: 0x170b0
* export-type: decompile
* callers: 0x16628
* callees: 0xcd24, 0x27358, 0x44120, 0x442c0
*/
const char *__fastcall sub_170B0(__int64 *a1, __int64 a2, __int64 a3)
{
const char *result; // x0
__int64 v5; // x23
unsigned int v6; // w24
const char *v7; // x1
_QWORD *v8; // x21
__int64 *v9; // x20
_QWORD *v10; // x22
__int64 v11; // x8
__int64 v12; // x9
unsigned __int64 *v13; // x10
unsigned __int64 v14; // x23
char *v15; // x1
__int64 v16; // x19
if ( !*a1 )
return nullptr;
result = (const char *)a1[1];
if ( !result )
return result;
if ( *result != 47 )
return nullptr;
v5 = a1[2];
if ( !v5 )
return nullptr;
v6 = *((unsigned __int16 *)a1 + 12);
if ( !*((_WORD *)a1 + 12) )
return nullptr;
v7 = *(const char **)a3;
v8 = *(_QWORD **)(a3 + 8);
v10 = *(_QWORD **)(a3 + 16);
v9 = *(__int64 **)(a3 + 24);
if ( **(_BYTE **)a3 == 47 )
{
if ( strcmp(result, v7) )
return nullptr;
}
else
{
if ( (sub_27358(result, v7) & 1) == 0 )
return nullptr;
v6 = *((unsigned __int16 *)a1 + 12);
if ( !*((_WORD *)a1 + 12) )
return nullptr;
v5 = a1[2];
}
v11 = 0;
v12 = v6;
v13 = (unsigned __int64 *)(v5 + 16);
v14 = -1;
do
{
if ( *((_DWORD *)v13 - 4) == 1 && v14 > *v13 )
v14 = *v13;
++v11;
--v12;
v13 += 7;
}
while ( v12 );
if ( v14 != -1 )
{
v15 = (char *)a1[1];
*v10 = *a1;
sub_CD24(v9, v15);
v16 = *a1;
*v8 = (v14 & ~(-getpagesize() ^ v14)) + v16;
return (_BYTE *)(&dword_0 + 1);
}
return nullptr;
}
@@ -0,0 +1,57 @@
/*
* func-name: sub_171DC
* func-address: 0x171dc
* export-type: decompile
* callers: 0x16628, 0x16c74
* callees: 0xcc84, 0xd068, 0xd0a8, 0x1738c, 0x43f70, 0x44040, 0x44340, 0x44350, 0x44360
*/
__int64 __fastcall sub_171DC(const void *a1, size_t a2, __int64 *a3)
{
__int64 result; // x0
__int64 v7; // x21
__int64 v8; // x0
__int64 v9; // x22
int v10; // w24
__int64 v11; // x25
__int16 buf; // [xsp+Ch] [xbp-14h] BYREF
int pipedes[2]; // [xsp+10h] [xbp-10h] BYREF
__int64 v14; // [xsp+18h] [xbp-8h]
v14 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
result = pipe2(pipedes, 2048);
if ( (_DWORD)result != -1 )
{
if ( write(pipedes[1], a1, a2) == a2 )
{
v7 = 2 * a2;
buf = 0;
v8 = sub_D068(a3);
if ( a2 )
{
v9 = v8;
v10 = 0;
v11 = 0;
while ( read(pipedes[0], &buf, 1u) == 1 )
{
sub_1738C(v9 + v10, -1);
++v11;
--a2;
v10 += 2;
if ( !a2 )
goto LABEL_7;
}
((void (__fastcall *)(__int64 *, __int64))loc_D0D4)(a3, v7);
sub_CC84(a3);
}
else
{
LABEL_7:
((void (__fastcall *)(__int64 *, __int64))loc_D0D4)(a3, v7);
}
}
close(pipedes[0]);
return close(pipedes[1]);
}
return result;
}
@@ -0,0 +1,14 @@
/*
* func-name: sub_172FC
* func-address: 0x172fc
* export-type: decompile
* callers: 0x16e68
* callees: 0x17330
*/
void __fastcall sub_172FC(void **a1)
{
sub_17330();
if ( *a1 )
operator delete[](*a1);
}
@@ -0,0 +1,29 @@
/*
* func-name: sub_17330
* func-address: 0x17330
* export-type: decompile
* callers: 0x172fc
* callees: 0xca10, 0x441a0
*/
void __fastcall sub_17330(__int64 a1)
{
_QWORD *v1; // x21
_QWORD *v2; // x20
v1 = *(_QWORD **)a1;
v2 = *(_QWORD **)(*(_QWORD *)a1 + 72LL);
if ( v2 != *(_QWORD **)a1 )
{
do
{
v1 = (_QWORD *)v2[9];
sub_CA10(v2 + 6);
operator delete(v2);
v2 = v1;
}
while ( v1 != *(_QWORD **)a1 );
}
v1[8] = v1;
v1[9] = v1;
}
@@ -0,0 +1,19 @@
/*
* func-name: sub_1738C
* func-address: 0x1738c
* export-type: decompile
* callers: 0x171dc
* callees: 0x43f70, 0x44140
*/
__int64 sub_1738C(__int64 a1, __int64 a2, __int64 a3, ...)
{
gcc_va_list va1; // [xsp+B0h] [xbp-50h] BYREF
gcc_va_list va; // [xsp+D8h] [xbp-28h] BYREF
__int64 v6; // [xsp+F8h] [xbp-8h]
va_start(va, a3);
v6 = *(_QWORD *)(_ReadStatusReg(TPIDR_EL0) + 40);
va_copy(va1, va);
return __vsprintf_chk(a1, 0, a2, "%02X", (unsigned int)va1);
}
@@ -0,0 +1,29 @@
/*
* func-name: sub_17430
* func-address: 0x17430
* export-type: decompile
* callers: 0x16e34
* callees: 0x1748c, 0x441a0
*/
void __fastcall sub_17430(__int64 a1)
{
_QWORD *v1; // x21
_QWORD *v2; // x20
v1 = *(_QWORD **)a1;
v2 = *(_QWORD **)(*(_QWORD *)a1 + 136LL);
if ( v2 != *(_QWORD **)a1 )
{
do
{
v1 = (_QWORD *)v2[17];
sub_1748C(v2);
operator delete(v2);
v2 = v1;
}
while ( v1 != *(_QWORD **)a1 );
}
v1[16] = v1;
v1[17] = v1;
}
@@ -0,0 +1,17 @@
/*
* func-name: sub_1748C
* func-address: 0x1748c
* export-type: decompile
* callers: 0x17430
* callees: 0xca10
*/
__int64 __fastcall sub_1748C(_QWORD *a1)
{
sub_CA10(a1 + 14);
sub_CA10(a1 + 12);
sub_CA10(a1 + 11);
sub_CA10(a1 + 10);
sub_CA10(a1 + 1);
return sub_CA10(a1);
}
@@ -0,0 +1,35 @@
/*
* func-name: sub_174D4
* func-address: 0x174d4
* export-type: decompile
* callers: 0x16628, 0x169f0
* callees: 0xc8d8
*/
__int64 __fastcall sub_174D4(__int64 a1, __int64 a2)
{
__int128 v4; // q1
__int128 v5; // q2
__int128 v6; // q3
__int64 result; // x0
int v8; // w9
sub_C8D8((_QWORD *)a1, (_QWORD *)a2);
sub_C8D8((_QWORD *)(a1 + 8), (_QWORD *)(a2 + 8));
v4 = *(_OWORD *)(a2 + 64);
v5 = *(_OWORD *)(a2 + 16);
v6 = *(_OWORD *)(a2 + 32);
*(_OWORD *)(a1 + 48) = *(_OWORD *)(a2 + 48);
*(_OWORD *)(a1 + 64) = v4;
*(_OWORD *)(a1 + 16) = v5;
*(_OWORD *)(a1 + 32) = v6;
sub_C8D8((_QWORD *)(a1 + 80), (_QWORD *)(a2 + 80));
sub_C8D8((_QWORD *)(a1 + 88), (_QWORD *)(a2 + 88));
sub_C8D8((_QWORD *)(a1 + 96), (_QWORD *)(a2 + 96));
*(_QWORD *)(a1 + 104) = *(_QWORD *)(a2 + 104);
result = sub_C8D8((_QWORD *)(a1 + 112), (_QWORD *)(a2 + 112));
v8 = *(_DWORD *)(a2 + 120);
*(_BYTE *)(a1 + 124) = *(_BYTE *)(a2 + 124);
*(_DWORD *)(a1 + 120) = v8;
return result;
}
@@ -0,0 +1,12 @@
/*
* func-name: sub_1755C
* func-address: 0x1755c
* export-type: decompile
* callers: 0x175e0
* callees: none
*/
__int64 __fastcall sub_1755C(__int64 a1, __int64 a2)
{
return sub_1C050(a2, *(_QWORD *)(a1 + 24), 0);
}
@@ -0,0 +1,12 @@
/*
* func-name: sub_17570
* func-address: 0x17570
* export-type: decompile
* callers: 0x175e0
* callees: none
*/
__int64 __fastcall sub_17570(__int64 a1, __int64 a2)
{
return sub_1B6B8(a2, *(_QWORD *)(a1 + 24), 0, 1);
}
@@ -0,0 +1,22 @@
/*
* func-name: sub_17588
* func-address: 0x17588
* export-type: decompile
* callers: 0x175e0, 0x1dcd4, 0x1ea24
* callees: 0x1a508, 0x43fe0
*/
void __fastcall sub_17588(void ***a1)
{
void **v2; // x0
v2 = *a1;
if ( v2[3] )
{
sub_1A508(v2 + 3);
v2 = *a1;
}
if ( !*v2 || (free(*v2), (v2 = *a1) != nullptr) )
free(v2);
*a1 = nullptr;
}
@@ -0,0 +1,35 @@
/*
* func-name: sub_175E0
* func-address: 0x175e0
* export-type: decompile
* callers: 0x17694
* callees: 0x17588, 0x1a7a8, 0x43f70, 0x44370
*/
__int64 __fastcall sub_175E0(__int64 a1)
{
__int64 v2; // x0
_WORD *v3; // x9
int *v4; // x8
void **v6[2]; // [xsp+0h] [xbp-10h] BYREF
v6[1] = *(void ***)(_ReadStatusReg(TPIDR_EL0) + 40);
v6[0] = (void **)a1;
*(_QWORD *)a1 = calloc(1u, 2u);
*(_QWORD *)(a1 + 8) = sub_1755C;
*(_QWORD *)(a1 + 16) = sub_17570;
v2 = sub_1A7A8("string", "string");
v3 = *(_WORD **)a1;
*(_QWORD *)(a1 + 24) = v2;
if ( v3 && v2 )
{
v4 = &dword_574C;
*v3 = 116;
}
else
{
sub_17588(v6);
v4 = &dword_5754;
}
return (unsigned int)*v4;
}
@@ -0,0 +1,24 @@
/*
* func-name: sub_17694
* func-address: 0x17694
* export-type: decompile
* callers: 0x1dcd4, 0x1ea24
* callees: 0x175e0, 0x44370
*/
void *sub_17694()
{
void *result; // x0
void *v1; // x19
result = calloc(1u, 0x20u);
if ( result )
{
v1 = result;
if ( (unsigned int)sub_175E0((__int64)result) )
return nullptr;
else
return v1;
}
return result;
}
@@ -0,0 +1,57 @@
/*
* func-name: sub_176D8
* func-address: 0x176d8
* export-type: decompile
* callers: 0x17ac4
* callees: 0x1a0bc, 0x1a0dc, 0x1a76c, 0x1be18, 0x1bf5c, 0x1c050, 0x1c27c, 0x44380
*/
__int64 __fastcall sub_176D8(_QWORD *a1, __int64 a2)
{
unsigned int v4; // w22
__int64 result; // x0
const char *v6; // x23
unsigned int v7; // w0
const char *v8; // x22
unsigned int v9; // w0
v4 = sub_1BE18(a2, a1[3], 0);
if ( v4 )
return v4;
result = sub_1C27C(a2, a1[4], 1);
if ( !(_DWORD)result )
{
result = sub_1C050(a2, a1[5], 2);
if ( !(_DWORD)result )
{
result = sub_1C27C(a2, a1[6], 3);
if ( !(_DWORD)result )
{
if ( !(unsigned int)sub_1A0BC(a1[7])
&& (v6 = (const char *)sub_1A0DC(a1[7]), v7 = sub_1A0BC(a1[7]), !strncmp(v6, (const char *)&unk_534B, v7))
|| (result = sub_1BF5C(a2, a1[7], 4), !(_DWORD)result) )
{
if ( (unsigned int)sub_1A76C(a1[8]) )
v4 = sub_1C050(a2, a1[8], 5);
if ( (unsigned int)sub_1A76C(a1[9]) )
v4 = sub_1C050(a2, a1[9], 6);
result = v4;
if ( !v4 )
{
if ( !(unsigned int)sub_1A0BC(a1[10]) )
{
v8 = (const char *)sub_1A0DC(a1[10]);
v9 = sub_1A0BC(a1[10]);
if ( !strncmp(v8, (const char *)&unk_534B, v9) )
return sub_1C27C(a2, a1[11], 8);
}
result = sub_1BF5C(a2, a1[10], 7);
if ( !(_DWORD)result )
return sub_1C27C(a2, a1[11], 8);
}
}
}
}
}
return result;
}
@@ -0,0 +1,45 @@
/*
* func-name: sub_1788C
* func-address: 0x1788c
* export-type: decompile
* callers: 0x17ac4
* callees: 0x1b2dc, 0x1b4f4, 0x1b6b8, 0x1b9c8
*/
__int64 __fastcall sub_1788C(_QWORD *a1, __int64 a2)
{
__int64 result; // x0
result = sub_1B2DC(a2, a1 + 3, 0, 1);
if ( !(_DWORD)result )
{
result = sub_1B9C8(a2, a1[4], 1, 1);
if ( !(_DWORD)result )
{
result = sub_1B6B8(a2, a1[5], 2, 1);
if ( !(_DWORD)result )
{
result = sub_1B9C8(a2, a1[6], 3, 1);
if ( !(_DWORD)result )
{
result = sub_1B4F4(a2, a1[7], 4, 0);
if ( !(_DWORD)result )
{
result = sub_1B6B8(a2, a1[8], 5, 0);
if ( !(_DWORD)result )
{
result = sub_1B6B8(a2, a1[9], 6, 0);
if ( !(_DWORD)result )
{
result = sub_1B4F4(a2, a1[10], 7, 0);
if ( !(_DWORD)result )
return sub_1B9C8(a2, a1[11], 8, 0);
}
}
}
}
}
}
}
return result;
}
@@ -0,0 +1,57 @@
/*
* func-name: sub_179C4
* func-address: 0x179c4
* export-type: decompile
* callers: 0x17ac4, 0x211e8, 0x43560
* callees: 0x17f70, 0x183dc, 0x18674, 0x19de0, 0x1a508, 0x43fe0
*/
void __fastcall sub_179C4(void ***a1)
{
void **v2; // x0
v2 = *a1;
if ( v2[4] )
{
sub_183DC(v2 + 4);
v2 = *a1;
}
if ( v2[5] )
{
sub_1A508(v2 + 5);
v2 = *a1;
}
if ( v2[6] )
{
sub_18674(v2 + 6);
v2 = *a1;
}
if ( v2[7] )
{
sub_19DE0(v2 + 7);
v2 = *a1;
}
if ( v2[8] )
{
sub_1A508(v2 + 8);
v2 = *a1;
}
if ( v2[9] )
{
sub_1A508(v2 + 9);
v2 = *a1;
}
if ( v2[10] )
{
sub_19DE0(v2 + 10);
v2 = *a1;
}
if ( v2[11] )
{
sub_17F70(v2 + 11);
v2 = *a1;
}
if ( !*v2 || (free(*v2), (v2 = *a1) != nullptr) )
free(v2);
*a1 = nullptr;
}
@@ -0,0 +1,65 @@
/*
* func-name: sub_17AC4
* func-address: 0x17ac4
* export-type: decompile
* callers: 0x17c20
* callees: 0x179c4, 0x1821c, 0x18570, 0x187cc, 0x19f0c, 0x1a0e8, 0x1a7a8, 0x43f70, 0x44370
*/
__int64 __fastcall sub_17AC4(__int64 a1)
{
void *v2; // x0
__int64 v3; // x1
__int64 v4; // x0
__int64 v5; // x1
__int64 v6; // x0
__int64 v7; // x0
__int64 v8; // x0
__int64 v9; // x1
__int64 v10; // x0
_WORD *v11; // x8
int *v12; // x8
void **v14[2]; // [xsp+0h] [xbp-10h] BYREF
v14[1] = *(void ***)(_ReadStatusReg(TPIDR_EL0) + 40);
v14[0] = (void **)a1;
v2 = calloc(1u, 2u);
*(_QWORD *)(a1 + 16) = sub_1788C;
*(_QWORD *)(a1 + 24) = 0;
*(_QWORD *)a1 = v2;
*(_QWORD *)(a1 + 8) = sub_176D8;
*(_QWORD *)(a1 + 32) = sub_18570(v2, v3);
v4 = sub_1A7A8("int32", "string");
*(_QWORD *)(a1 + 40) = v4;
v6 = sub_187CC(v4, v5);
*(_QWORD *)(a1 + 48) = v6;
*(_QWORD *)(a1 + 56) = sub_1A0E8(v6);
*(_QWORD *)(a1 + 64) = sub_1A7A8("int32", "string");
v7 = sub_1A7A8("int32", "string");
*(_QWORD *)(a1 + 72) = v7;
v8 = sub_1A0E8(v7);
*(_QWORD *)(a1 + 80) = v8;
v10 = sub_1821C(v8, v9);
v11 = *(_WORD **)a1;
*(_QWORD *)(a1 + 88) = v10;
if ( v11
&& *(_QWORD *)(a1 + 32)
&& *(_QWORD *)(a1 + 40)
&& *(_QWORD *)(a1 + 48)
&& *(_QWORD *)(a1 + 56)
&& *(_QWORD *)(a1 + 64)
&& *(_QWORD *)(a1 + 72)
&& *(_QWORD *)(a1 + 80)
&& v10 )
{
*v11 = 114;
sub_19F0C(*(_QWORD *)(a1 + 56), &unk_534B, 0);
v12 = &dword_574C;
}
else
{
sub_179C4(v14);
v12 = &dword_5754;
}
return (unsigned int)*v12;
}
@@ -0,0 +1,24 @@
/*
* func-name: sub_17C20
* func-address: 0x17c20
* export-type: decompile
* callers: 0x211e8, 0x43618
* callees: 0x17ac4, 0x44370
*/
void *sub_17C20()
{
void *result; // x0
void *v1; // x19
result = calloc(1u, 0x60u);
if ( result )
{
v1 = result;
if ( (unsigned int)sub_17AC4((__int64)result) )
return nullptr;
else
return v1;
}
return result;
}
@@ -0,0 +1,66 @@
/*
* func-name: sub_17C64
* func-address: 0x17c64
* export-type: decompile
* callers: 0x18070
* callees: 0x1a0bc, 0x1a0dc, 0x1a76c, 0x1bd78, 0x1bf5c, 0x44380
*/
__int64 __fastcall sub_17C64(__int64 a1, __int64 a2)
{
unsigned int v4; // w21
const char *v5; // x22
unsigned int v6; // w0
__int64 result; // x0
const char *v8; // x22
unsigned int v9; // w0
const char *v10; // x22
unsigned int v11; // w0
int v12; // w8
v4 = sub_1BF5C(a2, *(_QWORD *)(a1 + 24), 0);
if ( v4 )
return v4;
if ( !(unsigned int)sub_1A0BC(*(_QWORD *)(a1 + 32))
&& (v5 = (const char *)sub_1A0DC(*(_QWORD *)(a1 + 32)),
v6 = sub_1A0BC(*(_QWORD *)(a1 + 32)),
!strncmp(v5, (const char *)&unk_534B, v6))
|| (result = sub_1BF5C(a2, *(_QWORD *)(a1 + 32), 1), !(_DWORD)result) )
{
result = sub_1BF5C(a2, *(_QWORD *)(a1 + 40), 2);
if ( !(_DWORD)result )
{
result = sub_1BD78(a2, *(unsigned int *)(a1 + 48), 3);
if ( !(_DWORD)result )
{
result = sub_1BF5C(a2, *(_QWORD *)(a1 + 56), 4);
if ( !(_DWORD)result )
{
result = sub_1BF5C(a2, *(_QWORD *)(a1 + 64), 5);
if ( !(_DWORD)result )
{
if ( !(unsigned int)sub_1A0BC(*(_QWORD *)(a1 + 72))
&& (v8 = (const char *)sub_1A0DC(*(_QWORD *)(a1 + 72)),
v9 = sub_1A0BC(*(_QWORD *)(a1 + 72)),
!strncmp(v8, (const char *)&unk_534B, v9))
|| (result = sub_1BF5C(a2, *(_QWORD *)(a1 + 72), 6), !(_DWORD)result) )
{
if ( !(unsigned int)sub_1A0BC(*(_QWORD *)(a1 + 80))
&& (v10 = (const char *)sub_1A0DC(*(_QWORD *)(a1 + 80)),
v11 = sub_1A0BC(*(_QWORD *)(a1 + 80)),
!strncmp(v10, (const char *)&unk_534B, v11))
|| (result = sub_1BF5C(a2, *(_QWORD *)(a1 + 80), 7), !(_DWORD)result) )
{
v12 = sub_1A76C(*(_QWORD *)(a1 + 88));
result = 0;
if ( v12 )
return sub_1C050(a2, *(_QWORD *)(a1 + 88), 8);
}
}
}
}
}
}
}
return result;
}
@@ -0,0 +1,45 @@
/*
* func-name: sub_17E38
* func-address: 0x17e38
* export-type: decompile
* callers: 0x18070
* callees: 0x1af14, 0x1b4f4
*/
__int64 __fastcall sub_17E38(_QWORD *a1, __int64 a2)
{
__int64 result; // x0
result = sub_1B4F4(a2, a1[3], 0, 1);
if ( !(_DWORD)result )
{
result = sub_1B4F4(a2, a1[4], 1, 0);
if ( !(_DWORD)result )
{
result = sub_1B4F4(a2, a1[5], 2, 1);
if ( !(_DWORD)result )
{
result = sub_1AF14(a2, a1 + 6, 3, 1);
if ( !(_DWORD)result )
{
result = sub_1B4F4(a2, a1[7], 4, 1);
if ( !(_DWORD)result )
{
result = sub_1B4F4(a2, a1[8], 5, 1);
if ( !(_DWORD)result )
{
result = sub_1B4F4(a2, a1[9], 6, 0);
if ( !(_DWORD)result )
{
result = sub_1B4F4(a2, a1[10], 7, 0);
if ( !(_DWORD)result )
return sub_1B6B8(a2, a1[11], 8, 0);
}
}
}
}
}
}
}
return result;
}
@@ -0,0 +1,57 @@
/*
* func-name: sub_17F70
* func-address: 0x17f70
* export-type: decompile
* callers: 0x179c4, 0x18070, 0x18acc, 0x19028
* callees: 0x19de0, 0x1a508, 0x43fe0
*/
void __fastcall sub_17F70(void ***a1)
{
void **v2; // x0
v2 = *a1;
if ( v2[3] )
{
sub_19DE0(v2 + 3);
v2 = *a1;
}
if ( v2[4] )
{
sub_19DE0(v2 + 4);
v2 = *a1;
}
if ( v2[5] )
{
sub_19DE0(v2 + 5);
v2 = *a1;
}
if ( v2[7] )
{
sub_19DE0(v2 + 7);
v2 = *a1;
}
if ( v2[8] )
{
sub_19DE0(v2 + 8);
v2 = *a1;
}
if ( v2[9] )
{
sub_19DE0(v2 + 9);
v2 = *a1;
}
if ( v2[10] )
{
sub_19DE0(v2 + 10);
v2 = *a1;
}
if ( v2[11] )
{
sub_1A508(v2 + 11);
v2 = *a1;
}
if ( !*v2 || (free(*v2), (v2 = *a1) != nullptr) )
free(v2);
*a1 = nullptr;
}
@@ -0,0 +1,72 @@
/*
* func-name: sub_18070
* func-address: 0x18070
* export-type: decompile
* callers: 0x1821c
* callees: 0x17f70, 0x19f0c, 0x1a0e8, 0x1a7a8, 0x43f70, 0x44370
*/
__int64 __fastcall sub_18070(__int64 a1)
{
void *v2; // x0
__int64 v3; // x0
__int64 v4; // x0
__int64 v5; // x0
__int64 v6; // x0
__int64 v7; // x0
__int64 v8; // x0
__int64 v9; // x0
_WORD *v10; // x8
int *v11; // x8
void **v13[2]; // [xsp+0h] [xbp-10h] BYREF
v13[1] = *(void ***)(_ReadStatusReg(TPIDR_EL0) + 40);
v13[0] = (void **)a1;
v2 = calloc(1u, 2u);
*(_QWORD *)a1 = v2;
*(_QWORD *)(a1 + 8) = sub_17C64;
*(_QWORD *)(a1 + 16) = sub_17E38;
v3 = sub_1A0E8(v2);
*(_QWORD *)(a1 + 24) = v3;
v4 = sub_1A0E8(v3);
*(_QWORD *)(a1 + 32) = v4;
v5 = sub_1A0E8(v4);
*(_DWORD *)(a1 + 48) = 0;
*(_QWORD *)(a1 + 40) = v5;
v6 = sub_1A0E8(v5);
*(_QWORD *)(a1 + 56) = v6;
v7 = sub_1A0E8(v6);
*(_QWORD *)(a1 + 64) = v7;
v8 = sub_1A0E8(v7);
*(_QWORD *)(a1 + 72) = v8;
*(_QWORD *)(a1 + 80) = sub_1A0E8(v8);
v9 = sub_1A7A8("int32", "string");
v10 = *(_WORD **)a1;
*(_QWORD *)(a1 + 88) = v9;
if ( v10
&& *(_QWORD *)(a1 + 24)
&& *(_QWORD *)(a1 + 32)
&& *(_QWORD *)(a1 + 40)
&& *(_QWORD *)(a1 + 56)
&& *(_QWORD *)(a1 + 64)
&& *(_QWORD *)(a1 + 72)
&& *(_QWORD *)(a1 + 80)
&& v9 )
{
*v10 = 97;
sub_19F0C(*(_QWORD *)(a1 + 24), &unk_534B, 0);
sub_19F0C(*(_QWORD *)(a1 + 32), &unk_534B, 0);
sub_19F0C(*(_QWORD *)(a1 + 40), &unk_534B, 0);
sub_19F0C(*(_QWORD *)(a1 + 56), &unk_534B, 0);
sub_19F0C(*(_QWORD *)(a1 + 64), &unk_534B, 0);
sub_19F0C(*(_QWORD *)(a1 + 72), &unk_534B, 0);
sub_19F0C(*(_QWORD *)(a1 + 80), &unk_534B, 0);
v11 = &dword_574C;
}
else
{
sub_17F70(v13);
v11 = &dword_5754;
}
return (unsigned int)*v11;
}
@@ -0,0 +1,24 @@
/*
* func-name: sub_1821C
* func-address: 0x1821c
* export-type: decompile
* callers: 0x17ac4, 0x18bcc, 0x190c8
* callees: 0x18070, 0x44370
*/
void *sub_1821C()
{
void *result; // x0
void *v1; // x19
result = calloc(1u, 0x60u);
if ( result )
{
v1 = result;
if ( (unsigned int)sub_18070((__int64)result) )
return nullptr;
else
return v1;
}
return result;
}
@@ -0,0 +1,29 @@
/*
* func-name: sub_18260
* func-address: 0x18260
* export-type: decompile
* callers: 0x18464
* callees: 0x1bd78, 0x1bf5c
*/
__int64 __fastcall sub_18260(__int64 a1, __int64 a2)
{
__int64 result; // x0
result = sub_1BD78(a2, *(unsigned int *)(a1 + 24), 0);
if ( !(_DWORD)result )
{
result = sub_1BF5C(a2, *(_QWORD *)(a1 + 32), 1);
if ( !(_DWORD)result )
{
result = sub_1BF5C(a2, *(_QWORD *)(a1 + 40), 2);
if ( !(_DWORD)result )
{
result = sub_1BF5C(a2, *(_QWORD *)(a1 + 48), 3);
if ( !(_DWORD)result )
return sub_1BD78(a2, *(unsigned int *)(a1 + 56), 4);
}
}
}
return result;
}
@@ -0,0 +1,29 @@
/*
* func-name: sub_18314
* func-address: 0x18314
* export-type: decompile
* callers: 0x18464
* callees: 0x1af14, 0x1b4f4
*/
__int64 __fastcall sub_18314(_QWORD *a1, __int64 a2)
{
__int64 result; // x0
result = sub_1AF14(a2, a1 + 3, 0, 1);
if ( !(_DWORD)result )
{
result = sub_1B4F4(a2, a1[4], 1, 1);
if ( !(_DWORD)result )
{
result = sub_1B4F4(a2, a1[5], 2, 1);
if ( !(_DWORD)result )
{
result = sub_1B4F4(a2, a1[6], 3, 1);
if ( !(_DWORD)result )
return sub_1AF14(a2, a1 + 7, 4, 1);
}
}
}
return result;
}
@@ -0,0 +1,32 @@
/*
* func-name: sub_183DC
* func-address: 0x183dc
* export-type: decompile
* callers: 0x179c4, 0x18464, 0x18acc
* callees: 0x19de0, 0x43fe0
*/
void __fastcall sub_183DC(void ***a1)
{
void **v2; // x0
v2 = *a1;
if ( v2[4] )
{
sub_19DE0(v2 + 4);
v2 = *a1;
}
if ( v2[5] )
{
sub_19DE0(v2 + 5);
v2 = *a1;
}
if ( v2[6] )
{
sub_19DE0(v2 + 6);
v2 = *a1;
}
if ( !*v2 || (free(*v2), (v2 = *a1) != nullptr) )
free(v2);
*a1 = nullptr;
}
@@ -0,0 +1,47 @@
/*
* func-name: sub_18464
* func-address: 0x18464
* export-type: decompile
* callers: 0x18570
* callees: 0x183dc, 0x19f0c, 0x1a0e8, 0x43f70, 0x44370
*/
__int64 __fastcall sub_18464(__int64 a1)
{
void *v2; // x0
__int64 v3; // x0
__int64 v4; // x0
__int64 v5; // x0
_WORD *v6; // x8
int *v7; // x8
void **v9[2]; // [xsp+0h] [xbp-10h] BYREF
v9[1] = *(void ***)(_ReadStatusReg(TPIDR_EL0) + 40);
v9[0] = (void **)a1;
v2 = calloc(1u, 2u);
*(_DWORD *)(a1 + 24) = 0;
*(_QWORD *)a1 = v2;
*(_QWORD *)(a1 + 8) = sub_18260;
*(_QWORD *)(a1 + 16) = sub_18314;
v3 = sub_1A0E8(v2);
*(_QWORD *)(a1 + 32) = v3;
v4 = sub_1A0E8(v3);
*(_QWORD *)(a1 + 40) = v4;
v5 = sub_1A0E8(v4);
v6 = *(_WORD **)a1;
*(_QWORD *)(a1 + 48) = v5;
if ( v6 && *(_QWORD *)(a1 + 32) && *(_QWORD *)(a1 + 40) && v5 )
{
*v6 = 98;
sub_19F0C(*(_QWORD *)(a1 + 32), &unk_534B, 0);
sub_19F0C(*(_QWORD *)(a1 + 40), &unk_534B, 0);
sub_19F0C(*(_QWORD *)(a1 + 48), &unk_534B, 0);
v7 = &dword_574C;
}
else
{
sub_183DC(v9);
v7 = &dword_5754;
}
return (unsigned int)*v7;
}
@@ -0,0 +1,24 @@
/*
* func-name: sub_18570
* func-address: 0x18570
* export-type: decompile
* callers: 0x17ac4, 0x18bcc
* callees: 0x18464, 0x44370
*/
void *sub_18570()
{
void *result; // x0
void *v1; // x19
result = calloc(1u, 0x40u);
if ( result )
{
v1 = result;
if ( (unsigned int)sub_18464((__int64)result) )
return nullptr;
else
return v1;
}
return result;
}
@@ -0,0 +1,17 @@
/*
* func-name: sub_185B4
* func-address: 0x185b4
* export-type: decompile
* callers: 0x186e4
* callees: 0x1bf5c
*/
__int64 __fastcall sub_185B4(__int64 a1, __int64 a2)
{
__int64 result; // x0
result = sub_1BF5C(a2, *(_QWORD *)(a1 + 24), 0);
if ( !(_DWORD)result )
return sub_1BF5C(a2, *(_QWORD *)(a1 + 32), 1);
return result;
}
@@ -0,0 +1,17 @@
/*
* func-name: sub_18610
* func-address: 0x18610
* export-type: decompile
* callers: 0x186e4
* callees: 0x1b4f4
*/
__int64 __fastcall sub_18610(__int64 a1, __int64 a2)
{
__int64 result; // x0
result = sub_1B4F4(a2, *(_QWORD *)(a1 + 24), 0, 1);
if ( !(_DWORD)result )
return sub_1B4F4(a2, *(_QWORD *)(a1 + 32), 1, 1);
return result;
}
@@ -0,0 +1,27 @@
/*
* func-name: sub_18674
* func-address: 0x18674
* export-type: decompile
* callers: 0x179c4, 0x186e4, 0x18acc
* callees: 0x19de0, 0x43fe0
*/
void __fastcall sub_18674(void ***a1)
{
void **v2; // x0
v2 = *a1;
if ( v2[3] )
{
sub_19DE0(v2 + 3);
v2 = *a1;
}
if ( v2[4] )
{
sub_19DE0(v2 + 4);
v2 = *a1;
}
if ( !*v2 || (free(*v2), (v2 = *a1) != nullptr) )
free(v2);
*a1 = nullptr;
}
@@ -0,0 +1,42 @@
/*
* func-name: sub_186E4
* func-address: 0x186e4
* export-type: decompile
* callers: 0x187cc
* callees: 0x18674, 0x19f0c, 0x1a0e8, 0x43f70, 0x44370
*/
__int64 __fastcall sub_186E4(__int64 a1)
{
void *v2; // x0
__int64 v3; // x0
__int64 v4; // x0
_WORD *v5; // x8
int *v6; // x8
void **v8[2]; // [xsp+0h] [xbp-10h] BYREF
v8[1] = *(void ***)(_ReadStatusReg(TPIDR_EL0) + 40);
v8[0] = (void **)a1;
v2 = calloc(1u, 2u);
*(_QWORD *)a1 = v2;
*(_QWORD *)(a1 + 8) = sub_185B4;
*(_QWORD *)(a1 + 16) = sub_18610;
v3 = sub_1A0E8(v2);
*(_QWORD *)(a1 + 24) = v3;
v4 = sub_1A0E8(v3);
v5 = *(_WORD **)a1;
*(_QWORD *)(a1 + 32) = v4;
if ( v5 && *(_QWORD *)(a1 + 24) && v4 )
{
*v5 = 99;
sub_19F0C(*(_QWORD *)(a1 + 24), &unk_534B, 0);
sub_19F0C(*(_QWORD *)(a1 + 32), &unk_534B, 0);
v6 = &dword_574C;
}
else
{
sub_18674(v8);
v6 = &dword_5754;
}
return (unsigned int)*v6;
}
@@ -0,0 +1,24 @@
/*
* func-name: sub_187CC
* func-address: 0x187cc
* export-type: decompile
* callers: 0x17ac4, 0x18bcc
* callees: 0x186e4, 0x44370
*/
void *sub_187CC()
{
void *result; // x0
void *v1; // x19
result = calloc(1u, 0x28u);
if ( result )
{
v1 = result;
if ( (unsigned int)sub_186E4((__int64)result) )
return nullptr;
else
return v1;
}
return result;
}
@@ -0,0 +1,55 @@
/*
* func-name: sub_18810
* func-address: 0x18810
* export-type: decompile
* callers: 0x18bcc
* callees: 0x1a76c, 0x1bd78, 0x1be18, 0x1c050, 0x1c27c
*/
__int64 __fastcall sub_18810(__int64 a1, __int64 a2)
{
unsigned int v4; // w21
__int64 result; // x0
int v6; // w8
v4 = sub_1BE18(a2, *(_QWORD *)(a1 + 24), 0);
if ( v4 )
return v4;
result = sub_1C050(a2, *(_QWORD *)(a1 + 32), 1);
if ( !(_DWORD)result )
{
result = sub_1BD78(a2, *(unsigned int *)(a1 + 40), 2);
if ( !(_DWORD)result )
{
result = sub_1C27C(a2, *(_QWORD *)(a1 + 48), 3);
if ( !(_DWORD)result )
{
result = sub_1C27C(a2, *(_QWORD *)(a1 + 56), 4);
if ( !(_DWORD)result )
{
result = sub_1C27C(a2, *(_QWORD *)(a1 + 64), 5);
if ( !(_DWORD)result )
{
if ( !(unsigned int)sub_1A76C(*(_QWORD *)(a1 + 72))
|| (result = sub_1C050(a2, *(_QWORD *)(a1 + 72), 6), !(_DWORD)result) )
{
if ( !(unsigned int)sub_1A76C(*(_QWORD *)(a1 + 80))
|| (result = sub_1C050(a2, *(_QWORD *)(a1 + 80), 7), !(_DWORD)result) )
{
if ( !(unsigned int)sub_1A76C(*(_QWORD *)(a1 + 88))
|| (result = sub_1C050(a2, *(_QWORD *)(a1 + 88), 8), !(_DWORD)result) )
{
v6 = sub_1A76C(*(_QWORD *)(a1 + 96));
result = 0;
if ( v6 )
return sub_1C050(a2, *(_QWORD *)(a1 + 96), 9);
}
}
}
}
}
}
}
}
return result;
}
@@ -0,0 +1,49 @@
/*
* func-name: sub_18978
* func-address: 0x18978
* export-type: decompile
* callers: 0x18bcc
* callees: 0x1af14, 0x1b2dc, 0x1b6b8, 0x1b9c8
*/
__int64 __fastcall sub_18978(_QWORD *a1, __int64 a2)
{
__int64 result; // x0
result = sub_1B2DC(a2, a1 + 3, 0, 1);
if ( !(_DWORD)result )
{
result = sub_1B6B8(a2, a1[4], 1, 1);
if ( !(_DWORD)result )
{
result = sub_1AF14(a2, a1 + 5, 2, 1);
if ( !(_DWORD)result )
{
result = sub_1B9C8(a2, a1[6], 3, 1);
if ( !(_DWORD)result )
{
result = sub_1B9C8(a2, a1[7], 4, 1);
if ( !(_DWORD)result )
{
result = sub_1B9C8(a2, a1[8], 5, 0);
if ( !(_DWORD)result )
{
result = sub_1B6B8(a2, a1[9], 6, 0);
if ( !(_DWORD)result )
{
result = sub_1B6B8(a2, a1[10], 7, 0);
if ( !(_DWORD)result )
{
result = sub_1B6B8(a2, a1[11], 8, 0);
if ( !(_DWORD)result )
return sub_1B6B8(a2, a1[12], 9, 0);
}
}
}
}
}
}
}
}
return result;
}
@@ -0,0 +1,57 @@
/*
* func-name: sub_18ACC
* func-address: 0x18acc
* export-type: decompile
* callers: 0x18bcc, 0x1fcb8
* callees: 0x17f70, 0x183dc, 0x18674, 0x1a508, 0x43fe0
*/
void __fastcall sub_18ACC(void ****a1)
{
void ***v2; // x0
v2 = *a1;
if ( v2[4] )
{
sub_1A508(v2 + 4);
v2 = *a1;
}
if ( v2[6] )
{
sub_183DC(v2 + 6);
v2 = *a1;
}
if ( v2[7] )
{
sub_18674(v2 + 7);
v2 = *a1;
}
if ( v2[8] )
{
sub_17F70(v2 + 8);
v2 = *a1;
}
if ( v2[9] )
{
sub_1A508(v2 + 9);
v2 = *a1;
}
if ( v2[10] )
{
sub_1A508(v2 + 10);
v2 = *a1;
}
if ( v2[11] )
{
sub_1A508(v2 + 11);
v2 = *a1;
}
if ( v2[12] )
{
sub_1A508(v2 + 12);
v2 = *a1;
}
if ( !*v2 || (free(*v2), (v2 = *a1) != nullptr) )
free(v2);
*a1 = nullptr;
}
@@ -0,0 +1,56 @@
/*
* func-name: sub_18BCC
* func-address: 0x18bcc
* export-type: decompile
* callers: 0x18d28
* callees: 0x1821c, 0x18570, 0x187cc, 0x18acc, 0x1a7a8, 0x43f70, 0x44370
*/
__int64 __fastcall sub_18BCC(__int64 a1)
{
void *v2; // x0
__int64 v3; // x0
__int64 v4; // x0
void **v5; // x8
int *v6; // x9
void ***v8[2]; // [xsp+0h] [xbp-10h] BYREF
v8[1] = *(void ****)(_ReadStatusReg(TPIDR_EL0) + 40);
v8[0] = (void ***)a1;
v2 = calloc(1u, 2u);
*(_QWORD *)(a1 + 16) = sub_18978;
*(_QWORD *)(a1 + 24) = 0;
*(_QWORD *)a1 = v2;
*(_QWORD *)(a1 + 8) = sub_18810;
v3 = sub_1A7A8("int32", "string");
*(_DWORD *)(a1 + 40) = 0;
*(_QWORD *)(a1 + 32) = v3;
*(_QWORD *)(a1 + 48) = sub_18570();
*(_QWORD *)(a1 + 56) = sub_187CC();
*(_QWORD *)(a1 + 64) = sub_1821C();
*(_QWORD *)(a1 + 72) = sub_1A7A8("int32", "string");
*(_QWORD *)(a1 + 80) = sub_1A7A8("int32", "string");
*(_QWORD *)(a1 + 88) = sub_1A7A8("int32", "int32");
v4 = sub_1A7A8("int32", "string");
v5 = *(void ***)a1;
*(_QWORD *)(a1 + 96) = v4;
if ( v5
&& *(_QWORD *)(a1 + 32)
&& *(_QWORD *)(a1 + 48)
&& *(_QWORD *)(a1 + 56)
&& *(_QWORD *)(a1 + 64)
&& *(_QWORD *)(a1 + 72)
&& *(_QWORD *)(a1 + 80)
&& *(_QWORD *)(a1 + 88)
&& v4 )
{
v6 = &dword_574C;
*(_WORD *)v5 = 100;
}
else
{
sub_18ACC(v8);
v6 = &dword_5754;
}
return (unsigned int)*v6;
}

Some files were not shown because too many files have changed in this diff Show More