{"type": "func", "start": 6442551088, "end": 6442551752, "name": "sub_180018730", "pseudocode": "// \n// sub_180018730 from 0x180018730 to 0x1800189c8 (664 bytes)\n// \n// 2 xrefs:\n// > cocos2d::extension::CCHttpClient::CCHttpClient @ 0x1800176ac\n// > <???> @ 0x18004ab48\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\n// Hidden C++ exception states: #wind=1\nuintptr_t *__fastcall sub_180018730(unsigned __int64 *a1, __int128 *a2, _QWORD *a3)\n{\n  __int128 *v3; // rbx\n  unsigned __int64 v5; // r15\n  __int64 v6; // rax\n  unsigned __int64 v7; // r13\n  unsigned __int64 v8; // rcx\n  unsigned __int64 v9; // rdx\n  unsigned __int64 v10; // rax\n  unsigned __int64 v11; // r14\n  unsigned __int64 v12; // r12\n  void *v13; // rax\n  unsigned __int64 v14; // rdi\n  void *v15; // rax\n  unsigned __int64 v16; // r15\n  unsigned __int64 v17; // r14\n  _QWORD *v18; // r9\n  unsigned int *ThrdAddr; // r15\n  uintptr_t v20; // rax\n  __int128 *v21; // rdx\n  __int128 *v22; // rax\n  _OWORD *v23; // rcx\n  __int128 v24; // xmm1\n  __int128 v25; // xmm1\n  __int128 *v26; // rax\n  unsigned __int64 v27; // r14\n  __int128 v28; // xmm1\n  _OWORD *v29; // rcx\n  _OWORD *v30; // rdx\n  _OWORD *v31; // rax\n  __int64 v33; // rcx\n  uintptr_t *v34; // [rsp+30h] [rbp-58h]\n  __int64 v35; // [rsp+38h] [rbp-50h]\n  __int64 v36; // [rsp+90h] [rbp+8h]\n  __int64 v37; // [rsp+98h] [rbp+10h]\n  void *v39; // [rsp+A8h] [rbp+20h]\n\n  v3 = a2;\n  v5 = (unsigned __int64)a2 - *a1;\n  v6 = (__int64)(a1[1] - *a1) >> 4;\n  if ( v6 == 0xFFFFFFFFFFFFFFFLL )\n    sub_180003530();\n  v7 = v6 + 1;\n  v8 = (__int64)(a1[2] - *a1) >> 4;\n  v9 = v8 >> 1;\n  v10 = 0xFFFFFFFFFFFFFFFLL - (v8 >> 1);\n  if ( v8 > v10 )\n    goto LABEL_37;\n  v11 = v7;\n  if ( v9 + v8 >= v7 )\n    v11 = v9 + v8;\n  if ( v11 > 0xFFFFFFFFFFFFFFFLL )\nLABEL_37:\n    Concurrency::cancel_current_task();\n  v12 = 16 * v11;\n  v37 = v11;\n  if ( 16 * v11 >= 0x1000 )\n  {\n    if ( v12 + 39 < v12 )\n      goto LABEL_37;\n    v13 = operator new(v12 + 39);\n    if ( !v13 )\n      goto LABEL_35;\n    v14 = ((unsigned __int64)v13 + 39) & 0xFFFFFFFFFFFFFFE0uLL;\n    *(_QWORD *)(v14 - 8) = v13;\n    goto LABEL_13;\n  }\n  if ( !v12 )\n  {\n    v14 = 0;\n    v37 = v11;\nLABEL_13:\n    v39 = (void *)v14;\n    goto LABEL_14;\n  }\n  v15 = operator new(16 * v11);\n  v14 = (unsigned __int64)v15;\n  v39 = v15;\n  v37 = v11;\nLABEL_14:\n  v16 = v14 + (v5 & 0xFFFFFFFFFFFFFFF0uLL);\n  v34 = (uintptr_t *)v16;\n  v17 = v16 + 16;\n  v35 = v16 + 16;\n  v36 = v16 + 16;\n  try\n  {\n    v18 = operator new(8u);\n    *v18 = *a3;\n    ThrdAddr = (unsigned int *)(v16 + 8);\n    v20 = beginthreadex(nullptr, 0, StartAddress, v18, 0, ThrdAddr);\n  }\n  catch ( ... )\n  {\n    sub_180018500(v36, v35);\n    sub_1800184B0(v33, v39, v37);\n    throw;\n  }\n  *v34 = v20;\n  if ( !v20 )\n  {\n    *ThrdAddr = 0;\n    std::_Throw_Cpp_error(6);\n    goto LABEL_37;\n  }\n  v21 = (__int128 *)a1[1];\n  v22 = (__int128 *)*a1;\n  v23 = (_OWORD *)v14;\n  if ( v3 == v21 )\n  {\n    for ( ; v22 != v21; ++v22 )\n    {\n      v24 = *v22;\n      *v22 = 0;\n      *v23++ = v24;\n    }\n  }\n  else\n  {\n    for ( ; v22 != v3; ++v22 )\n    {\n      v25 = *v22;\n      *v22 = 0;\n      *v23++ = v25;\n    }\n    v26 = (__int128 *)a1[1];\n    if ( v3 != v26 )\n    {\n      v27 = v17 - (_QWORD)v3;\n      do\n      {\n        v28 = *v3;\n        *v3 = 0;\n        *(__int128 *)((char *)v3++ + v27) = v28;\n      }\n      while ( v3 != v26 );\n    }\n  }\n  v29 = (_OWORD *)*a1;\n  if ( *a1 )\n  {\n    v30 = (_OWORD *)a1[1];\n    v31 = (_OWORD *)*a1;\n    if ( v29 != v30 )\n    {\n      do\n      {\n        if ( *((_DWORD *)v31 + 2) )\n          terminate();\n        ++v31;\n      }\n      while ( v31 != v30 );\n    }\n    if ( ((a1[2] - (_QWORD)v29) & 0xFFFFFFFFFFFFFFF0uLL) < 0x1000 )\n      goto LABEL_32;\n    if ( (unsigned __int64)v29 - *((_QWORD *)v29 - 1) - 8 <= 0x1F )\n    {\n      v29 = *((_OWORD **)v29 - 1);\nLABEL_32:\n      j_j_free(v29);\n      goto LABEL_33;\n    }\nLABEL_35:\n    invalid_parameter_noinfo_noreturn();\n  }\nLABEL_33:\n  *a1 = v14;\n  a1[1] = v14 + 16 * v7;\n  a1[2] = v12 + v14;\n  return v34;\n}", "assembly": "; \n; sub_180018730 from 0x180018730 to 0x1800189c8 (664 bytes)\n; \n; 2 xrefs:\n; > cocos2d::extension::CCHttpClient::CCHttpClient @ 0x1800176ac\n; > <???> @ 0x18004ab48\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nmov     [rsp+arg_10], r8                                               ; +0x0, 0x180018730\npush    rbx                                                            ; +0x5, 0x180018735\npush    rsi                                                            ; +0x6, 0x180018736\npush    rdi                                                            ; +0x7, 0x180018737\npush    r12                                                            ; +0x8, 0x180018738\npush    r13                                                            ; +0xa, 0x18001873a\npush    r14                                                            ; +0xc, 0x18001873c\npush    r15                                                            ; +0xe, 0x18001873e\nsub     rsp, 50h                                                       ; +0x10, 0x180018740\nmov     rbx, rdx                                                       ; +0x14, 0x180018744\nmov     rsi, rcx                                                       ; +0x17, 0x180018747\nmov     rdx, [rcx]                                                     ; +0x1a, 0x18001874a\nmov     r15, rbx                                                       ; +0x1d, 0x18001874d\nsub     r15, rdx                                                       ; +0x20, 0x180018750\nmov     rax, [rcx+8]                                                   ; +0x23, 0x180018753\nsub     rax, rdx                                                       ; +0x27, 0x180018757\nsar     rax, 4                                                         ; +0x2a, 0x18001875a\nmov     r8, 0FFFFFFFFFFFFFFFh                                          ; +0x2e, 0x18001875e\ncmp     rax, r8                                                        ; +0x38, 0x180018768\njz      loc_1800189C2                                                  ; +0x3b, 0x18001876b\nlea     r13, [rax+1]                                                   ; +0x41, 0x180018771\nmov     rcx, [rcx+10h]                                                 ; +0x45, 0x180018775\nsub     rcx, rdx                                                       ; +0x49, 0x180018779\nsar     rcx, 4                                                         ; +0x4c, 0x18001877c\nmov     rdx, rcx                                                       ; +0x50, 0x180018780\nshr     rdx, 1                                                         ; +0x53, 0x180018783\nmov     rax, r8                                                        ; +0x56, 0x180018786\nsub     rax, rdx                                                       ; +0x59, 0x180018789\ncmp     rcx, rax                                                       ; +0x5c, 0x18001878c\nja      loc_1800189BC                                                  ; +0x5f, 0x18001878f\nlea     rax, [rdx+rcx]                                                 ; +0x65, 0x180018795\nmov     r14, r13                                                       ; +0x69, 0x180018799\ncmp     rax, r13                                                       ; +0x6c, 0x18001879c\ncmovnb  r14, rax                                                       ; +0x6f, 0x18001879f\ncmp     r14, r8                                                        ; +0x73, 0x1800187a3\nja      loc_1800189BC                                                  ; +0x76, 0x1800187a6\nmov     r12, r14                                                       ; +0x7c, 0x1800187ac\nshl     r12, 4                                                         ; +0x7f, 0x1800187af\nmov     [rsp+88h+arg_8], r14                                           ; +0x83, 0x1800187b3\ncmp     r12, 1000h                                                     ; +0x8b, 0x1800187bb\njb      short loc_1800187EE                                            ; +0x92, 0x1800187c2\nlea     rcx, [r12+27h]; Size                                           ; +0x94, 0x1800187c4\ncmp     rcx, r12                                                       ; +0x99, 0x1800187c9\njbe     loc_1800189BC                                                  ; +0x9c, 0x1800187cc\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0xa2, 0x1800187d2\ntest    rax, rax                                                       ; +0xa7, 0x1800187d7\njz      loc_1800189A2                                                  ; +0xaa, 0x1800187da\nlea     rdi, [rax+27h]                                                 ; +0xb0, 0x1800187e0\nand     rdi, 0FFFFFFFFFFFFFFE0h                                        ; +0xb4, 0x1800187e4\nmov     [rdi-8], rax                                                   ; +0xb8, 0x1800187e8\njmp     short loc_18001881A                                            ; +0xbc, 0x1800187ec\ntest    r12, r12                                                       ; +0xbe, 0x1800187ee\njz      short loc_180018810                                            ; +0xc1, 0x1800187f1\nmov     rcx, r12; Size                                                 ; +0xc3, 0x1800187f3\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0xc6, 0x1800187f6\nmov     rdi, rax                                                       ; +0xcb, 0x1800187fb\nmov     [rsp+88h+arg_18], rax                                          ; +0xce, 0x1800187fe\nmov     [rsp+88h+arg_8], r14                                           ; +0xd6, 0x180018806\njmp     short loc_180018822                                            ; +0xde, 0x18001880e\nxor     edi, edi                                                       ; +0xe0, 0x180018810\nmov     [rsp+88h+arg_8], r14                                           ; +0xe2, 0x180018812\nmov     [rsp+88h+arg_18], rdi                                          ; +0xea, 0x18001881a\nand     r15, 0FFFFFFFFFFFFFFF0h                                        ; +0xf2, 0x180018822\nadd     r15, rdi                                                       ; +0xf6, 0x180018826\nmov     [rsp+88h+var_58], r15                                          ; +0xf9, 0x180018829\nlea     r14, [r15+10h]                                                 ; +0xfe, 0x18001882e\nmov     [rsp+88h+var_50], r14                                          ; +0x102, 0x180018832\nmov     [rsp+88h+arg_0], r14                                           ; +0x107, 0x180018837\nmov     ecx, 8; Size                                                   ; +0x10f, 0x18001883f\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0x114, 0x180018844\nmov     r9, rax; ArgList                                               ; +0x119, 0x180018849\nmov     rax, [rsp+88h+arg_10]                                          ; +0x11c, 0x18001884c\nmov     rax, [rax]                                                     ; +0x124, 0x180018854\nmov     [r9], rax                                                      ; +0x127, 0x180018857\nmov     [rsp+88h+var_48], r9                                           ; +0x12a, 0x18001885a\nadd     r15, 8                                                         ; +0x12f, 0x18001885f\nmov     [rsp+88h+ThrdAddr], r15; ThrdAddr                              ; +0x133, 0x180018863\nmov     [rsp+88h+InitFlag], 0; InitFlag                                ; +0x138, 0x180018868\nlea     r8, StartAddress; StartAddress                                 ; +0x140, 0x180018870\nxor     edx, edx; StackSize                                            ; +0x147, 0x180018877\nxor     ecx, ecx; Security                                             ; +0x149, 0x180018879\ncall    cs:_beginthreadex                                              ; +0x14b, 0x18001887b\nmov     rcx, [rsp+88h+var_58]                                          ; +0x151, 0x180018881\nmov     [rcx], rax                                                     ; +0x156, 0x180018886\ntest    rax, rax                                                       ; +0x159, 0x180018889\njz      loc_1800189A9                                                  ; +0x15c, 0x18001888c\nmov     [rsp+88h+arg_0], rcx                                           ; +0x162, 0x180018892\nmov     rdx, [rsi+8]                                                   ; +0x16a, 0x18001889a\nmov     rax, [rsi]                                                     ; +0x16e, 0x18001889e\nmov     rcx, rdi                                                       ; +0x171, 0x1800188a1\ncmp     rbx, rdx                                                       ; +0x174, 0x1800188a4\njnz     short loc_1800188CB                                            ; +0x177, 0x1800188a7\ncmp     rax, rdx                                                       ; +0x179, 0x1800188a9\njz      short loc_180018917                                            ; +0x17c, 0x1800188ac\nxchg    ax, ax                                                         ; +0x17e, 0x1800188ae\nxorps   xmm0, xmm0                                                     ; +0x180, 0x1800188b0\nmovups  xmm1, xmmword ptr [rax]                                        ; +0x183, 0x1800188b3\nmovups  xmmword ptr [rax], xmm0                                        ; +0x186, 0x1800188b6\nmovups  xmmword ptr [rcx], xmm1                                        ; +0x189, 0x1800188b9\nlea     rcx, [rcx+10h]                                                 ; +0x18c, 0x1800188bc\nadd     rax, 10h                                                       ; +0x190, 0x1800188c0\ncmp     rax, rdx                                                       ; +0x194, 0x1800188c4\njnz     short loc_1800188B0                                            ; +0x197, 0x1800188c7\njmp     short loc_180018917                                            ; +0x199, 0x1800188c9\ncmp     rax, rbx                                                       ; +0x19b, 0x1800188cb\njz      short loc_1800188E9                                            ; +0x19e, 0x1800188ce\nxorps   xmm0, xmm0                                                     ; +0x1a0, 0x1800188d0\nmovups  xmm1, xmmword ptr [rax]                                        ; +0x1a3, 0x1800188d3\nmovups  xmmword ptr [rax], xmm0                                        ; +0x1a6, 0x1800188d6\nmovups  xmmword ptr [rcx], xmm1                                        ; +0x1a9, 0x1800188d9\nlea     rcx, [rcx+10h]                                                 ; +0x1ac, 0x1800188dc\nadd     rax, 10h                                                       ; +0x1b0, 0x1800188e0\ncmp     rax, rbx                                                       ; +0x1b4, 0x1800188e4\njnz     short loc_1800188D0                                            ; +0x1b7, 0x1800188e7\nmov     [rsp+88h+arg_0], rdi                                           ; +0x1b9, 0x1800188e9\nmov     rax, [rsi+8]                                                   ; +0x1c1, 0x1800188f1\ncmp     rbx, rax                                                       ; +0x1c5, 0x1800188f5\njz      short loc_180018917                                            ; +0x1c8, 0x1800188f8\nsub     r14, rbx                                                       ; +0x1ca, 0x1800188fa\nnop     dword ptr [rax]                                                ; +0x1cd, 0x1800188fd\nxorps   xmm0, xmm0                                                     ; +0x1d0, 0x180018900\nmovups  xmm1, xmmword ptr [rbx]                                        ; +0x1d3, 0x180018903\nmovups  xmmword ptr [rbx], xmm0                                        ; +0x1d6, 0x180018906\nmovups  xmmword ptr [rbx+r14], xmm1                                    ; +0x1d9, 0x180018909\nadd     rbx, 10h                                                       ; +0x1de, 0x18001890e\ncmp     rbx, rax                                                       ; +0x1e2, 0x180018912\njnz     short loc_180018900                                            ; +0x1e5, 0x180018915\nmov     rcx, [rsi]                                                     ; +0x1e7, 0x180018917\ntest    rcx, rcx                                                       ; +0x1ea, 0x18001891a\njz      short loc_180018970                                            ; +0x1ed, 0x18001891d\nmov     rdx, [rsi+8]                                                   ; +0x1ef, 0x18001891f\nmov     rax, rcx                                                       ; +0x1f3, 0x180018923\ncmp     rcx, rdx                                                       ; +0x1f6, 0x180018926\njz      short loc_18001893F                                            ; +0x1f9, 0x180018929\nnop     dword ptr [rax+rax+00h]                                        ; +0x1fb, 0x18001892b\ncmp     dword ptr [rax+8], 0                                           ; +0x200, 0x180018930\njnz     short loc_18001899B                                            ; +0x204, 0x180018934\nadd     rax, 10h                                                       ; +0x206, 0x180018936\ncmp     rax, rdx                                                       ; +0x20a, 0x18001893a\njnz     short loc_180018930                                            ; +0x20d, 0x18001893d\nmov     rdx, [rsi+10h]                                                 ; +0x20f, 0x18001893f\nsub     rdx, rcx                                                       ; +0x213, 0x180018943\nand     rdx, 0FFFFFFFFFFFFFFF0h                                        ; +0x216, 0x180018946\ncmp     rdx, 1000h                                                     ; +0x21a, 0x18001894a\njb      short loc_18001896B                                            ; +0x221, 0x180018951\nadd     rdx, 27h ; '''                                                 ; +0x223, 0x180018953\nmov     r8, [rcx-8]                                                    ; +0x227, 0x180018957\nsub     rcx, r8                                                        ; +0x22b, 0x18001895b\nlea     rax, [rcx-8]                                                   ; +0x22e, 0x18001895e\ncmp     rax, 1Fh                                                       ; +0x232, 0x180018962\nja      short loc_1800189A2                                            ; +0x236, 0x180018966\nmov     rcx, r8; Block                                                 ; +0x238, 0x180018968\ncall    j_j_free                                                       ; +0x23b, 0x18001896b\nmov     [rsi], rdi                                                     ; +0x240, 0x180018970\nshl     r13, 4                                                         ; +0x243, 0x180018973\nadd     r13, rdi                                                       ; +0x247, 0x180018977\nmov     [rsi+8], r13                                                   ; +0x24a, 0x18001897a\nlea     rcx, [r12+rdi]                                                 ; +0x24e, 0x18001897e\nmov     [rsi+10h], rcx                                                 ; +0x252, 0x180018982\nmov     rax, [rsp+88h+var_58]                                          ; +0x256, 0x180018986\nadd     rsp, 50h                                                       ; +0x25b, 0x18001898b\npop     r15                                                            ; +0x25f, 0x18001898f\npop     r14                                                            ; +0x261, 0x180018991\npop     r13                                                            ; +0x263, 0x180018993\npop     r12                                                            ; +0x265, 0x180018995\npop     rdi                                                            ; +0x267, 0x180018997\npop     rsi                                                            ; +0x268, 0x180018998\npop     rbx                                                            ; +0x269, 0x180018999\nretn                                                                   ; +0x26a, 0x18001899a\ncall    cs:__imp_terminate                                             ; +0x26b, 0x18001899b\nalign 2                                                                ; +0x271, 0x1800189a1\ncall    cs:_invalid_parameter_noinfo_noreturn                          ; +0x272, 0x1800189a2\ndb 90h                                                                 ; +0x278, 0x1800189a8\nmov     dword ptr [r15], 0                                             ; +0x279, 0x1800189a9\nmov     ecx, 6                                                         ; +0x280, 0x1800189b0\ncall    cs:?_Throw_Cpp_error@std@@YAXH@Z; std::_Throw_Cpp_error(int)   ; +0x285, 0x1800189b5\nnop                                                                    ; +0x28b, 0x1800189bb\ncall    ?cancel_current_task@Concurrency@@YAXXZ; Concurrency::cancel_current_task(void) ; +0x28c, 0x1800189bc\nalign 2                                                                ; +0x291, 0x1800189c1\ncall    sub_180003530                                                  ; +0x292, 0x1800189c2\ndb 0CCh                                                                ; +0x297, 0x1800189c7", "xrefs": ["cocos2d::extension::CCHttpClient::CCHttpClient @ 0x1800176ac", "<???> @ 0x18004ab48"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}