// // cocos2d::extension::CCEditBoxImplWin::openKeyboard from 0x180011cb0 to 0x180012102 (1106 bytes) // // 3 xrefs: // > @ 0x1800281c8 // > @ 0x18002fdf8 // > @ 0x18004a308 // // 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 // // Hidden C++ exception states: #wind=3 void __fastcall cocos2d::extension::CCEditBoxImplWin::openKeyboard(cocos2d::extension::CCEditBoxImplWin *this) { __int64 v2; // rcx __int64 v3; // rbx _QWORD *v4; // rax _BYTE *v5; // rax size_t v6; // rdi size_t v7; // r8 unsigned __int64 v8; // r15 char **v9; // rbx unsigned __int64 v10; // rcx __int64 v11; // r14 size_t v12; // rax void *v13; // rax _WORD *v14; // rbx char *v15; // rcx _BYTE *v16; // rax size_t v17; // r8 const char *v18; // rdx const char *v19; // rdx __int64 v20; // rbx _BYTE *v21; // rax void *v22; // rcx char *v23; // rcx char *v24; // rcx char *v25[2]; // [rsp+30h] [rbp-D0h] BYREF __int64 v26; // [rsp+40h] [rbp-C0h] unsigned __int64 v27; // [rsp+48h] [rbp-B8h] char *Source[2]; // [rsp+50h] [rbp-B0h] BYREF __int64 v29; // [rsp+60h] [rbp-A0h] unsigned __int64 v30; // [rsp+68h] [rbp-98h] void *Block[2]; // [rsp+70h] [rbp-90h] BYREF __int128 v32; // [rsp+80h] [rbp-80h] char Destination[16]; // [rsp+90h] [rbp-70h] BYREF __int128 v34; // [rsp+A0h] [rbp-60h] __int128 v35; // [rsp+B0h] [rbp-50h] __int128 v36; // [rsp+C0h] [rbp-40h] __int128 v37; // [rsp+D0h] [rbp-30h] __int128 v38; // [rsp+E0h] [rbp-20h] int v39; // [rsp+F0h] [rbp-10h] v2 = *((_QWORD *)this + 1); if ( v2 ) (*(void (__fastcall **)(__int64, _QWORD))(*(_QWORD *)v2 + 8LL))(v2, *((_QWORD *)this + 2)); v3 = *((_QWORD *)this + 2); if ( v3 && *(_DWORD *)(v3 + 760) ) { v4 = (_QWORD *)cocos2d::CCScriptEngineManager::sharedManager(); (*(void (__fastcall **)(_QWORD, _QWORD, const char *, __int64, _QWORD))(*(_QWORD *)*v4 + 136LL))( *v4, *(unsigned int *)(v3 + 760), "began", v3, 0); } v5 = (_BYTE *)(*(__int64 (__fastcall **)(__int64))(*(_QWORD *)(*((_QWORD *)this + 4) + 600LL) + 8LL))(*((_QWORD *)this + 4) + 600LL); *(_OWORD *)v25 = 0; v26 = 0; v27 = 0; v6 = -1; v7 = -1; do ++v7; while ( v5[v7] ); sub_180003AB0(v25, v5, v7); if ( v26 ) goto LABEL_30; v8 = v27; if ( v27 >= 0xB ) { v9 = v25; if ( v27 > 0xF ) v9 = (char **)v25[0]; v26 = 11; memmove(v9, "Enter value", 0xBu); *((_BYTE *)v9 + 11) = 0; goto LABEL_30; } v10 = v27 >> 1; v11 = 0x7FFFFFFFFFFFFFFFLL; if ( v27 > 0x7FFFFFFFFFFFFFFFLL - (v27 >> 1) ) { v12 = 0x8000000000000027uLL; LABEL_15: v13 = operator new(v12); if ( !v13 ) goto LABEL_53; v14 = (_WORD *)(((unsigned __int64)v13 + 39) & 0xFFFFFFFFFFFFFFE0uLL); *((_QWORD *)v14 - 1) = v13; goto LABEL_25; } v11 = 15; if ( v27 + v10 > 0xF ) v11 = v27 + v10; if ( (unsigned __int64)(v11 + 1) >= 0x1000 ) { v12 = v11 + 40; if ( v11 + 40 < (unsigned __int64)(v11 + 1) ) Concurrency::cancel_current_task(); goto LABEL_15; } if ( v11 == -1 ) v14 = nullptr; else v14 = operator new(v11 + 1); LABEL_25: v26 = 11; v27 = v11; qmemcpy(v14, "Enter valu", 10); v14[5] = (unsigned __int8)aEnterValue[10]; if ( v8 > 0xF ) { v15 = v25[0]; if ( v8 + 1 >= 0x1000 ) { v15 = *((char **)v25[0] - 1); if ( (unsigned __int64)(v25[0] - v15 - 8) > 0x1F ) LABEL_53: invalid_parameter_noinfo_noreturn(); } j_j_free(v15); } v25[0] = (char *)v14; LABEL_30: *(_OWORD *)Destination = 0; v34 = 0; v35 = 0; v36 = 0; v37 = 0; v38 = 0; v39 = 0; v16 = (_BYTE *)(*(__int64 (__fastcall **)(cocos2d::extension::CCEditBoxImplWin *))(*(_QWORD *)this + 104LL))(this); *(_OWORD *)Source = 0; v29 = 0; v30 = 0; v17 = -1; do ++v17; while ( v16[v17] ); sub_180003AB0(Source, v16, v17); if ( v29 ) { v18 = (const char *)Source; if ( v30 > 0xF ) v18 = Source[0]; strncpy(Destination, v18, 0x64u); } v19 = (const char *)v25; if ( v27 > 0xF ) v19 = v25[0]; v20 = CWin32InputBox::InputBox("Input", v19, Destination, 0x64u, 0, nullptr); if ( v20 == 1 ) (*(void (__fastcall **)(cocos2d::extension::CCEditBoxImplWin *, char *))(*(_QWORD *)this + 96LL))(this, Destination); if ( *((_QWORD *)this + 1) ) { if ( v20 == 1 ) { v21 = (_BYTE *)(*(__int64 (__fastcall **)(cocos2d::extension::CCEditBoxImplWin *))(*(_QWORD *)this + 104LL))(this); *(_OWORD *)Block = 0; v32 = 0; do ++v6; while ( v21[v6] ); sub_180003AB0(Block, v21, v6); (*(void (__fastcall **)(_QWORD, _QWORD, void **))(**((_QWORD **)this + 1) + 24LL))( *((_QWORD *)this + 1), *((_QWORD *)this + 2), Block); if ( *((_QWORD *)&v32 + 1) > 0xFu ) { v22 = Block[0]; if ( (unsigned __int64)(*((_QWORD *)&v32 + 1) + 1LL) >= 0x1000 ) { v22 = *((void **)Block[0] - 1); if ( (unsigned __int64)((char *)Block[0] - (char *)v22 - 8) > 0x1F ) invalid_parameter_noinfo_noreturn(); } j_j_free(v22); } } (*(void (__fastcall **)(_QWORD, _QWORD))(**((_QWORD **)this + 1) + 16LL))( *((_QWORD *)this + 1), *((_QWORD *)this + 2)); (*(void (__fastcall **)(_QWORD, _QWORD))(**((_QWORD **)this + 1) + 32LL))( *((_QWORD *)this + 1), *((_QWORD *)this + 2)); } if ( v30 > 0xF ) { v23 = Source[0]; if ( v30 + 1 >= 0x1000 ) { v23 = *((char **)Source[0] - 1); if ( (unsigned __int64)(Source[0] - v23 - 8) > 0x1F ) goto LABEL_53; } j_j_free(v23); } v29 = 0; v30 = 15; LOBYTE(Source[0]) = 0; if ( v27 > 0xF ) { v24 = v25[0]; if ( v27 + 1 >= 0x1000 ) { v24 = *((char **)v25[0] - 1); if ( (unsigned __int64)(v25[0] - v24 - 8) > 0x1F ) invalid_parameter_noinfo_noreturn(); } j_j_free(v24); } }