// // sub_180003810 from 0x180003810 to 0x18000399b (395 bytes) // // 8 xrefs: // > sub_180001880 @ 0x1800018eb // > sub_1800039A0 @ 0x180003a10 // > sub_180003A20 @ 0x180003a9d // > cocos2d::extension::WebSocket::init @ 0x180019f15 // > @ 0x18002d2b4 // > @ 0x18002d2c4 // > @ 0x18002d2e4 // > @ 0x180049258 // // 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 // _QWORD *__fastcall sub_180003810(_QWORD *Src, unsigned __int64 a2, __int64 a3, const void *a4, size_t Size) { size_t v5; // r14 __int64 v6; // rbx size_t v9; // rbp unsigned __int64 v10; // rdx unsigned __int64 v11; // r13 __int64 v12; // rcx size_t v13; // rcx void *v14; // rax _QWORD *v15; // rdi char *v16; // r15 _QWORD *v17; // rbx v5 = Src[2]; v6 = 0x7FFFFFFFFFFFFFFFLL; if ( 0x7FFFFFFFFFFFFFFFLL - v5 < a2 ) sub_180003D90(); v9 = v5 + a2; v10 = (v5 + a2) | 0xF; v11 = Src[3]; if ( v10 > 0x7FFFFFFFFFFFFFFFLL || (v12 = v11 >> 1, v11 > 0x7FFFFFFFFFFFFFFFLL - (v11 >> 1)) ) { v13 = 0x8000000000000027uLL; } else { v6 = v10; if ( v10 < v12 + v11 ) v6 = v12 + v11; if ( (unsigned __int64)(v6 + 1) < 0x1000 ) { if ( v6 == -1 ) v15 = nullptr; else v15 = operator new(v6 + 1); goto LABEL_15; } v13 = v6 + 40; if ( v6 + 40 < (unsigned __int64)(v6 + 1) ) Concurrency::cancel_current_task(); } v14 = operator new(v13); if ( !v14 ) goto LABEL_20; v15 = (_QWORD *)(((unsigned __int64)v14 + 39) & 0xFFFFFFFFFFFFFFE0uLL); *(v15 - 1) = v14; LABEL_15: Src[2] = v9; v16 = (char *)v15 + v5; Src[3] = v6; if ( v11 <= 0xF ) { memcpy(v15, Src, v5); memcpy((char *)v15 + v5, a4, Size); v16[Size] = 0; goto LABEL_22; } v17 = (_QWORD *)*Src; memcpy(v15, (const void *)*Src, v5); memcpy((char *)v15 + v5, a4, Size); v16[Size] = 0; if ( v11 + 1 >= 0x1000 ) { if ( (unsigned __int64)v17 - *(v17 - 1) - 8 <= 0x1F ) { v17 = (_QWORD *)*(v17 - 1); goto LABEL_19; } LABEL_20: invalid_parameter_noinfo_noreturn(); } LABEL_19: j_j_free(v17); LABEL_22: *Src = v15; return Src; }