// // sub_180018730 from 0x180018730 to 0x1800189c8 (664 bytes) // // 2 xrefs: // > cocos2d::extension::CCHttpClient::CCHttpClient @ 0x1800176ac // > @ 0x18004ab48 // // 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 // // Hidden C++ exception states: #wind=1 uintptr_t *__fastcall sub_180018730(unsigned __int64 *a1, __int128 *a2, _QWORD *a3) { __int128 *v3; // rbx unsigned __int64 v5; // r15 __int64 v6; // rax unsigned __int64 v7; // r13 unsigned __int64 v8; // rcx unsigned __int64 v9; // rdx unsigned __int64 v10; // rax unsigned __int64 v11; // r14 unsigned __int64 v12; // r12 void *v13; // rax unsigned __int64 v14; // rdi void *v15; // rax unsigned __int64 v16; // r15 unsigned __int64 v17; // r14 _QWORD *v18; // r9 unsigned int *ThrdAddr; // r15 uintptr_t v20; // rax __int128 *v21; // rdx __int128 *v22; // rax _OWORD *v23; // rcx __int128 v24; // xmm1 __int128 v25; // xmm1 __int128 *v26; // rax unsigned __int64 v27; // r14 __int128 v28; // xmm1 _OWORD *v29; // rcx _OWORD *v30; // rdx _OWORD *v31; // rax __int64 v33; // rcx uintptr_t *v34; // [rsp+30h] [rbp-58h] __int64 v35; // [rsp+38h] [rbp-50h] __int64 v36; // [rsp+90h] [rbp+8h] __int64 v37; // [rsp+98h] [rbp+10h] void *v39; // [rsp+A8h] [rbp+20h] v3 = a2; v5 = (unsigned __int64)a2 - *a1; v6 = (__int64)(a1[1] - *a1) >> 4; if ( v6 == 0xFFFFFFFFFFFFFFFLL ) sub_180003530(); v7 = v6 + 1; v8 = (__int64)(a1[2] - *a1) >> 4; v9 = v8 >> 1; v10 = 0xFFFFFFFFFFFFFFFLL - (v8 >> 1); if ( v8 > v10 ) goto LABEL_37; v11 = v7; if ( v9 + v8 >= v7 ) v11 = v9 + v8; if ( v11 > 0xFFFFFFFFFFFFFFFLL ) LABEL_37: Concurrency::cancel_current_task(); v12 = 16 * v11; v37 = v11; if ( 16 * v11 >= 0x1000 ) { if ( v12 + 39 < v12 ) goto LABEL_37; v13 = operator new(v12 + 39); if ( !v13 ) goto LABEL_35; v14 = ((unsigned __int64)v13 + 39) & 0xFFFFFFFFFFFFFFE0uLL; *(_QWORD *)(v14 - 8) = v13; goto LABEL_13; } if ( !v12 ) { v14 = 0; v37 = v11; LABEL_13: v39 = (void *)v14; goto LABEL_14; } v15 = operator new(16 * v11); v14 = (unsigned __int64)v15; v39 = v15; v37 = v11; LABEL_14: v16 = v14 + (v5 & 0xFFFFFFFFFFFFFFF0uLL); v34 = (uintptr_t *)v16; v17 = v16 + 16; v35 = v16 + 16; v36 = v16 + 16; try { v18 = operator new(8u); *v18 = *a3; ThrdAddr = (unsigned int *)(v16 + 8); v20 = beginthreadex(nullptr, 0, StartAddress, v18, 0, ThrdAddr); } catch ( ... ) { sub_180018500(v36, v35); sub_1800184B0(v33, v39, v37); throw; } *v34 = v20; if ( !v20 ) { *ThrdAddr = 0; std::_Throw_Cpp_error(6); goto LABEL_37; } v21 = (__int128 *)a1[1]; v22 = (__int128 *)*a1; v23 = (_OWORD *)v14; if ( v3 == v21 ) { for ( ; v22 != v21; ++v22 ) { v24 = *v22; *v22 = 0; *v23++ = v24; } } else { for ( ; v22 != v3; ++v22 ) { v25 = *v22; *v22 = 0; *v23++ = v25; } v26 = (__int128 *)a1[1]; if ( v3 != v26 ) { v27 = v17 - (_QWORD)v3; do { v28 = *v3; *v3 = 0; *(__int128 *)((char *)v3++ + v27) = v28; } while ( v3 != v26 ); } } v29 = (_OWORD *)*a1; if ( *a1 ) { v30 = (_OWORD *)a1[1]; v31 = (_OWORD *)*a1; if ( v29 != v30 ) { do { if ( *((_DWORD *)v31 + 2) ) terminate(); ++v31; } while ( v31 != v30 ); } if ( ((a1[2] - (_QWORD)v29) & 0xFFFFFFFFFFFFFFF0uLL) < 0x1000 ) goto LABEL_32; if ( (unsigned __int64)v29 - *((_QWORD *)v29 - 1) - 8 <= 0x1F ) { v29 = *((_OWORD **)v29 - 1); LABEL_32: j_j_free(v29); goto LABEL_33; } LABEL_35: invalid_parameter_noinfo_noreturn(); } LABEL_33: *a1 = v14; a1[1] = v14 + 16 * v7; a1[2] = v12 + v14; return v34; }