{"type": "func", "start": 6442550576, "end": 6442551050, "name": "sub_180018530", "pseudocode": "// \n// sub_180018530 from 0x180018530 to 0x18001870a (474 bytes)\n// \n// 5 xrefs:\n// > cocos2d::extension::CCHttpClient::send @ 0x180017ad7\n// > <???> @ 0x18002f29c\n// > <???> @ 0x18002f2e0\n// > <???> @ 0x18002f2f0\n// > <???> @ 0x18004aaf4\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\nvoid __fastcall sub_180018530(_QWORD *a1)\n{\n  unsigned __int64 v2; // rbx\n  unsigned __int64 v3; // rcx\n  unsigned __int64 v4; // r12\n  size_t v5; // rcx\n  void *v6; // rax\n  _QWORD *v7; // r14\n  __int64 v8; // rdi\n  unsigned __int64 v9; // rbx\n  __int64 v10; // r15\n  size_t v11; // rdi\n  const void *v12; // rdx\n  char *v13; // rdi\n  size_t v14; // r8\n  char *v15; // rcx\n  void *v16; // rcx\n\n  v2 = 1;\n  v3 = a1[2];\n  if ( v3 )\n    v2 = v3;\n  while ( v2 == v3 || v2 < 8 )\n  {\n    if ( 0x3FFFFFFFFFFFFFFLL - v2 < v2 )\n      sub_180018710(v3, 0x3FFFFFFFFFFFFFFLL);\n    v2 *= 2LL;\n  }\n  v4 = a1[3];\n  if ( v2 > 0x1FFFFFFFFFFFFFFFLL )\n    goto LABEL_25;\n  v5 = 8 * v2;\n  if ( 8 * v2 < 0x1000 )\n  {\n    if ( v5 )\n      v7 = operator new(v5);\n    else\n      v7 = nullptr;\n    goto LABEL_15;\n  }\n  if ( v5 + 39 < v5 )\nLABEL_25:\n    Concurrency::cancel_current_task();\n  v6 = operator new(v5 + 39);\n  if ( !v6 )\n    goto LABEL_24;\n  v7 = (_QWORD *)(((unsigned __int64)v6 + 39) & 0xFFFFFFFFFFFFFFE0uLL);\n  *(v7 - 1) = v6;\nLABEL_15:\n  v8 = a1[2];\n  v9 = v2 - v8;\n  v10 = 8 * v4;\n  v11 = 8 * v8 - 8 * v4;\n  memmove(&v7[v4], (const void *)(a1[1] + 8 * v4), v11);\n  v12 = (const void *)a1[1];\n  v13 = (char *)&v7[v4] + v11;\n  if ( v4 > v9 )\n  {\n    memmove(v13, v12, 8 * v9);\n    memmove(v7, (const void *)(8 * v9 + a1[1]), v10 - 8 * v9);\n    v15 = (char *)v7 + v10 - 8 * v9;\n    v14 = 8 * v9;\n  }\n  else\n  {\n    memmove(v13, v12, 8 * v4);\n    memset(&v13[v10], 0, 8 * (v9 - v4));\n    v14 = 8 * v4;\n    v15 = (char *)v7;\n  }\n  memset(v15, 0, v14);\n  v16 = (void *)a1[1];\n  if ( v16 )\n  {\n    if ( (unsigned __int64)(8LL * a1[2]) < 0x1000 )\n    {\nLABEL_22:\n      j_j_free(v16);\n      goto LABEL_23;\n    }\n    if ( (unsigned __int64)v16 - *((_QWORD *)v16 - 1) - 8 <= 0x1F )\n    {\n      v16 = *((void **)v16 - 1);\n      goto LABEL_22;\n    }\nLABEL_24:\n    invalid_parameter_noinfo_noreturn();\n  }\nLABEL_23:\n  a1[2] += v9;\n  a1[1] = v7;\n}", "assembly": "; \n; sub_180018530 from 0x180018530 to 0x18001870a (474 bytes)\n; \n; 5 xrefs:\n; > cocos2d::extension::CCHttpClient::send @ 0x180017ad7\n; > <???> @ 0x18002f29c\n; > <???> @ 0x18002f2e0\n; > <???> @ 0x18002f2f0\n; > <???> @ 0x18004aaf4\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\npush    rbx                                                            ; +0x0, 0x180018530\npush    rbp                                                            ; +0x2, 0x180018532\nsub     rsp, 28h                                                       ; +0x3, 0x180018533\nmov     rbp, rcx                                                       ; +0x7, 0x180018537\nmov     ebx, 1                                                         ; +0xa, 0x18001853a\nmov     rcx, [rcx+10h]                                                 ; +0xf, 0x18001853f\nmov     rdx, 3FFFFFFFFFFFFFFh                                          ; +0x13, 0x180018543\ntest    rcx, rcx                                                       ; +0x1d, 0x18001854d\ncmovnz  rbx, rcx                                                       ; +0x20, 0x180018550\nmov     rax, rbx                                                       ; +0x24, 0x180018554\nsub     rax, rcx                                                       ; +0x27, 0x180018557\ncmp     rax, 1                                                         ; +0x2a, 0x18001855a\njb      short loc_180018566                                            ; +0x2e, 0x18001855e\ncmp     rbx, 8                                                         ; +0x30, 0x180018560\njnb     short loc_18001857A                                            ; +0x34, 0x180018564\nmov     rax, rdx                                                       ; +0x36, 0x180018566\nsub     rax, rbx                                                       ; +0x39, 0x180018569\ncmp     rax, rbx                                                       ; +0x3c, 0x18001856c\njb      loc_180018704                                                  ; +0x3f, 0x18001856f\nadd     rbx, rbx                                                       ; +0x45, 0x180018575\njmp     short loc_180018554                                            ; +0x48, 0x180018578\nmov     [rsp+38h+arg_10], r12                                          ; +0x4a, 0x18001857a\nmov     rax, 1FFFFFFFFFFFFFFFh                                         ; +0x4f, 0x18001857f\nmov     r12, [rbp+18h]                                                 ; +0x59, 0x180018589\nmov     [rsp+38h+arg_18], r14                                          ; +0x5d, 0x18001858d\ncmp     rbx, rax                                                       ; +0x62, 0x180018592\nja      loc_1800186FE                                                  ; +0x65, 0x180018595\nlea     rcx, ds:0[rbx*8]; Size                                         ; +0x6b, 0x18001859b\ncmp     rcx, 1000h                                                     ; +0x73, 0x1800185a3\njb      short loc_1800185D8                                            ; +0x7a, 0x1800185aa\nlea     rax, [rcx+27h]                                                 ; +0x7c, 0x1800185ac\ncmp     rax, rcx                                                       ; +0x80, 0x1800185b0\njbe     loc_1800186FE                                                  ; +0x83, 0x1800185b3\nmov     rcx, rax; Size                                                 ; +0x89, 0x1800185b9\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0x8c, 0x1800185bc\ntest    rax, rax                                                       ; +0x91, 0x1800185c1\njz      loc_1800186F7                                                  ; +0x94, 0x1800185c4\nlea     r14, [rax+27h]                                                 ; +0x9a, 0x1800185ca\nand     r14, 0FFFFFFFFFFFFFFE0h                                        ; +0x9e, 0x1800185ce\nmov     [r14-8], rax                                                   ; +0xa2, 0x1800185d2\njmp     short loc_1800185EA                                            ; +0xa6, 0x1800185d6\ntest    rcx, rcx                                                       ; +0xa8, 0x1800185d8\njz      short loc_1800185E7                                            ; +0xab, 0x1800185db\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0xad, 0x1800185dd\nmov     r14, rax                                                       ; +0xb2, 0x1800185e2\njmp     short loc_1800185EA                                            ; +0xb5, 0x1800185e5\nxor     r14d, r14d                                                     ; +0xb7, 0x1800185e7\nmov     rax, [rbp+8]                                                   ; +0xba, 0x1800185ea\nmov     [rsp+38h+arg_0], rsi                                           ; +0xbe, 0x1800185ee\nmov     [rsp+38h+arg_8], rdi                                           ; +0xc3, 0x1800185f3\nmov     rdi, [rbp+10h]                                                 ; +0xc8, 0x1800185f8\nsub     rbx, rdi                                                       ; +0xcc, 0x1800185fc\nmov     [rsp+38h+var_18], r15                                          ; +0xcf, 0x1800185ff\nlea     r15, ds:0[r12*8]                                               ; +0xd4, 0x180018604\nlea     rdx, [rax+r15]; Src                                            ; +0xdc, 0x18001860c\nlea     rdi, ds:0[rdi*8]                                               ; +0xe0, 0x180018610\nsub     rdi, rdx                                                       ; +0xe8, 0x180018618\nlea     rsi, [r15+r14]                                                 ; +0xeb, 0x18001861b\nadd     rdi, rax                                                       ; +0xef, 0x18001861f\nmov     rcx, rsi; void *                                               ; +0xf2, 0x180018622\nmov     r8, rdi; Size                                                  ; +0xf5, 0x180018625\ncall    memmove                                                        ; +0xf8, 0x180018628\nmov     rdx, [rbp+8]; Src                                              ; +0xfd, 0x18001862d\nadd     rdi, rsi                                                       ; +0x101, 0x180018631\nmov     rcx, rdi; void *                                               ; +0x104, 0x180018634\ncmp     r12, rbx                                                       ; +0x107, 0x180018637\nja      short loc_180018661                                            ; +0x10a, 0x18001863a\nmov     r8, r15; Size                                                  ; +0x10c, 0x18001863c\ncall    memmove                                                        ; +0x10f, 0x18001863f\nmov     r8, rbx                                                        ; +0x114, 0x180018644\nlea     rcx, [r15+rdi]; void *                                         ; +0x117, 0x180018647\nsub     r8, r12                                                        ; +0x11b, 0x18001864b\nxor     edx, edx; Val                                                  ; +0x11e, 0x18001864e\nshl     r8, 3; Size                                                    ; +0x120, 0x180018650\ncall    memset                                                         ; +0x124, 0x180018654\nmov     r8, r15                                                        ; +0x129, 0x180018659\nmov     rcx, r14                                                       ; +0x12c, 0x18001865c\njmp     short loc_180018691                                            ; +0x12f, 0x18001865f\nlea     rsi, ds:0[rbx*8]                                               ; +0x131, 0x180018661\nmov     r8, rsi; Size                                                  ; +0x139, 0x180018669\ncall    memmove                                                        ; +0x13c, 0x18001866c\nmov     rdi, [rbp+8]                                                   ; +0x141, 0x180018671\nmov     rcx, r14; void *                                               ; +0x145, 0x180018675\nlea     rdx, [rsi+rdi]; Src                                            ; +0x148, 0x180018678\nsub     rdi, rdx                                                       ; +0x14c, 0x18001867c\nadd     rdi, r15                                                       ; +0x14f, 0x18001867f\nmov     r8, rdi; Size                                                  ; +0x152, 0x180018682\ncall    memmove                                                        ; +0x155, 0x180018685\nlea     rcx, [rdi+r14]; void *                                         ; +0x15a, 0x18001868a\nmov     r8, rsi; Size                                                  ; +0x15e, 0x18001868e\nxor     edx, edx; Val                                                  ; +0x161, 0x180018691\ncall    memset                                                         ; +0x163, 0x180018693\nmov     rcx, [rbp+8]                                                   ; +0x168, 0x180018698\nmov     r15, [rsp+38h+var_18]                                          ; +0x16c, 0x18001869c\nmov     rdi, [rsp+38h+arg_8]                                           ; +0x171, 0x1800186a1\nmov     rsi, [rsp+38h+arg_0]                                           ; +0x176, 0x1800186a6\ntest    rcx, rcx                                                       ; +0x17b, 0x1800186ab\njz      short loc_1800186DE                                            ; +0x17e, 0x1800186ae\nmov     rdx, [rbp+10h]                                                 ; +0x180, 0x1800186b0\nshl     rdx, 3                                                         ; +0x184, 0x1800186b4\ncmp     rdx, 1000h                                                     ; +0x188, 0x1800186b8\njb      short loc_1800186D9                                            ; +0x18f, 0x1800186bf\nmov     r8, [rcx-8]                                                    ; +0x191, 0x1800186c1\nadd     rdx, 27h ; '''                                                 ; +0x195, 0x1800186c5\nsub     rcx, r8                                                        ; +0x199, 0x1800186c9\nlea     rax, [rcx-8]                                                   ; +0x19c, 0x1800186cc\ncmp     rax, 1Fh                                                       ; +0x1a0, 0x1800186d0\nja      short loc_1800186F7                                            ; +0x1a4, 0x1800186d4\nmov     rcx, r8; Block                                                 ; +0x1a6, 0x1800186d6\ncall    j_j_free                                                       ; +0x1a9, 0x1800186d9\nadd     [rbp+10h], rbx                                                 ; +0x1ae, 0x1800186de\nmov     r12, [rsp+38h+arg_10]                                          ; +0x1b2, 0x1800186e2\nmov     [rbp+8], r14                                                   ; +0x1b7, 0x1800186e7\nmov     r14, [rsp+38h+arg_18]                                          ; +0x1bb, 0x1800186eb\nadd     rsp, 28h                                                       ; +0x1c0, 0x1800186f0\npop     rbp                                                            ; +0x1c4, 0x1800186f4\npop     rbx                                                            ; +0x1c5, 0x1800186f5\nretn                                                                   ; +0x1c6, 0x1800186f6\ncall    cs:_invalid_parameter_noinfo_noreturn                          ; +0x1c7, 0x1800186f7\nalign 2                                                                ; +0x1cd, 0x1800186fd\ncall    ?cancel_current_task@Concurrency@@YAXXZ; Concurrency::cancel_current_task(void) ; +0x1ce, 0x1800186fe\nalign 4                                                                ; +0x1d3, 0x180018703\ncall    sub_180018710                                                  ; +0x1d4, 0x180018704\ndb 0CCh                                                                ; +0x1d9, 0x180018709", "xrefs": ["cocos2d::extension::CCHttpClient::send @ 0x180017ad7", "<???> @ 0x18002f29c", "<???> @ 0x18002f2e0", "<???> @ 0x18002f2f0", "<???> @ 0x18004aaf4"], "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"}