{"type": "func", "start": 6442465968, "end": 6442466239, "name": "sub_180003AB0", "pseudocode": "// \n// sub_180003AB0 from 0x180003ab0 to 0x180003bbf (271 bytes)\n// \n// 19 xrefs:\n// > cocos2d::extension::AssetsManager::AssetsManager @ 0x1800014e0\n// > cocos2d::extension::AssetsManager::AssetsManager @ 0x18000151d\n// > cocos2d::extension::AssetsManager::AssetsManager @ 0x180001545\n// > sub_180002C10 @ 0x180002d3f\n// > sub_180002DE0 @ 0x180002e3e\n// > cocos2d::extension::CCControlButton::initWithLabelAndBackgroundSprite @ 0x180005c82\n// > cocos2d::extension::CCEditBoxImplWin::openKeyboard @ 0x180011d71\n// > cocos2d::extension::CCEditBoxImplWin::openKeyboard @ 0x180011f12\n// > cocos2d::extension::CCEditBoxImplWin::openKeyboard @ 0x180011fcb\n// > cocos2d::extension::WebSocket::init @ 0x180019d4b\n// > cocos2d::extension::WebSocket::init @ 0x180019ea4\n// > CWin32InputBox::InitDialog @ 0x18001e383\n// > CWin32InputBox::InitDialog @ 0x18001e413\n// > CWin32InputBox::InitDialog @ 0x18001e4f0\n// > CWin32InputBox::DlgProc @ 0x18001e72e\n// > <???> @ 0x18002d36c\n// > <???> @ 0x18002d37c\n// > <???> @ 0x18002d390\n// > <???> @ 0x1800492d0\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_180003AB0(_QWORD *a1, const void *a2, size_t a3)\n{\n  __int64 v3; // rdi\n  void *result; // rax\n  size_t v8; // rax\n  void *v9; // rax\n  _QWORD *v10; // rsi\n\n  v3 = 0x7FFFFFFFFFFFFFFFLL;\n  if ( a3 > 0x7FFFFFFFFFFFFFFFLL )\n    sub_180003D90();\n  a1[3] = 15;\n  if ( a3 <= 0xF )\n  {\n    a1[2] = a3;\n    result = memcpy(a1, a2, a3);\n    *((_BYTE *)a1 + a3) = 0;\n    return result;\n  }\n  if ( (a3 | 0xF) > 0x7FFFFFFFFFFFFFFFLL )\n  {\n    v8 = 0x8000000000000027uLL;\nLABEL_6:\n    v9 = operator new(v8);\n    if ( !v9 )\n      invalid_parameter_noinfo_noreturn();\n    v10 = (_QWORD *)(((unsigned __int64)v9 + 39) & 0xFFFFFFFFFFFFFFE0uLL);\n    *(v10 - 1) = v9;\n    goto LABEL_17;\n  }\n  v3 = a3 | 0xF;\n  if ( (a3 | 0xF) < 0x16 )\n    v3 = 22;\n  if ( (unsigned __int64)(v3 + 1) >= 0x1000 )\n  {\n    v8 = v3 + 40;\n    if ( v3 + 40 < (unsigned __int64)(v3 + 1) )\n      Concurrency::cancel_current_task();\n    goto LABEL_6;\n  }\n  if ( v3 == -1 )\n    v10 = nullptr;\n  else\n    v10 = operator new(v3 + 1);\nLABEL_17:\n  *a1 = v10;\n  a1[2] = a3;\n  a1[3] = v3;\n  result = memcpy(v10, a2, a3);\n  *((_BYTE *)v10 + a3) = 0;\n  return result;\n}", "assembly": "; \n; sub_180003AB0 from 0x180003ab0 to 0x180003bbf (271 bytes)\n; \n; 19 xrefs:\n; > cocos2d::extension::AssetsManager::AssetsManager @ 0x1800014e0\n; > cocos2d::extension::AssetsManager::AssetsManager @ 0x18000151d\n; > cocos2d::extension::AssetsManager::AssetsManager @ 0x180001545\n; > sub_180002C10 @ 0x180002d3f\n; > sub_180002DE0 @ 0x180002e3e\n; > cocos2d::extension::CCControlButton::initWithLabelAndBackgroundSprite @ 0x180005c82\n; > cocos2d::extension::CCEditBoxImplWin::openKeyboard @ 0x180011d71\n; > cocos2d::extension::CCEditBoxImplWin::openKeyboard @ 0x180011f12\n; > cocos2d::extension::CCEditBoxImplWin::openKeyboard @ 0x180011fcb\n; > cocos2d::extension::WebSocket::init @ 0x180019d4b\n; > cocos2d::extension::WebSocket::init @ 0x180019ea4\n; > CWin32InputBox::InitDialog @ 0x18001e383\n; > CWin32InputBox::InitDialog @ 0x18001e413\n; > CWin32InputBox::InitDialog @ 0x18001e4f0\n; > CWin32InputBox::DlgProc @ 0x18001e72e\n; > <???> @ 0x18002d36c\n; > <???> @ 0x18002d37c\n; > <???> @ 0x18002d390\n; > <???> @ 0x1800492d0\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, 0x180003ab0\nmov     [rsp+arg_10], rbp                                              ; +0x5, 0x180003ab5\nmov     [rsp+arg_18], rdi                                              ; +0xa, 0x180003aba\npush    r14                                                            ; +0xf, 0x180003abf\nsub     rsp, 20h                                                       ; +0x11, 0x180003ac1\nmov     rdi, 7FFFFFFFFFFFFFFFh                                         ; +0x15, 0x180003ac5\nmov     rbx, r8                                                        ; +0x1f, 0x180003acf\nmov     rbp, rdx                                                       ; +0x22, 0x180003ad2\nmov     r14, rcx                                                       ; +0x25, 0x180003ad5\ncmp     r8, rdi                                                        ; +0x28, 0x180003ad8\nja      loc_180003BB3                                                  ; +0x2b, 0x180003adb\nmov     qword ptr [rcx+18h], 0Fh                                       ; +0x31, 0x180003ae1\ncmp     rbx, 0Fh                                                       ; +0x39, 0x180003ae9\nja      short loc_180003B02                                            ; +0x3d, 0x180003aed\nmov     [rcx+10h], rbx                                                 ; +0x3f, 0x180003aef\ncall    memcpy                                                         ; +0x43, 0x180003af3\nmov     byte ptr [rbx+r14], 0                                          ; +0x48, 0x180003af8\njmp     loc_180003B9D                                                  ; +0x4d, 0x180003afd\nmov     rax, rbx                                                       ; +0x52, 0x180003b02\nmov     [rsp+28h+arg_0], rsi                                           ; +0x55, 0x180003b05\nor      rax, 0Fh                                                       ; +0x5a, 0x180003b0a\ncmp     rax, rdi                                                       ; +0x5e, 0x180003b0e\njbe     short loc_180003B3C                                            ; +0x61, 0x180003b11\nmov     rax, 8000000000000000h                                         ; +0x63, 0x180003b13\nadd     rax, 27h ; '''                                                 ; +0x6d, 0x180003b1d\nmov     rcx, rax; Size                                                 ; +0x71, 0x180003b21\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0x74, 0x180003b24\ntest    rax, rax                                                       ; +0x79, 0x180003b29\njz      short loc_180003B63                                            ; +0x7c, 0x180003b2c\nlea     rsi, [rax+27h]                                                 ; +0x7e, 0x180003b2e\nand     rsi, 0FFFFFFFFFFFFFFE0h                                        ; +0x82, 0x180003b32\nmov     [rsi-8], rax                                                   ; +0x86, 0x180003b36\njmp     short loc_180003B7B                                            ; +0x8a, 0x180003b3a\nmov     ecx, 16h                                                       ; +0x8c, 0x180003b3c\nmov     rdi, rax                                                       ; +0x91, 0x180003b41\ncmp     rax, rcx                                                       ; +0x94, 0x180003b44\ncmovb   rdi, rcx                                                       ; +0x97, 0x180003b47\nlea     rcx, [rdi+1]; Size                                             ; +0x9b, 0x180003b4b\ncmp     rcx, 1000h                                                     ; +0x9f, 0x180003b4f\njb      short loc_180003B6A                                            ; +0xa6, 0x180003b56\nlea     rax, [rcx+27h]                                                 ; +0xa8, 0x180003b58\ncmp     rax, rcx                                                       ; +0xac, 0x180003b5c\njbe     short loc_180003BB9                                            ; +0xaf, 0x180003b5f\njmp     short loc_180003B21                                            ; +0xb1, 0x180003b61\ncall    cs:_invalid_parameter_noinfo_noreturn                          ; +0xb3, 0x180003b63\nalign 2                                                                ; +0xb9, 0x180003b69\ntest    rcx, rcx                                                       ; +0xba, 0x180003b6a\njz      short loc_180003B79                                            ; +0xbd, 0x180003b6d\ncall    ??2@YAPEAX_K@Z; operator new(unsigned __int64)                 ; +0xbf, 0x180003b6f\nmov     rsi, rax                                                       ; +0xc4, 0x180003b74\njmp     short loc_180003B7B                                            ; +0xc7, 0x180003b77\nxor     esi, esi                                                       ; +0xc9, 0x180003b79\nmov     r8, rbx; Size                                                  ; +0xcb, 0x180003b7b\nmov     [r14], rsi                                                     ; +0xce, 0x180003b7e\nmov     rdx, rbp; Src                                                  ; +0xd1, 0x180003b81\nmov     [r14+10h], rbx                                                 ; +0xd4, 0x180003b84\nmov     rcx, rsi; void *                                               ; +0xd8, 0x180003b88\nmov     [r14+18h], rdi                                                 ; +0xdb, 0x180003b8b\ncall    memcpy                                                         ; +0xdf, 0x180003b8f\nmov     byte ptr [rsi+rbx], 0                                          ; +0xe4, 0x180003b94\nmov     rsi, [rsp+28h+arg_0]                                           ; +0xe8, 0x180003b98\nmov     rbx, [rsp+28h+arg_8]                                           ; +0xed, 0x180003b9d\nmov     rbp, [rsp+28h+arg_10]                                          ; +0xf2, 0x180003ba2\nmov     rdi, [rsp+28h+arg_18]                                          ; +0xf7, 0x180003ba7\nadd     rsp, 20h                                                       ; +0xfc, 0x180003bac\npop     r14                                                            ; +0x100, 0x180003bb0\nretn                                                                   ; +0x102, 0x180003bb2\ncall    sub_180003D90                                                  ; +0x103, 0x180003bb3\ndb 0CCh                                                                ; +0x108, 0x180003bb8\ncall    ?cancel_current_task@Concurrency@@YAXXZ; Concurrency::cancel_current_task(void) ; +0x109, 0x180003bb9\ndb 0CCh                                                                ; +0x10e, 0x180003bbe", "xrefs": ["cocos2d::extension::AssetsManager::AssetsManager @ 0x1800014e0", "cocos2d::extension::AssetsManager::AssetsManager @ 0x18000151d", "cocos2d::extension::AssetsManager::AssetsManager @ 0x180001545", "sub_180002C10 @ 0x180002d3f", "sub_180002DE0 @ 0x180002e3e", "cocos2d::extension::CCControlButton::initWithLabelAndBackgroundSprite @ 0x180005c82", "cocos2d::extension::CCEditBoxImplWin::openKeyboard @ 0x180011d71", "cocos2d::extension::CCEditBoxImplWin::openKeyboard @ 0x180011f12", "cocos2d::extension::CCEditBoxImplWin::openKeyboard @ 0x180011fcb", "cocos2d::extension::WebSocket::init @ 0x180019d4b", "cocos2d::extension::WebSocket::init @ 0x180019ea4", "CWin32InputBox::InitDialog @ 0x18001e383", "CWin32InputBox::InitDialog @ 0x18001e413", "CWin32InputBox::InitDialog @ 0x18001e4f0", "CWin32InputBox::DlgProc @ 0x18001e72e", "<???> @ 0x18002d36c", "<???> @ 0x18002d37c", "<???> @ 0x18002d390", "<???> @ 0x1800492d0"], "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"}