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
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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;
}

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