{"type": "func", "start": 6442460432, "end": 6442461220, "name": "cocos2d::extension::AssetsManager::downLoad", "pseudocode": "// \n// cocos2d::extension::AssetsManager::downLoad from 0x180002510 to 0x180002824 (788 bytes)\n// \n// 3 xrefs:\n// > sub_180001B60 @ 0x180001baf\n// > <???> @ 0x18002fdf8\n// > <???> @ 0x180049144\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\n__int64 __fastcall cocos2d::extension::AssetsManager::downLoad(cocos2d::extension::AssetsManager *this)\n{\n  _QWORD *v2; // r14\n  size_t v3; // rbp\n  size_t v4; // r15\n  unsigned __int64 v5; // rbx\n  char *v6; // rdi\n  size_t v7; // rax\n  void *v8; // rax\n  const char *v9; // rcx\n  FILE *v10; // rdi\n  _QWORD *v11; // rax\n  unsigned __int8 v12; // bl\n  int v13; // ebx\n  _QWORD *v14; // rax\n  char *v15; // rcx\n  _QWORD *v17; // [rsp+20h] [rbp-58h]\n  _QWORD *v18; // [rsp+20h] [rbp-58h]\n  char *FileName[2]; // [rsp+28h] [rbp-50h] BYREF\n  size_t v20; // [rsp+38h] [rbp-40h]\n  unsigned __int64 v21; // [rsp+40h] [rbp-38h]\n\n  v2 = (_QWORD *)((char *)this + 8);\n  v3 = *((_QWORD *)this + 3);\n  if ( 0x7FFFFFFFFFFFFFFFLL - v3 < 0x20 )\n    sub_180003D90();\n  if ( *((_QWORD *)this + 4) > 0xFu )\n    v2 = (_QWORD *)*v2;\n  *(_OWORD *)FileName = 0;\n  v20 = 0;\n  v21 = 0;\n  v4 = v3 + 32;\n  v5 = 15;\n  v6 = (char *)FileName;\n  if ( v3 + 32 > 0xF )\n  {\n    v5 = v4 | 0xF;\n    if ( (v4 | 0xF) <= 0x7FFFFFFFFFFFFFFFLL )\n    {\n      if ( v5 < 0x16 )\n        v5 = 22;\n      if ( v5 + 1 < 0x1000 )\n      {\n        if ( v5 == -1 )\n          v6 = nullptr;\n        else\n          v6 = (char *)operator new(v5 + 1);\nLABEL_17:\n        FileName[0] = v6;\n        goto LABEL_18;\n      }\n      v7 = v5 + 40;\n      if ( v5 + 40 < v5 + 1 )\n        Concurrency::cancel_current_task();\n    }\n    else\n    {\n      v5 = 0x7FFFFFFFFFFFFFFFLL;\n      v7 = 0x8000000000000027uLL;\n    }\n    v8 = operator new(v7);\n    if ( !v8 )\n      goto LABEL_28;\n    v6 = (char *)(((unsigned __int64)v8 + 39) & 0xFFFFFFFFFFFFFFE0uLL);\n    *((_QWORD *)v6 - 1) = v8;\n    goto LABEL_17;\n  }\nLABEL_18:\n  v20 = v3 + 32;\n  v21 = v5;\n  memcpy(v6, v2, v3);\n  qmemcpy(&v6[v3], \"cocos2dx-update-temp-package.zip\", 32);\n  v6[v4] = 0;\n  v9 = (const char *)FileName;\n  if ( v21 > 0xF )\n    v9 = FileName[0];\n  v10 = fopen(v9, \"wb\");\n  if ( v10 )\n  {\n    curl_easy_setopt(*((_QWORD *)this + 21), 10002);\n    curl_easy_setopt(*((_QWORD *)this + 21), 20011);\n    curl_easy_setopt(*((_QWORD *)this + 21), 10001);\n    curl_easy_setopt(*((_QWORD *)this + 21), 43);\n    curl_easy_setopt(*((_QWORD *)this + 21), 20056);\n    curl_easy_setopt(*((_QWORD *)this + 21), 10057);\n    v13 = curl_easy_perform(*((_QWORD *)this + 21));\n    curl_easy_cleanup(*((_QWORD *)this + 21));\n    if ( v13 )\n    {\n      v18 = operator new(0x10u);\n      v18[1] = 0;\n      *(_DWORD *)v18 = 3;\n      v14 = operator new(0x10u);\n      *v14 = 1;\n      v14[1] = this;\n      v18[1] = v14;\n      sub_180002B70(*((_QWORD *)this + 22), v18);\n      fclose(v10);\n      v12 = 0;\n    }\n    else\n    {\n      fclose(v10);\n      v12 = 1;\n    }\n  }\n  else\n  {\n    v17 = operator new(0x10u);\n    v17[1] = 0;\n    *(_DWORD *)v17 = 3;\n    v11 = operator new(0x10u);\n    *v11 = 0;\n    v11[1] = this;\n    v17[1] = v11;\n    sub_180002B70(*((_QWORD *)this + 22), v17);\n    v12 = 0;\n  }\n  if ( v21 > 0xF )\n  {\n    v15 = FileName[0];\n    if ( v21 + 1 >= 0x1000 )\n    {\n      v15 = *((char **)FileName[0] - 1);\n      if ( (unsigned __int64)(FileName[0] - v15 - 8) > 0x1F )\nLABEL_28:\n        invalid_parameter_noinfo_noreturn();\n    }\n    j_j_free(v15);\n  }\n  return v12;\n}", "assembly": "; \n; cocos2d::extension::AssetsManager::downLoad from 0x180002510 to 0x180002824 (788 bytes)\n; \n; 3 xrefs:\n; > sub_180001B60 @ 0x180001baf\n; > <???> @ 0x18002fdf8\n; > <???> @ 0x180049144\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_8], rbx                                               ; +0x0, 0x180002510\nmov     [rsp+arg_10], rbp                                              ; +0x5, 0x180002515\npush    rsi                                                            ; +0xa, 0x18000251a\npush    rdi                                                            ; +0xb, 0x18000251b\npush    r12                                                            ; +0xc, 0x18000251c\npush    r14                                                            ; +0xe, 0x18000251e\npush    r15                                                            ; +0x10, 0x180002520\nsub     rsp, 50h                                                       ; +0x12, 0x180002522\nmov     rax, cs:__security_cookie                                      ; +0x16, 0x180002526\nxor     rax, rsp                                                       ; +0x1d, 0x18000252d\nmov     [rsp+78h+var_30], rax                                          ; +0x20, 0x180002530\nmov     rsi, rcx                                                       ; +0x25, 0x180002535\nxor     r12d, r12d                                                     ; +0x28, 0x180002538\nlea     r14, [rcx+8]                                                   ; +0x2b, 0x18000253b\nmov     rbp, [r14+10h]                                                 ; +0x2f, 0x18000253f\nmov     rcx, 7FFFFFFFFFFFFFFFh                                         ; +0x33, 0x180002543\nmov     rax, rcx                                                       ; +0x3d, 0x18000254d\nsub     rax, rbp                                                       ; +0x40, 0x180002550\ncmp     rax, 20h ; ' '                                                 ; +0x43, 0x180002553\njb      loc_180002818                                                  ; +0x47, 0x180002557\ncmp     qword ptr [r14+18h], 0Fh                                       ; +0x4d, 0x18000255d\njbe     short loc_180002567                                            ; +0x52, 0x180002562\nmov     r14, [r14]                                                     ; +0x54, 0x180002564\nxorps   xmm0, xmm0                                                     ; +0x57, 0x180002567\nmovups  xmmword ptr [rsp+78h+FileName], xmm0                           ; +0x5a, 0x18000256a\nmov     [rsp+78h+var_40], r12                                          ; +0x5f, 0x18000256f\nmov     [rsp+78h+var_38], r12                                          ; +0x64, 0x180002574\nlea     r15, [rbp+20h]                                                 ; +0x69, 0x180002579\nmov     ebx, 0Fh                                                       ; +0x6d, 0x18000257d\nlea     rdi, [rsp+78h+FileName]                                        ; +0x72, 0x180002582\ncmp     r15, rbx                                                       ; +0x77, 0x180002587\njbe     short loc_180002607                                            ; +0x7a, 0x18000258a\nmov     rbx, r15                                                       ; +0x7c, 0x18000258c\nor      rbx, 0Fh                                                       ; +0x7f, 0x18000258f\ncmp     rbx, rcx                                                       ; +0x83, 0x180002593\njbe     short loc_1800025C8                                            ; +0x86, 0x180002596\nmov     rbx, rcx                                                       ; +0x88, 0x180002598\nmov     rax, 8000000000000000h                                         ; +0x8b, 0x18000259b\nadd     rax, 27h ; '''                                                 ; +0x95, 0x1800025a5\nmov     rcx, rax; Size                                                 ; +0x99, 0x1800025a9\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0x9c, 0x1800025ac\ntest    rax, rax                                                       ; +0xa1, 0x1800025b1\njz      loc_1800027E3                                                  ; +0xa4, 0x1800025b4\nlea     rdi, [rax+27h]                                                 ; +0xaa, 0x1800025ba\nand     rdi, 0FFFFFFFFFFFFFFE0h                                        ; +0xae, 0x1800025be\nmov     [rdi-8], rax                                                   ; +0xb2, 0x1800025c2\njmp     short loc_180002602                                            ; +0xb6, 0x1800025c6\nmov     eax, 16h                                                       ; +0xb8, 0x1800025c8\ncmp     rbx, rax                                                       ; +0xbd, 0x1800025cd\ncmovb   rbx, rax                                                       ; +0xc0, 0x1800025d0\nlea     rcx, [rbx+1]; Size                                             ; +0xc4, 0x1800025d4\ncmp     rcx, 1000h                                                     ; +0xc8, 0x1800025d8\njb      short loc_1800025F0                                            ; +0xcf, 0x1800025df\nlea     rax, [rcx+27h]                                                 ; +0xd1, 0x1800025e1\ncmp     rax, rcx                                                       ; +0xd5, 0x1800025e5\njbe     loc_18000281E                                                  ; +0xd8, 0x1800025e8\njmp     short loc_1800025A9                                            ; +0xde, 0x1800025ee\ntest    rcx, rcx                                                       ; +0xe0, 0x1800025f0\njz      short loc_1800025FF                                            ; +0xe3, 0x1800025f3\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0xe5, 0x1800025f5\nmov     rdi, rax                                                       ; +0xea, 0x1800025fa\njmp     short loc_180002602                                            ; +0xed, 0x1800025fd\nmov     rdi, r12                                                       ; +0xef, 0x1800025ff\nmov     [rsp+78h+FileName], rdi                                        ; +0xf2, 0x180002602\nmov     [rsp+78h+var_40], r15                                          ; +0xf7, 0x180002607\nmov     [rsp+78h+var_38], rbx                                          ; +0xfc, 0x18000260c\nmov     r8, rbp; Size                                                  ; +0x101, 0x180002611\nmov     rdx, r14; Src                                                  ; +0x104, 0x180002614\nmov     rcx, rdi; void *                                               ; +0x107, 0x180002617\ncall    memcpy                                                         ; +0x10a, 0x18000261a\nmovups  xmm0, cs:xmmword_1800233C8                                     ; +0x10f, 0x18000261f\nmovups  xmmword ptr [rdi+rbp], xmm0                                    ; +0x116, 0x180002626\nmovups  xmm1, cs:xmmword_1800233D8                                     ; +0x11a, 0x18000262a\nmovups  xmmword ptr [rdi+rbp+10h], xmm1                                ; +0x121, 0x180002631\nmov     [rdi+r15], r12b                                                ; +0x126, 0x180002636\nlea     rcx, [rsp+78h+FileName]                                        ; +0x12a, 0x18000263a\ncmp     [rsp+78h+var_38], 0Fh                                          ; +0x12f, 0x18000263f\ncmova   rcx, [rsp+78h+FileName]; FileName                              ; +0x135, 0x180002645\nlea     rdx, Mode; \"wb\"                                                ; +0x13b, 0x18000264b\ncall    cs:fopen                                                       ; +0x142, 0x180002652\nmov     rdi, rax                                                       ; +0x148, 0x180002658\ntest    rax, rax                                                       ; +0x14b, 0x18000265b\njnz     short loc_1800026A3                                            ; +0x14e, 0x18000265e\nlea     ecx, [rax+10h]; Size                                           ; +0x150, 0x180002660\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0x153, 0x180002663\nmov     rbx, rax                                                       ; +0x158, 0x180002668\nmov     [rsp+78h+var_58], rax                                          ; +0x15b, 0x18000266b\nmov     [rax+8], r12                                                   ; +0x160, 0x180002670\nmov     dword ptr [rax], 3                                             ; +0x164, 0x180002674\nlea     ecx, [rdi+10h]; Size                                           ; +0x16a, 0x18000267a\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0x16d, 0x18000267d\nmov     [rax], r12                                                     ; +0x172, 0x180002682\nmov     [rax+8], rsi                                                   ; +0x175, 0x180002685\nmov     [rbx+8], rax                                                   ; +0x179, 0x180002689\nmov     rdx, rbx                                                       ; +0x17d, 0x18000268d\nmov     rcx, [rsi+0B0h]                                                ; +0x180, 0x180002690\ncall    sub_180002B70                                                  ; +0x187, 0x180002697\nxor     bl, bl                                                         ; +0x18c, 0x18000269c\njmp     loc_1800027AF                                                  ; +0x18e, 0x18000269e\nlea     r8, [rsi+48h]                                                  ; +0x193, 0x1800026a3\ncmp     qword ptr [r8+18h], 0Fh                                        ; +0x197, 0x1800026a7\njbe     short loc_1800026B1                                            ; +0x19c, 0x1800026ac\nmov     r8, [r8]                                                       ; +0x19e, 0x1800026ae\nmov     edx, 2712h                                                     ; +0x1a1, 0x1800026b1\nmov     rcx, [rsi+0A8h]                                                ; +0x1a6, 0x1800026b6\ncall    cs:curl_easy_setopt                                            ; +0x1ad, 0x1800026bd\nlea     r8, fwrite                                                     ; +0x1b3, 0x1800026c3\nmov     edx, 4E2Bh                                                     ; +0x1ba, 0x1800026ca\nmov     rcx, [rsi+0A8h]                                                ; +0x1bf, 0x1800026cf\ncall    cs:curl_easy_setopt                                            ; +0x1c6, 0x1800026d6\nmov     r8, rdi                                                        ; +0x1cc, 0x1800026dc\nmov     edx, 2711h                                                     ; +0x1cf, 0x1800026df\nmov     rcx, [rsi+0A8h]                                                ; +0x1d4, 0x1800026e4\ncall    cs:curl_easy_setopt                                            ; +0x1db, 0x1800026eb\nxor     r8d, r8d                                                       ; +0x1e1, 0x1800026f1\nlea     edx, [r8+2Bh]                                                  ; +0x1e4, 0x1800026f4\nmov     rcx, [rsi+0A8h]                                                ; +0x1e8, 0x1800026f8\ncall    cs:curl_easy_setopt                                            ; +0x1ef, 0x1800026ff\nlea     r8, sub_180002480                                              ; +0x1f5, 0x180002705\nmov     edx, 4E58h                                                     ; +0x1fc, 0x18000270c\nmov     rcx, [rsi+0A8h]                                                ; +0x201, 0x180002711\ncall    cs:curl_easy_setopt                                            ; +0x208, 0x180002718\nmov     r8, rsi                                                        ; +0x20e, 0x18000271e\nmov     edx, 2749h                                                     ; +0x211, 0x180002721\nmov     rcx, [rsi+0A8h]                                                ; +0x216, 0x180002726\ncall    cs:curl_easy_setopt                                            ; +0x21d, 0x18000272d\nmov     rcx, [rsi+0A8h]                                                ; +0x223, 0x180002733\ncall    cs:curl_easy_perform                                           ; +0x22a, 0x18000273a\nmov     ebx, eax                                                       ; +0x230, 0x180002740\nmov     rcx, [rsi+0A8h]                                                ; +0x232, 0x180002742\ncall    cs:curl_easy_cleanup                                           ; +0x239, 0x180002749\ntest    ebx, ebx                                                       ; +0x23f, 0x18000274f\njz      short loc_1800027A4                                            ; +0x241, 0x180002751\nmov     ecx, 10h; Size                                                 ; +0x243, 0x180002753\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0x248, 0x180002758\nmov     rbx, rax                                                       ; +0x24d, 0x18000275d\nmov     [rsp+78h+var_58], rax                                          ; +0x250, 0x180002760\nmov     [rax+8], r12                                                   ; +0x255, 0x180002765\nmov     dword ptr [rax], 3                                             ; +0x259, 0x180002769\nmov     ecx, 10h; Size                                                 ; +0x25f, 0x18000276f\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0x264, 0x180002774\nmov     qword ptr [rax], 1                                             ; +0x269, 0x180002779\nmov     [rax+8], rsi                                                   ; +0x270, 0x180002780\nmov     [rbx+8], rax                                                   ; +0x274, 0x180002784\nmov     rdx, rbx                                                       ; +0x278, 0x180002788\nmov     rcx, [rsi+0B0h]                                                ; +0x27b, 0x18000278b\ncall    sub_180002B70                                                  ; +0x282, 0x180002792\nmov     rcx, rdi; Stream                                               ; +0x287, 0x180002797\ncall    cs:fclose                                                      ; +0x28a, 0x18000279a\nxor     bl, bl                                                         ; +0x290, 0x1800027a0\njmp     short loc_1800027AF                                            ; +0x292, 0x1800027a2\nmov     rcx, rdi; Stream                                               ; +0x294, 0x1800027a4\ncall    cs:fclose                                                      ; +0x297, 0x1800027a7\nmov     bl, 1                                                          ; +0x29d, 0x1800027ad\nmov     rdx, [rsp+78h+var_38]                                          ; +0x29f, 0x1800027af\ncmp     rdx, 0Fh                                                       ; +0x2a4, 0x1800027b4\njbe     short loc_1800027EF                                            ; +0x2a8, 0x1800027b8\ninc     rdx                                                            ; +0x2aa, 0x1800027ba\nmov     rcx, [rsp+78h+FileName]; Block                                 ; +0x2ad, 0x1800027bd\nmov     rax, rcx                                                       ; +0x2b2, 0x1800027c2\ncmp     rdx, 1000h                                                     ; +0x2b5, 0x1800027c5\njb      short loc_1800027EA                                            ; +0x2bc, 0x1800027cc\nadd     rdx, 27h ; '''                                                 ; +0x2be, 0x1800027ce\nmov     rcx, [rcx-8]                                                   ; +0x2c2, 0x1800027d2\nsub     rax, rcx                                                       ; +0x2c6, 0x1800027d6\nadd     rax, 0FFFFFFFFFFFFFFF8h                                        ; +0x2c9, 0x1800027d9\ncmp     rax, 1Fh                                                       ; +0x2cd, 0x1800027dd\njbe     short loc_1800027EA                                            ; +0x2d1, 0x1800027e1\ncall    cs:_invalid_parameter_noinfo_noreturn                          ; +0x2d3, 0x1800027e3\nalign 2                                                                ; +0x2d9, 0x1800027e9\ncall    j_j_free                                                       ; +0x2da, 0x1800027ea\nmovzx   eax, bl                                                        ; +0x2df, 0x1800027ef\nmov     rcx, [rsp+78h+var_30]                                          ; +0x2e2, 0x1800027f2\nxor     rcx, rsp; StackCookie                                          ; +0x2e7, 0x1800027f7\ncall    __security_check_cookie                                        ; +0x2ea, 0x1800027fa\nlea     r11, [rsp+78h+var_28]                                          ; +0x2ef, 0x1800027ff\nmov     rbx, [r11+38h]                                                 ; +0x2f4, 0x180002804\nmov     rbp, [r11+40h]                                                 ; +0x2f8, 0x180002808\nmov     rsp, r11                                                       ; +0x2fc, 0x18000280c\npop     r15                                                            ; +0x2ff, 0x18000280f\npop     r14                                                            ; +0x301, 0x180002811\npop     r12                                                            ; +0x303, 0x180002813\npop     rdi                                                            ; +0x305, 0x180002815\npop     rsi                                                            ; +0x306, 0x180002816\nretn                                                                   ; +0x307, 0x180002817\ncall    sub_180003D90                                                  ; +0x308, 0x180002818\nalign 2                                                                ; +0x30d, 0x18000281d\ncall    ?cancel_current_task@Concurrency@@YAXXZ; Concurrency::cancel_current_task(void) ; +0x30e, 0x18000281e\ndb 0CCh                                                                ; +0x313, 0x180002823", "xrefs": ["sub_180001B60 @ 0x180001baf", "<???> @ 0x18002fdf8", "<???> @ 0x180049144"], "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"}