// // sub_180006380 from 0x180006380 to 0x18000663d (701 bytes) // // 2 xrefs: // > sub_180007A70 @ 0x180007b45 // > @ 0x1801f6324 // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // __int64 __fastcall sub_180006380(__int64 a1, __int64 a2) { int v3; // r15d int v4; // esi int v5; // eax __int64 v6; // rcx unsigned int v7; // r12d unsigned __int64 v8; // rax void *v9; // rsp __int64 v10; // r14 __int64 v11; // r15 int v12; // edi char v13; // al int v14; // eax __int64 v15; // rsi unsigned int v16; // r12d __int64 v17; // rax void *v18; // rsp __int64 i; // rdi int v20; // eax int v21; // edx int v22; // edx int v23; // eax __int64 v24; // r9 int v25; // eax __int64 v26; // r8 int v27; // edi int v28; // esi int v29; // eax __int64 v30; // r11 int v31; // r10d __int64 v32; // r8 __int64 v33; // rcx int v34; // edx int v35; // r9d unsigned int v36; // edi __int64 v37; // r8 int v38; // ecx __int64 v39; // rdx __int64 v40; // rax _DWORD v42[2]; // [rsp+20h] [rbp+0h] BYREF __int64 v43; // [rsp+28h] [rbp+8h] v3 = 0; v42[0] = 0; v4 = -1; v5 = sub_180001340(a2, 5); v6 = v5; v43 = v6; v7 = (v5 + 67) & 0xFFFFFFFC; v8 = v5 + 15LL; if ( v8 <= v6 ) v8 = 0xFFFFFFFFFFFFFF0LL; v9 = alloca(v8 & 0xFFFFFFFFFFFFFFF0uLL); if ( v6 > 0 ) { v10 = 0; v11 = v6; do { v12 = v4; v13 = sub_180001340(a2, 4); v4 = v13; *((_BYTE *)v42 + v10) = v13; if ( v12 >= v13 ) v4 = v12; ++v10; } while ( v10 < v11 ); v3 = 0; } v14 = 11 * v4; v15 = v4 + 1LL; v16 = (v14 + v7 + 14) & 0xFFFFFFFC; v17 = v15 + 15; if ( v15 + 15 < (unsigned __int64)v15 ) v17 = 0xFFFFFFFFFFFFFF0LL; v18 = alloca(v17 & 0xFFFFFFFFFFFFFFF0uLL); if ( v15 <= 0 ) { v22 = *(_DWORD *)(a2 + 16); v26 = *(_QWORD *)a2; } else { for ( i = 0; i < v15; ++i ) { *((_BYTE *)v42 + i) = sub_180001340(a2, 3) + 1; v20 = sub_180001340(a2, 2); if ( v20 ) { v21 = *(_DWORD *)(a2 + 16) + 8; *(_DWORD *)(a2 + 16) = (*(_BYTE *)(a2 + 16) + 8) & 7; *(_QWORD *)a2 += (__int64)v21 >> 3; } v22 = *(_DWORD *)(a2 + 16); v23 = 1 << v20; if ( v23 <= 0 ) { v26 = *(_QWORD *)a2; } else { v24 = (unsigned int)v23; do { v25 = v22 + 8; v22 = ((_BYTE)v22 + 8) & 7; v26 = *(_QWORD *)a2 + ((__int64)v25 >> 3); *(_QWORD *)a2 = v26; --v24; } while ( v24 ); *(_DWORD *)(a2 + 16) = v22; } } } v27 = 0; v28 = 0; *(_DWORD *)(a2 + 16) = ((_BYTE)v22 + 2) & 7; *(_QWORD *)a2 = v26 + ((__int64)(v22 + 2) >> 3); v29 = sub_180001340(a2, 4); v30 = v43; v31 = v29; v32 = 0; if ( v43 >= 2 ) { do { v33 = *((char *)v42 + v32 + 1); v27 += *((char *)v42 + *((char *)v42 + v32)); v32 += 2; v28 += *((char *)v42 + v33); } while ( v32 < v43 - 1 ); } if ( v32 >= v43 ) v34 = v42[0]; else v34 = *((char *)v42 + *((char *)v42 + v32)); v35 = 0; v36 = (v27 + v28 + v34 + ((v27 + v28 + v34 + ((v27 + v28 + v34 + ((v16 + 7 + 2 * (v27 + v28 + v34)) & 0xFFFFFFFC) + 5) & 0xFFFFFFFC) + 3) & 0xFFFFFFFC) + 3) & 0xFFFFFFFC; if ( v43 > 0 ) { v37 = 0; do { v3 += *((char *)v42 + *((char *)v42 + v37)); if ( v35 < v3 ) { v38 = *(_DWORD *)(a2 + 16); v39 = (unsigned int)(v3 - v35); v35 = v3; do { v40 = (__int64)(v38 + v31) >> 3; v38 = ((_BYTE)v38 + (_BYTE)v31) & 7; *(_QWORD *)a2 += v40; --v39; } while ( v39 ); *(_DWORD *)(a2 + 16) = v38; } ++v37; } while ( v37 < v30 ); } if ( (unsigned int)sub_180001310((_QWORD *)a2) ) return (unsigned int)-1; return v36; }