{"type": "func", "start": 6442546320, "end": 6442546524, "name": "sub_180017490", "pseudocode": "// \n// sub_180017490 from 0x180017490 to 0x18001755c (204 bytes)\n// \n// 3 xrefs:\n// > cocos2d::extension::CCHttpClient::~CCHttpClient @ 0x18001772b\n// > cocos2d::extension::CCHttpClient::~CCHttpClient @ 0x18001773c\n// > <???> @ 0x18004aa40\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\nint __fastcall sub_180017490(__int64 a1)\n{\n  int result; // eax\n  _Thrd_t *v3; // rbx\n  _Thrd_t *i; // rdi\n  _Thrd_t v5; // [rsp+20h] [rbp-18h] BYREF\n\n  if ( Mtx_lock((_Mtx_t)(a1 + 64)) )\n  {\nLABEL_12:\n    std::_Throw_Cpp_error(5);\n    JUMPOUT(0x18001755BLL);\n  }\n  if ( *(_DWORD *)(a1 + 140) == 0x7FFFFFFF )\n  {\n    *(_DWORD *)(a1 + 140) = 2147483646;\n    std::_Throw_Cpp_error(6);\n    __debugbreak();\n  }\n  *(_BYTE *)(a1 + 216) = 1;\n  Mtx_unlock((_Mtx_t)(a1 + 64));\n  result = Cnd_broadcast((_Cnd_t)(a1 + 144));\n  v3 = *(_Thrd_t **)a1;\n  for ( i = *(_Thrd_t **)(a1 + 8); v3 != i; ++v3 )\n  {\n    if ( v3->_Id )\n    {\n      if ( v3->_Id == Thrd_id() )\n        goto LABEL_12;\n      v5 = *v3;\n      result = Thrd_join(&v5, nullptr);\n      if ( result )\n      {\n        std::_Throw_Cpp_error(2);\n        __debugbreak();\n      }\n      *v3 = 0;\n    }\n  }\n  return result;\n}", "assembly": "; \n; sub_180017490 from 0x180017490 to 0x18001755c (204 bytes)\n; \n; 3 xrefs:\n; > cocos2d::extension::CCHttpClient::~CCHttpClient @ 0x18001772b\n; > cocos2d::extension::CCHttpClient::~CCHttpClient @ 0x18001773c\n; > <???> @ 0x18004aa40\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, 0x180017490\npush    rdi                                                            ; +0x5, 0x180017495\nsub     rsp, 30h                                                       ; +0x6, 0x180017496\nmov     rdi, rcx                                                       ; +0xa, 0x18001749a\nadd     rcx, 40h ; '@'; _Mtx_t                                         ; +0xd, 0x18001749d\ncall    cs:_Mtx_lock                                                   ; +0x11, 0x1800174a1\ntest    eax, eax                                                       ; +0x17, 0x1800174a7\njnz     loc_180017550                                                  ; +0x19, 0x1800174a9\nmov     eax, [rdi+8Ch]                                                 ; +0x1f, 0x1800174af\ncmp     eax, 7FFFFFFFh                                                 ; +0x25, 0x1800174b5\njnz     short loc_1800174D0                                            ; +0x2a, 0x1800174ba\ndec     eax                                                            ; +0x2c, 0x1800174bc\nmov     ecx, 6                                                         ; +0x2e, 0x1800174be\nmov     [rdi+8Ch], eax                                                 ; +0x33, 0x1800174c3\ncall    cs:?_Throw_Cpp_error@std@@YAXH@Z; std::_Throw_Cpp_error(int)   ; +0x39, 0x1800174c9\nint     3; Trap to Debugger                                            ; +0x3f, 0x1800174cf\nlea     rcx, [rdi+40h]; _Mtx_t                                         ; +0x40, 0x1800174d0\nmov     byte ptr [rdi+0D8h], 1                                         ; +0x44, 0x1800174d4\ncall    cs:_Mtx_unlock                                                 ; +0x4b, 0x1800174db\nlea     rcx, [rdi+90h]; _Cnd_t                                         ; +0x51, 0x1800174e1\ncall    cs:_Cnd_broadcast                                              ; +0x58, 0x1800174e8\nmov     rbx, [rdi]                                                     ; +0x5e, 0x1800174ee\nmov     rdi, [rdi+8]                                                   ; +0x61, 0x1800174f1\ncmp     rbx, rdi                                                       ; +0x65, 0x1800174f5\njz      short loc_180017539                                            ; +0x68, 0x1800174f8\nnop     word ptr [rax+rax+00h]                                         ; +0x6a, 0x1800174fa\ncmp     dword ptr [rbx+8], 0                                           ; +0x70, 0x180017500\njz      short loc_180017530                                            ; +0x74, 0x180017504\ncall    cs:_Thrd_id                                                    ; +0x76, 0x180017506\ncmp     [rbx+8], eax                                                   ; +0x7c, 0x18001750c\njz      short loc_180017550                                            ; +0x7f, 0x18001750f\nmovups  xmm0, xmmword ptr [rbx]                                        ; +0x81, 0x180017511\nxor     edx, edx; int *                                                ; +0x84, 0x180017514\nlea     rcx, [rsp+38h+var_18]; _Thrd_t                                 ; +0x86, 0x180017516\nmovaps  xmmword ptr [rsp+38h+var_18._Hnd], xmm0                        ; +0x8b, 0x18001751b\ncall    cs:_Thrd_join                                                  ; +0x90, 0x180017520\ntest    eax, eax                                                       ; +0x96, 0x180017526\njnz     short loc_180017544                                            ; +0x98, 0x180017528\nxorps   xmm0, xmm0                                                     ; +0x9a, 0x18001752a\nmovups  xmmword ptr [rbx], xmm0                                        ; +0x9d, 0x18001752d\nadd     rbx, 10h                                                       ; +0xa0, 0x180017530\ncmp     rbx, rdi                                                       ; +0xa4, 0x180017534\njnz     short loc_180017500                                            ; +0xa7, 0x180017537\nmov     rbx, [rsp+38h+arg_0]                                           ; +0xa9, 0x180017539\nadd     rsp, 30h                                                       ; +0xae, 0x18001753e\npop     rdi                                                            ; +0xb2, 0x180017542\nretn                                                                   ; +0xb3, 0x180017543\nmov     ecx, 2                                                         ; +0xb4, 0x180017544\ncall    cs:?_Throw_Cpp_error@std@@YAXH@Z; std::_Throw_Cpp_error(int)   ; +0xb9, 0x180017549\nint     3; Trap to Debugger                                            ; +0xbf, 0x18001754f\nmov     ecx, 5                                                         ; +0xc0, 0x180017550\ncall    cs:?_Throw_Cpp_error@std@@YAXH@Z; std::_Throw_Cpp_error(int)   ; +0xc5, 0x180017555\ndb 0CCh                                                                ; +0xcb, 0x18001755b", "xrefs": ["cocos2d::extension::CCHttpClient::~CCHttpClient @ 0x18001772b", "cocos2d::extension::CCHttpClient::~CCHttpClient @ 0x18001773c", "<???> @ 0x18004aa40"], "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"}