{"type": "func", "start": 6442552688, "end": 6442552994, "name": "sub_180018D70", "pseudocode": "// \n// sub_180018D70 from 0x180018d70 to 0x180018ea2 (306 bytes)\n// \n// 8 xrefs:\n// > sub_180017BA0 @ 0x18001805e\n// > sub_180017BA0 @ 0x180018075\n// > cocos2d::extension::CCHttpResponse::setResponseData @ 0x180018ce4\n// > cocos2d::extension::CCHttpResponse::setResponseHeader @ 0x180018eb4\n// > cocos2d::extension::CCHttpRequest::operator= @ 0x18001d567\n// > cocos2d::extension::CCHttpResponse::operator= @ 0x18001d80d\n// > cocos2d::extension::CCHttpResponse::operator= @ 0x18001d81a\n// > <???> @ 0x18004ab9c\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__int64 __fastcall sub_180018D70(__int64 a1, char **a2)\n{\n  char *v3; // r14\n  size_t v4; // rsi\n  _QWORD *v5; // rbx\n  unsigned __int64 v6; // rdx\n  size_t v7; // rbp\n  unsigned __int64 v8; // rcx\n  char *v9; // rax\n  unsigned __int64 v11; // rbp\n  char *v12; // rbx\n  size_t v13; // rsi\n\n  if ( (char **)a1 != a2 )\n  {\n    v3 = *a2;\n    v4 = a2[1] - *a2;\n    v5 = *(_QWORD **)a1;\n    v6 = *(_QWORD *)(a1 + 16) - *(_QWORD *)a1;\n    if ( v4 <= v6 )\n    {\n      v11 = *(_QWORD *)(a1 + 8) - (_QWORD)v5;\n      if ( v4 > v11 )\n      {\n        memmove(*(void **)a1, v3, *(_QWORD *)(a1 + 8) - (_QWORD)v5);\n        v12 = *(char **)(a1 + 8);\n        v13 = v4 - v11;\n        memmove(v12, &v3[v11], v13);\n        v9 = &v12[v13];\n        goto LABEL_14;\n      }\n    }\n    else\n    {\n      v7 = 0x7FFFFFFFFFFFFFFFLL;\n      if ( v4 > 0x7FFFFFFFFFFFFFFFLL )\n        sub_180003530();\n      v8 = v6 >> 1;\n      if ( v6 <= 0x7FFFFFFFFFFFFFFFLL - (v6 >> 1) )\n      {\n        v7 = v8 + v6;\n        if ( v8 + v6 < v4 )\n          v7 = v4;\n      }\n      if ( v5 )\n      {\n        if ( v6 >= 0x1000 )\n        {\n          if ( (unsigned __int64)v5 - *(v5 - 1) - 8 > 0x1F )\n            invalid_parameter_noinfo_noreturn();\n          v5 = (_QWORD *)*(v5 - 1);\n        }\n        j_j_free(v5);\n        *(_QWORD *)a1 = 0;\n        *(_QWORD *)(a1 + 8) = 0;\n        *(_QWORD *)(a1 + 16) = 0;\n      }\n      sub_180018CF0((_QWORD *)a1, v7);\n      v5 = *(_QWORD **)a1;\n    }\n    memmove(v5, v3, v4);\n    v9 = (char *)v5 + v4;\nLABEL_14:\n    *(_QWORD *)(a1 + 8) = v9;\n  }\n  return a1;\n}", "assembly": "; \n; sub_180018D70 from 0x180018d70 to 0x180018ea2 (306 bytes)\n; \n; 8 xrefs:\n; > sub_180017BA0 @ 0x18001805e\n; > sub_180017BA0 @ 0x180018075\n; > cocos2d::extension::CCHttpResponse::setResponseData @ 0x180018ce4\n; > cocos2d::extension::CCHttpResponse::setResponseHeader @ 0x180018eb4\n; > cocos2d::extension::CCHttpRequest::operator= @ 0x18001d567\n; > cocos2d::extension::CCHttpResponse::operator= @ 0x18001d80d\n; > cocos2d::extension::CCHttpResponse::operator= @ 0x18001d81a\n; > <???> @ 0x18004ab9c\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_0], rbx                                               ; +0x0, 0x180018d70\nmov     [rsp+arg_8], rbp                                               ; +0x5, 0x180018d75\nmov     [rsp+arg_10], rsi                                              ; +0xa, 0x180018d7a\nmov     [rsp+arg_18], rdi                                              ; +0xf, 0x180018d7f\npush    r14                                                            ; +0x14, 0x180018d84\nsub     rsp, 20h                                                       ; +0x16, 0x180018d86\nmov     rdi, rcx                                                       ; +0x1a, 0x180018d8a\ncmp     rcx, rdx                                                       ; +0x1d, 0x180018d8d\njz      loc_180018E41                                                  ; +0x20, 0x180018d90\nmov     r14, [rdx]                                                     ; +0x26, 0x180018d96\nmov     rsi, [rdx+8]                                                   ; +0x29, 0x180018d99\nmov     rdx, [rcx+10h]                                                 ; +0x2d, 0x180018d9d\nsub     rsi, r14                                                       ; +0x31, 0x180018da1\nmov     rbx, [rcx]                                                     ; +0x34, 0x180018da4\nsub     rdx, rbx                                                       ; +0x37, 0x180018da7\ncmp     rsi, rdx                                                       ; +0x3a, 0x180018daa\njbe     loc_180018E66                                                  ; +0x3d, 0x180018dad\nmov     rbp, 7FFFFFFFFFFFFFFFh                                         ; +0x43, 0x180018db3\ncmp     rsi, rbp                                                       ; +0x4d, 0x180018dbd\nja      loc_180018E9C                                                  ; +0x50, 0x180018dc0\nmov     rcx, rdx                                                       ; +0x56, 0x180018dc6\nmov     rax, rbp                                                       ; +0x59, 0x180018dc9\nshr     rcx, 1                                                         ; +0x5c, 0x180018dcc\nsub     rax, rcx                                                       ; +0x5f, 0x180018dcf\ncmp     rdx, rax                                                       ; +0x62, 0x180018dd2\nja      short loc_180018DE2                                            ; +0x65, 0x180018dd5\nlea     rbp, [rcx+rdx]                                                 ; +0x67, 0x180018dd7\ncmp     rbp, rsi                                                       ; +0x6b, 0x180018ddb\ncmovb   rbp, rsi                                                       ; +0x6e, 0x180018dde\ntest    rbx, rbx                                                       ; +0x72, 0x180018de2\njz      short loc_180018E1D                                            ; +0x75, 0x180018de5\ncmp     rdx, 1000h                                                     ; +0x77, 0x180018de7\njb      short loc_180018E08                                            ; +0x7e, 0x180018dee\nmov     rcx, [rbx-8]                                                   ; +0x80, 0x180018df0\nadd     rdx, 27h ; '''                                                 ; +0x84, 0x180018df4\nsub     rbx, rcx                                                       ; +0x88, 0x180018df8\nlea     rax, [rbx-8]                                                   ; +0x8b, 0x180018dfb\ncmp     rax, 1Fh                                                       ; +0x8f, 0x180018dff\nja      short loc_180018E5F                                            ; +0x93, 0x180018e03\nmov     rbx, rcx                                                       ; +0x95, 0x180018e05\nmov     rcx, rbx; Block                                                ; +0x98, 0x180018e08\ncall    j_j_free                                                       ; +0x9b, 0x180018e0b\nxor     eax, eax                                                       ; +0xa0, 0x180018e10\nmov     [rdi], rax                                                     ; +0xa2, 0x180018e12\nmov     [rdi+8], rax                                                   ; +0xa5, 0x180018e15\nmov     [rdi+10h], rax                                                 ; +0xa9, 0x180018e19\nmov     rdx, rbp                                                       ; +0xad, 0x180018e1d\nmov     rcx, rdi                                                       ; +0xb0, 0x180018e20\ncall    sub_180018CF0                                                  ; +0xb3, 0x180018e23\nmov     rbx, [rdi]                                                     ; +0xb8, 0x180018e28\nmov     r8, rsi; Size                                                  ; +0xbb, 0x180018e2b\nmov     rdx, r14; Src                                                  ; +0xbe, 0x180018e2e\nmov     rcx, rbx; void *                                               ; +0xc1, 0x180018e31\ncall    memmove                                                        ; +0xc4, 0x180018e34\nlea     rax, [rbx+rsi]                                                 ; +0xc9, 0x180018e39\nmov     [rdi+8], rax                                                   ; +0xcd, 0x180018e3d\nmov     rbx, [rsp+28h+arg_0]                                           ; +0xd1, 0x180018e41\nmov     rax, rdi                                                       ; +0xd6, 0x180018e46\nmov     rdi, [rsp+28h+arg_18]                                          ; +0xd9, 0x180018e49\nmov     rbp, [rsp+28h+arg_8]                                           ; +0xde, 0x180018e4e\nmov     rsi, [rsp+28h+arg_10]                                          ; +0xe3, 0x180018e53\nadd     rsp, 20h                                                       ; +0xe8, 0x180018e58\npop     r14                                                            ; +0xec, 0x180018e5c\nretn                                                                   ; +0xee, 0x180018e5e\ncall    cs:_invalid_parameter_noinfo_noreturn                          ; +0xef, 0x180018e5f\nalign 2                                                                ; +0xf5, 0x180018e65\nmov     rbp, [rcx+8]                                                   ; +0xf6, 0x180018e66\nsub     rbp, rbx                                                       ; +0xfa, 0x180018e6a\ncmp     rsi, rbp                                                       ; +0xfd, 0x180018e6d\njbe     short loc_180018E2B                                            ; +0x100, 0x180018e70\nmov     r8, rbp; Size                                                  ; +0x102, 0x180018e72\nmov     rdx, r14; Src                                                  ; +0x105, 0x180018e75\nmov     rcx, rbx; void *                                               ; +0x108, 0x180018e78\ncall    memmove                                                        ; +0x10b, 0x180018e7b\nmov     rbx, [rdi+8]                                                   ; +0x110, 0x180018e80\nlea     rdx, [r14+rbp]; Src                                            ; +0x114, 0x180018e84\nsub     rsi, rbp                                                       ; +0x118, 0x180018e88\nmov     rcx, rbx; void *                                               ; +0x11b, 0x180018e8b\nmov     r8, rsi; Size                                                  ; +0x11e, 0x180018e8e\ncall    memmove                                                        ; +0x121, 0x180018e91\nlea     rax, [rsi+rbx]                                                 ; +0x126, 0x180018e96\njmp     short loc_180018E3D                                            ; +0x12a, 0x180018e9a\ncall    sub_180003530                                                  ; +0x12c, 0x180018e9c\ndb 0CCh                                                                ; +0x131, 0x180018ea1", "xrefs": ["sub_180017BA0 @ 0x18001805e", "sub_180017BA0 @ 0x180018075", "cocos2d::extension::CCHttpResponse::setResponseData @ 0x180018ce4", "cocos2d::extension::CCHttpResponse::setResponseHeader @ 0x180018eb4", "cocos2d::extension::CCHttpRequest::operator= @ 0x18001d567", "cocos2d::extension::CCHttpResponse::operator= @ 0x18001d80d", "cocos2d::extension::CCHttpResponse::operator= @ 0x18001d81a", "<???> @ 0x18004ab9c"], "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"}