; ; cocos2d::extension::WebSocket::onSocketCallback from 0x18001a7b0 to 0x18001ab3d (909 bytes) ; ; 5 xrefs: ; > sub_180019520 @ 0x18001956e ; > @ 0x18002f62c ; > @ 0x18002f660 ; > @ 0x18002fdf8 ; > @ 0x18004ad04 ; ; This function is hookable on this platform! ; ; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA ; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings ; mov [rsp+arg_8], rdx ; +0x0, 0x18001a7b0 push rsi ; +0x5, 0x18001a7b5 push r12 ; +0x6, 0x18001a7b6 sub rsp, 48h ; +0x8, 0x18001a7b8 lea eax, [r8-1]; switch 33 cases ; +0xc, 0x18001a7bc mov r12, rdx ; +0x10, 0x18001a7c0 mov rsi, rcx ; +0x13, 0x18001a7c3 cmp eax, 20h ; +0x16, 0x18001a7c6 ja def_18001A804; jumptable 000000018001A804 default case ; +0x19, 0x18001a7c9 mov [rsp+58h+arg_0], rbx ; +0x1f, 0x18001a7cf lea rcx, cs:180000000h ; +0x24, 0x18001a7d4 mov [rsp+58h+arg_10], rbp ; +0x2b, 0x18001a7db mov [rsp+58h+arg_18], rdi ; +0x30, 0x18001a7e0 mov [rsp+58h+var_20], r14 ; +0x35, 0x18001a7e5 mov [rsp+58h+var_28], r15 ; +0x3a, 0x18001a7ea cdqe ; +0x3f, 0x18001a7ef movzx eax, ds:(byte_18001AB1C - 180000000h)[rcx+rax] ; +0x41, 0x18001a7f1 mov r9d, ds:(jpt_18001A804 - 180000000h)[rcx+rax*4] ; +0x49, 0x18001a7f9 add r9, rcx ; +0x51, 0x18001a801 jmp r9; switch jump ; +0x54, 0x18001a804 cmp r8d, 1; jumptable 000000018001A804 cases 1,28,33 ; +0x57, 0x18001a807 jz short loc_18001A859 ; +0x5b, 0x18001a80b cmp r8d, 1Ch ; +0x5d, 0x18001a80d jnz short loc_18001A845 ; +0x61, 0x18001a811 cmp dword ptr [rsi+8], 0 ; +0x63, 0x18001a813 jz short loc_18001A859 ; +0x67, 0x18001a817 cmp dword ptr [rsi+8], 2 ; +0x69, 0x18001a819 jnz loc_18001AADF; jumptable 000000018001A804 cases 2,5-7,9,11-27,29-32 ; +0x6d, 0x18001a81d lea ecx, [r8-0Ch]; Size ; +0x73, 0x18001a823 call ??2@YAPEAX_K@Z; operator new(unsigned __int64) ; +0x77, 0x18001a827 xor ebp, ebp ; +0x7c, 0x18001a82c mov [rsp+58h+var_38], rax ; +0x7e, 0x18001a82e mov rdx, rax ; +0x83, 0x18001a833 mov [rax+8], rbp ; +0x86, 0x18001a836 mov dword ptr [rax], 5 ; +0x8a, 0x18001a83a jmp loc_18001AAD6 ; +0x90, 0x18001a840 cmp r8d, 21h ; '!' ; +0x95, 0x18001a845 jnz loc_18001AADF; jumptable 000000018001A804 cases 2,5-7,9,11-27,29-32 ; +0x99, 0x18001a849 cmp dword ptr [rsi+8], 0 ; +0x9f, 0x18001a84f jnz loc_18001AADF; jumptable 000000018001A804 cases 2,5-7,9,11-27,29-32 ; +0xa3, 0x18001a853 mov ecx, 10h; Size ; +0xa9, 0x18001a859 call ??2@YAPEAX_K@Z; operator new(unsigned __int64) ; +0xae, 0x18001a85e xor ebp, ebp ; +0xb3, 0x18001a863 mov [rsp+58h+var_38], rax ; +0xb5, 0x18001a865 mov rdx, rax ; +0xba, 0x18001a86a mov [rax+8], rbp ; +0xbd, 0x18001a86d mov dword ptr [rax], 4 ; +0xc1, 0x18001a871 mov dword ptr [rsi+8], 2 ; +0xc7, 0x18001a877 jmp loc_18001AAD6 ; +0xce, 0x18001a87e mov ecx, 10h; jumptable 000000018001A804 case 3 ; +0xd3, 0x18001a883 call ??2@YAPEAX_K@Z; operator new(unsigned __int64) ; +0xd8, 0x18001a888 xor ebp, ebp ; +0xdd, 0x18001a88d mov [rsp+58h+var_38], rax ; +0xdf, 0x18001a88f mov rcx, r12 ; +0xe4, 0x18001a894 mov rbx, rax ; +0xe7, 0x18001a897 mov [rax+8], rbp ; +0xea, 0x18001a89a mov dword ptr [rax], 2 ; +0xee, 0x18001a89e mov dword ptr [rsi+8], 1 ; +0xf4, 0x18001a8a4 call cs:lws_callback_on_writable ; +0xfb, 0x18001a8ab mov rdx, rbx ; +0x101, 0x18001a8b1 jmp loc_18001AAD6 ; +0x104, 0x18001a8b4 mov rcx, [rsi+58h]; jumptable 000000018001A804 case 10 ; +0x109, 0x18001a8b9 add rcx, 50h ; 'P' ; +0x10d, 0x18001a8bd call cs:pthread_mutex_lock ; +0x111, 0x18001a8c1 mov rdx, [rsi+58h] ; +0x117, 0x18001a8c7 xor ebp, ebp ; +0x11b, 0x18001a8cb mov rax, [rdx+40h] ; +0x11d, 0x18001a8cd mov rcx, [rax] ; +0x121, 0x18001a8d1 mov rbx, [rcx] ; +0x124, 0x18001a8d4 cmp rbx, rcx ; +0x127, 0x18001a8d7 jz loc_18001A990 ; +0x12a, 0x18001a8da mov [rsp+58h+var_18], r13 ; +0x130, 0x18001a8e0 mov r15, [rbx+10h] ; +0x135, 0x18001a8e5 mov eax, [r15] ; +0x139, 0x18001a8e9 test eax, eax ; +0x13c, 0x18001a8ec jz short loc_18001A8F5 ; +0x13e, 0x18001a8ee cmp eax, 1 ; +0x140, 0x18001a8f0 jnz short loc_18001A96A ; +0x143, 0x18001a8f3 mov r14, [r15+8] ; +0x145, 0x18001a8f5 mov eax, [r14+8] ; +0x149, 0x18001a8f9 add eax, 10h ; +0x14d, 0x18001a8fd movsxd rcx, eax; Size ; +0x150, 0x18001a900 call j_??2@YAPEAX_K@Z; operator new(unsigned __int64) ; +0x153, 0x18001a903 movsxd r8, dword ptr [r14+8]; Size ; +0x158, 0x18001a908 xor edx, edx; Val ; +0x15c, 0x18001a90c mov r13, rax ; +0x15e, 0x18001a90e lea rcx, [rax+10h]; void * ; +0x161, 0x18001a911 call memset ; +0x165, 0x18001a915 movsxd r8, dword ptr [r14+8]; Size ; +0x16a, 0x18001a91a lea rcx, [r13+10h]; void * ; +0x16e, 0x18001a91e mov rdx, [r14]; Src ; +0x172, 0x18001a922 call memcpy ; +0x175, 0x18001a925 cmp [r15], ebp ; +0x17a, 0x18001a92a lea rdx, [r13+10h] ; +0x17d, 0x18001a92d movsxd r8, dword ptr [r14+8] ; +0x181, 0x18001a931 mov r9d, ebp ; +0x185, 0x18001a935 setnz r9b ; +0x188, 0x18001a938 mov rcx, r12 ; +0x18c, 0x18001a93c call cs:lws_write ; +0x18f, 0x18001a93f mov rcx, [r14]; Block ; +0x195, 0x18001a945 test rcx, rcx ; +0x198, 0x18001a948 jz short loc_18001A955 ; +0x19b, 0x18001a94b call j_j_free ; +0x19d, 0x18001a94d mov [r14], rbp ; +0x1a2, 0x18001a952 mov edx, 10h ; +0x1a5, 0x18001a955 mov rcx, r14; Block ; +0x1aa, 0x18001a95a call j_j_free ; +0x1ad, 0x18001a95d mov rcx, r13; Block ; +0x1b2, 0x18001a962 call j_j_free ; +0x1b5, 0x18001a965 mov edx, 10h ; +0x1ba, 0x18001a96a mov rcx, r15; Block ; +0x1bf, 0x18001a96f call j_j_free ; +0x1c2, 0x18001a972 mov rdx, [rsi+58h] ; +0x1c7, 0x18001a977 mov rbx, [rbx] ; +0x1cb, 0x18001a97b mov rax, [rdx+40h] ; +0x1ce, 0x18001a97e cmp rbx, [rax] ; +0x1d2, 0x18001a982 jnz loc_18001A8E5 ; +0x1d5, 0x18001a985 mov r13, [rsp+58h+var_18] ; +0x1db, 0x18001a98b mov rdi, [rdx+40h] ; +0x1e0, 0x18001a990 mov rcx, [rdi] ; +0x1e4, 0x18001a994 mov rax, [rcx+8] ; +0x1e7, 0x18001a997 mov [rax], rbp ; +0x1eb, 0x18001a99b mov rcx, [rcx]; Block ; +0x1ee, 0x18001a99e test rcx, rcx ; +0x1f1, 0x18001a9a1 jz short loc_18001A9C5 ; +0x1f4, 0x18001a9a4 nop word ptr [rax+rax+00000000h] ; +0x1f6, 0x18001a9a6 mov rbx, [rcx] ; +0x200, 0x18001a9b0 mov edx, 18h ; +0x203, 0x18001a9b3 call j_j_free ; +0x208, 0x18001a9b8 mov rcx, rbx ; +0x20d, 0x18001a9bd test rbx, rbx ; +0x210, 0x18001a9c0 jnz short loc_18001A9B0 ; +0x213, 0x18001a9c3 mov rax, [rdi] ; +0x215, 0x18001a9c5 mov [rax], rax ; +0x218, 0x18001a9c8 mov rax, [rdi] ; +0x21b, 0x18001a9cb mov [rax+8], rax ; +0x21e, 0x18001a9ce mov [rdi+8], rbp ; +0x222, 0x18001a9d2 mov rcx, [rsi+58h] ; +0x226, 0x18001a9d6 add rcx, 50h ; 'P' ; +0x22a, 0x18001a9da call cs:pthread_mutex_unlock ; +0x22e, 0x18001a9de mov rcx, r12 ; +0x234, 0x18001a9e4 call cs:lws_callback_on_writable ; +0x237, 0x18001a9e7 jmp loc_18001AADF; jumptable 000000018001A804 cases 2,5-7,9,11-27,29-32 ; +0x23d, 0x18001a9ed mov rax, [rsi+58h]; jumptable 000000018001A804 case 4 ; +0x242, 0x18001a9f2 mov byte ptr [rax+70h], 1 ; +0x246, 0x18001a9f6 cmp dword ptr [rsi+8], 3 ; +0x24a, 0x18001a9fa jz loc_18001AADF; jumptable 000000018001A804 cases 2,5-7,9,11-27,29-32 ; +0x24e, 0x18001a9fe mov ecx, 10h; Size ; +0x254, 0x18001aa04 call ??2@YAPEAX_K@Z; operator new(unsigned __int64) ; +0x259, 0x18001aa09 xor ebp, ebp ; +0x25e, 0x18001aa0e mov [rsp+58h+var_38], rax ; +0x260, 0x18001aa10 mov rdx, rax ; +0x265, 0x18001aa15 mov [rax+8], rbp ; +0x268, 0x18001aa18 mov dword ptr [rsi+8], 3 ; +0x26c, 0x18001aa1c mov dword ptr [rax], 5 ; +0x273, 0x18001aa23 jmp loc_18001AAD6 ; +0x279, 0x18001aa29 mov r12, [rsp+58h+Src]; jumptable 000000018001A804 case 8 ; +0x27e, 0x18001aa2e test r12, r12 ; +0x286, 0x18001aa36 jz loc_18001AADF; jumptable 000000018001A804 cases 2,5-7,9,11-27,29-32 ; +0x289, 0x18001aa39 mov rbx, [rsp+58h+Size] ; +0x28f, 0x18001aa3f test rbx, rbx ; +0x297, 0x18001aa47 jz loc_18001AADF; jumptable 000000018001A804 cases 2,5-7,9,11-27,29-32 ; +0x29a, 0x18001aa4a mov ecx, 10h; Size ; +0x2a0, 0x18001aa50 call ??2@YAPEAX_K@Z; operator new(unsigned __int64) ; +0x2a5, 0x18001aa55 xor ebp, ebp ; +0x2aa, 0x18001aa5a mov [rsp+58h+var_38], rax ; +0x2ac, 0x18001aa5c mov r15, rax ; +0x2b1, 0x18001aa61 mov [rax+8], rbp ; +0x2b4, 0x18001aa64 lea ecx, [rbp+10h]; Size ; +0x2b8, 0x18001aa68 mov dword ptr [rax], 3 ; +0x2bb, 0x18001aa6b call ??2@YAPEAX_K@Z; operator new(unsigned __int64) ; +0x2c1, 0x18001aa71 mov rcx, [rsp+58h+arg_8] ; +0x2c6, 0x18001aa76 mov rdi, rax ; +0x2cb, 0x18001aa7b mov [rsp+58h+var_38], rax ; +0x2ce, 0x18001aa7e mov [rax], rbp ; +0x2d3, 0x18001aa83 mov [rax+8], ebp ; +0x2d6, 0x18001aa86 mov [rax+0Ch], bpl ; +0x2d9, 0x18001aa89 call cs:lws_frame_is_binary ; +0x2dd, 0x18001aa8d test eax, eax ; +0x2e3, 0x18001aa93 jz short loc_18001AAA6 ; +0x2e5, 0x18001aa95 mov rcx, rbx; Size ; +0x2e7, 0x18001aa97 call j_??2@YAPEAX_K@Z; operator new(unsigned __int64) ; +0x2ea, 0x18001aa9a mov r14, rax ; +0x2ef, 0x18001aa9f mov al, 1 ; +0x2f2, 0x18001aaa2 jmp short loc_18001AAB8 ; +0x2f4, 0x18001aaa4 lea rcx, [rbx+1]; Size ; +0x2f6, 0x18001aaa6 call j_??2@YAPEAX_K@Z; operator new(unsigned __int64) ; +0x2fa, 0x18001aaaa mov r14, rax ; +0x2ff, 0x18001aaaf mov [rax+rbx], bpl ; +0x302, 0x18001aab2 xor al, al ; +0x306, 0x18001aab6 mov r8, rbx; Size ; +0x308, 0x18001aab8 mov [rdi+0Ch], al ; +0x30b, 0x18001aabb mov rdx, r12; Src ; +0x30e, 0x18001aabe mov rcx, r14; void * ; +0x311, 0x18001aac1 call memcpy ; +0x314, 0x18001aac4 mov [rdi], r14 ; +0x319, 0x18001aac9 mov rdx, r15 ; +0x31c, 0x18001aacc mov [rdi+8], ebx ; +0x31f, 0x18001aacf mov [r15+8], rdi ; +0x322, 0x18001aad2 mov rcx, [rsi+58h] ; +0x326, 0x18001aad6 call sub_1800196E0 ; +0x32a, 0x18001aada mov r14, [rsp+58h+var_20]; jumptable 000000018001A804 cases 2,5-7,9,11-27,29-32 ; +0x32f, 0x18001aadf mov rdi, [rsp+58h+arg_18] ; +0x334, 0x18001aae4 mov rbp, [rsp+58h+arg_10] ; +0x339, 0x18001aae9 mov rbx, [rsp+58h+arg_0] ; +0x33e, 0x18001aaee mov r15, [rsp+58h+var_28] ; +0x343, 0x18001aaf3 xor eax, eax; jumptable 000000018001A804 default case ; +0x348, 0x18001aaf8 add rsp, 48h ; +0x34a, 0x18001aafa pop r12 ; +0x34e, 0x18001aafe pop rsi ; +0x350, 0x18001ab00 retn ; +0x351, 0x18001ab01 align 4 ; +0x352, 0x18001ab02 dd offset loc_18001A807 - 180000000h; jump table for switch statement ; +0x354, 0x18001ab04 db 0, 5, 1, 2; indirect table for switch statement ; +0x36c, 0x18001ab1c