{"type": "func", "start": 6442465824, "end": 6442465965, "name": "sub_180003A20", "pseudocode": "// \n// sub_180003A20 from 0x180003a20 to 0x180003aad (141 bytes)\n// \n// 5 xrefs:\n// > cocos2d::extension::WebSocket::onSubThreadStarted @ 0x18001a66b\n// > <???> @ 0x18002d334\n// > <???> @ 0x18002d344\n// > <???> @ 0x1800492a0\n// > <???> @ 0x1800492ac\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_QWORD *__fastcall sub_180003A20(_QWORD *Src, _BYTE *a2)\n{\n  unsigned __int64 Size; // rbx\n  unsigned __int64 v4; // r8\n  __int64 v5; // rcx\n  _QWORD *v6; // rax\n  char *v7; // rdi\n\n  Size = -1;\n  do\n    ++Size;\n  while ( a2[Size] );\n  v4 = Src[3];\n  v5 = Src[2];\n  if ( Size > Src[3] - v5 )\n    return sub_180003810(Src, Size, v4, a2, Size);\n  Src[2] = v5 + Size;\n  v6 = Src;\n  if ( v4 > 0xF )\n    v6 = (_QWORD *)*Src;\n  v7 = (char *)v6 + v5;\n  memmove((char *)v6 + v5, a2, Size);\n  v7[Size] = 0;\n  return Src;\n}", "assembly": "; \n; sub_180003A20 from 0x180003a20 to 0x180003aad (141 bytes)\n; \n; 5 xrefs:\n; > cocos2d::extension::WebSocket::onSubThreadStarted @ 0x18001a66b\n; > <???> @ 0x18002d334\n; > <???> @ 0x18002d344\n; > <???> @ 0x1800492a0\n; > <???> @ 0x1800492ac\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, 0x180003a20\npush    rsi                                                            ; +0x5, 0x180003a25\nsub     rsp, 30h                                                       ; +0x6, 0x180003a26\nmov     rsi, rcx                                                       ; +0xa, 0x180003a2a\nmov     rbx, 0FFFFFFFFFFFFFFFFh                                        ; +0xd, 0x180003a2d\ninc     rbx                                                            ; +0x14, 0x180003a34\ncmp     byte ptr [rdx+rbx], 0                                          ; +0x17, 0x180003a37\njnz     short loc_180003A34                                            ; +0x1b, 0x180003a3b\nmov     r8, [rsi+18h]                                                  ; +0x1d, 0x180003a3d\nmov     rcx, [rcx+10h]                                                 ; +0x21, 0x180003a41\nmov     rax, r8                                                        ; +0x25, 0x180003a45\nsub     rax, rcx                                                       ; +0x28, 0x180003a48\ncmp     rbx, rax                                                       ; +0x2b, 0x180003a4b\nja      short loc_180003A8F                                            ; +0x2e, 0x180003a4e\nmov     [rsp+38h+arg_0], rdi                                           ; +0x30, 0x180003a50\nlea     rax, [rcx+rbx]                                                 ; +0x35, 0x180003a55\nmov     [rsi+10h], rax                                                 ; +0x39, 0x180003a59\nmov     rax, rsi                                                       ; +0x3d, 0x180003a5d\ncmp     r8, 0Fh                                                        ; +0x40, 0x180003a60\njbe     short loc_180003A69                                            ; +0x44, 0x180003a64\nmov     rax, [rsi]                                                     ; +0x46, 0x180003a66\nlea     rdi, [rax+rcx]                                                 ; +0x49, 0x180003a69\nmov     r8, rbx; Size                                                  ; +0x4d, 0x180003a6d\nmov     rcx, rdi; void *                                               ; +0x50, 0x180003a70\ncall    memmove                                                        ; +0x53, 0x180003a73\nmov     byte ptr [rdi+rbx], 0                                          ; +0x58, 0x180003a78\nmov     rax, rsi                                                       ; +0x5c, 0x180003a7c\nmov     rdi, [rsp+38h+arg_0]                                           ; +0x5f, 0x180003a7f\nmov     rbx, [rsp+38h+arg_8]                                           ; +0x64, 0x180003a84\nadd     rsp, 30h                                                       ; +0x69, 0x180003a89\npop     rsi                                                            ; +0x6d, 0x180003a8d\nretn                                                                   ; +0x6e, 0x180003a8e\nmov     r9, rdx                                                        ; +0x6f, 0x180003a8f\nmov     [rsp+38h+Size], rbx; Size                                      ; +0x72, 0x180003a92\nmov     rdx, rbx                                                       ; +0x77, 0x180003a97\nmov     rcx, rsi; Src                                                  ; +0x7a, 0x180003a9a\ncall    sub_180003810                                                  ; +0x7d, 0x180003a9d\nmov     rbx, [rsp+38h+arg_8]                                           ; +0x82, 0x180003aa2\nadd     rsp, 30h                                                       ; +0x87, 0x180003aa7\npop     rsi                                                            ; +0x8b, 0x180003aab\nretn                                                                   ; +0x8c, 0x180003aac", "xrefs": ["cocos2d::extension::WebSocket::onSubThreadStarted @ 0x18001a66b", "<???> @ 0x18002d334", "<???> @ 0x18002d344", "<???> @ 0x1800492a0", "<???> @ 0x1800492ac"], "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"}