{"type": "func", "start": 6442550032, "end": 6442550293, "name": "sub_180018310", "pseudocode": "// \n// sub_180018310 from 0x180018310 to 0x180018415 (261 bytes)\n// \n// 3 xrefs:\n// > sub_180017450 @ 0x180017450\n// > cocos2d::extension::CCHttpClient::~CCHttpClient @ 0x18001775c\n// > <???> @ 0x18004aac4\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_180018310(__int64 a1, __int64 a2)\n{\n  __int64 v3; // rcx\n  __int64 v4; // rdi\n  __int64 v5; // rcx\n  _QWORD *v6; // rsi\n  __int64 v7; // rdi\n  void *v8; // rcx\n  _QWORD *v9; // rcx\n  void *v10; // rcx\n\n  v3 = *(_QWORD *)(a1 + 32);\n  if ( v3 )\n  {\n    do\n    {\n      v4 = *(_QWORD *)(*(_QWORD *)(a1 + 8) + 8 * ((*(_QWORD *)(a1 + 16) - 1LL) & (*(_QWORD *)(a1 + 24) - 1LL + v3)));\n      v5 = *(_QWORD *)(v4 + 56);\n      if ( v5 )\n      {\n        LOBYTE(a2) = v5 != v4;\n        (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)v5 + 32LL))(v5, a2);\n        *(_QWORD *)(v4 + 56) = 0;\n      }\n      v3 = *(_QWORD *)(a1 + 32) - 1LL;\n      *(_QWORD *)(a1 + 32) = v3;\n    }\n    while ( v3 );\n    *(_QWORD *)(a1 + 24) = 0;\n  }\n  v6 = (_QWORD *)(a1 + 8);\n  if ( *(_QWORD *)(a1 + 8) )\n  {\n    v7 = *(_QWORD *)(a1 + 16);\n    if ( v7 )\n    {\n      do\n      {\n        --v7;\n        v8 = *(void **)(*v6 + 8 * v7);\n        if ( v8 )\n          j_j_free(v8);\n      }\n      while ( v7 );\n      v6 = (_QWORD *)(a1 + 8);\n    }\n    v9 = (_QWORD *)*v6;\n    if ( (unsigned __int64)(8LL * *(_QWORD *)(a1 + 16)) >= 0x1000 )\n    {\n      if ( (unsigned __int64)v9 - *(v9 - 1) - 8 > 0x1F )\n        invalid_parameter_noinfo_noreturn();\n      v9 = (_QWORD *)*(v9 - 1);\n    }\n    j_j_free(v9);\n  }\n  v10 = *(void **)a1;\n  *(_QWORD *)a1 = 0;\n  *(_QWORD *)(a1 + 16) = 0;\n  *v6 = 0;\n  j_j_free(v10);\n}", "assembly": "; \n; sub_180018310 from 0x180018310 to 0x180018415 (261 bytes)\n; \n; 3 xrefs:\n; > sub_180017450 @ 0x180017450\n; > cocos2d::extension::CCHttpClient::~CCHttpClient @ 0x18001775c\n; > <???> @ 0x18004aac4\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, 0x180018310\nmov     [rsp+arg_8], rbp                                               ; +0x5, 0x180018315\nmov     [rsp+arg_10], rsi                                              ; +0xa, 0x18001831a\npush    rdi                                                            ; +0xf, 0x18001831f\nsub     rsp, 20h                                                       ; +0x10, 0x180018320\nmov     rbx, rcx                                                       ; +0x14, 0x180018324\nxor     ebp, ebp                                                       ; +0x17, 0x180018327\nmov     rcx, [rcx+20h]                                                 ; +0x19, 0x180018329\ntest    rcx, rcx                                                       ; +0x1d, 0x18001832d\njz      short loc_180018379                                            ; +0x20, 0x180018330\nmov     rax, [rbx+18h]                                                 ; +0x22, 0x180018332\ndec     rax                                                            ; +0x26, 0x180018336\nadd     rcx, rax                                                       ; +0x29, 0x180018339\nmov     rax, [rbx+10h]                                                 ; +0x2c, 0x18001833c\ndec     rax                                                            ; +0x30, 0x180018340\nand     rcx, rax                                                       ; +0x33, 0x180018343\nmov     rax, [rbx+8]                                                   ; +0x36, 0x180018346\nmov     rdi, [rax+rcx*8]                                               ; +0x3a, 0x18001834a\nmov     rcx, [rdi+38h]                                                 ; +0x3e, 0x18001834e\ntest    rcx, rcx                                                       ; +0x42, 0x180018352\njz      short loc_180018367                                            ; +0x45, 0x180018355\nmov     rax, [rcx]                                                     ; +0x47, 0x180018357\ncmp     rcx, rdi                                                       ; +0x4a, 0x18001835a\nsetnz   dl                                                             ; +0x4d, 0x18001835d\ncall    qword ptr [rax+20h]                                            ; +0x50, 0x180018360\nmov     [rdi+38h], rbp                                                 ; +0x53, 0x180018363\nmov     rcx, [rbx+20h]                                                 ; +0x57, 0x180018367\nsub     rcx, 1                                                         ; +0x5b, 0x18001836b\nmov     [rbx+20h], rcx                                                 ; +0x5f, 0x18001836f\njnz     short loc_180018332                                            ; +0x63, 0x180018373\nmov     [rbx+18h], rbp                                                 ; +0x65, 0x180018375\ncmp     [rbx+8], rbp                                                   ; +0x69, 0x180018379\nlea     rsi, [rbx+8]                                                   ; +0x6d, 0x18001837d\njz      short loc_1800183E3                                            ; +0x71, 0x180018381\nmov     rdi, [rbx+10h]                                                 ; +0x73, 0x180018383\ntest    rdi, rdi                                                       ; +0x77, 0x180018387\njz      short loc_1800183B2                                            ; +0x7a, 0x18001838a\nnop     dword ptr [rax+00h]                                            ; +0x7c, 0x18001838c\nmov     rax, [rsi]                                                     ; +0x80, 0x180018390\ndec     rdi                                                            ; +0x83, 0x180018393\nmov     rcx, [rax+rdi*8]; Block                                        ; +0x86, 0x180018396\ntest    rcx, rcx                                                       ; +0x8a, 0x18001839a\njz      short loc_1800183A9                                            ; +0x8d, 0x18001839d\nmov     edx, 40h ; '@'                                                 ; +0x8f, 0x18001839f\ncall    j_j_free                                                       ; +0x94, 0x1800183a4\ntest    rdi, rdi                                                       ; +0x99, 0x1800183a9\njnz     short loc_180018390                                            ; +0x9c, 0x1800183ac\nlea     rsi, [rbx+8]                                                   ; +0x9e, 0x1800183ae\nmov     rdx, [rbx+10h]                                                 ; +0xa2, 0x1800183b2\nmov     rcx, [rsi]                                                     ; +0xa6, 0x1800183b6\nshl     rdx, 3                                                         ; +0xa9, 0x1800183b9\ncmp     rdx, 1000h                                                     ; +0xad, 0x1800183bd\njb      short loc_1800183DE                                            ; +0xb4, 0x1800183c4\nmov     r8, [rcx-8]                                                    ; +0xb6, 0x1800183c6\nadd     rdx, 27h ; '''                                                 ; +0xba, 0x1800183ca\nsub     rcx, r8                                                        ; +0xbe, 0x1800183ce\nlea     rax, [rcx-8]                                                   ; +0xc1, 0x1800183d1\ncmp     rax, 1Fh                                                       ; +0xc5, 0x1800183d5\nja      short loc_18001840E                                            ; +0xc9, 0x1800183d9\nmov     rcx, r8; Block                                                 ; +0xcb, 0x1800183db\ncall    j_j_free                                                       ; +0xce, 0x1800183de\nmov     rcx, [rbx]; Block                                              ; +0xd3, 0x1800183e3\nmov     edx, 10h                                                       ; +0xd6, 0x1800183e6\nmov     [rbx], rbp                                                     ; +0xdb, 0x1800183eb\nmov     [rbx+10h], rbp                                                 ; +0xde, 0x1800183ee\nmov     [rsi], rbp                                                     ; +0xe2, 0x1800183f2\nmov     rbx, [rsp+28h+arg_0]                                           ; +0xe5, 0x1800183f5\nmov     rbp, [rsp+28h+arg_8]                                           ; +0xea, 0x1800183fa\nmov     rsi, [rsp+28h+arg_10]                                          ; +0xef, 0x1800183ff\nadd     rsp, 20h                                                       ; +0xf4, 0x180018404\npop     rdi                                                            ; +0xf8, 0x180018408\njmp     j_j_free                                                       ; +0xf9, 0x180018409\ncall    cs:_invalid_parameter_noinfo_noreturn                          ; +0xfe, 0x18001840e\ndb 0CCh                                                                ; +0x104, 0x180018414", "xrefs": ["sub_180017450 @ 0x180017450", "cocos2d::extension::CCHttpClient::~CCHttpClient @ 0x18001775c", "<???> @ 0x18004aac4"], "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"}