{"type": "func", "start": 6442575488, "end": 6442575876, "name": "CWin32InputBox::DlgProc", "pseudocode": "// \n// CWin32InputBox::DlgProc from 0x18001e680 to 0x18001e804 (388 bytes)\n// \n// 4 xrefs:\n// > CWin32InputBox::InputBoxEx @ 0x18001e0fc\n// > CWin32InputBox::InputBox @ 0x18001e2aa\n// > <???> @ 0x18002fdf8\n// > <???> @ 0x18004b10c\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\nINT_PTR __fastcall CWin32InputBox::DlgProc(HWND a1, int a2, unsigned __int16 a3, CWin32InputBox *a4)\n{\n  HWND *WindowLongPtrW; // r14\n  int v9; // ebx\n  unsigned __int64 v10; // rcx\n  size_t v12; // r8\n  _BYTE *v13; // rdx\n  const char *v14; // rdx\n  char *v15; // rcx\n  __int128 v16; // [rsp+20h] [rbp-78h] BYREF\n  __int64 v17; // [rsp+30h] [rbp-68h]\n  __int64 v18; // [rsp+38h] [rbp-60h]\n  char *Source[3]; // [rsp+48h] [rbp-50h] BYREF\n  unsigned __int64 v20; // [rsp+60h] [rbp-38h]\n\n  WindowLongPtrW = (HWND *)GetWindowLongPtrW(a1, -21);\n  v9 = a2 - 272;\n  if ( v9 )\n  {\n    if ( v9 != 1 )\n      return 0;\n    v10 = 0;\n    while ( a3 != *(_QWORD *)((char *)&unk_1800234D8 + v10) )\n    {\n      v10 += 8LL;\n      if ( v10 >= 0x10 )\n        return 0;\n    }\n    GetWindowTextA(WindowLongPtrW[1], *((LPSTR *)*WindowLongPtrW + 8), *((_DWORD *)*WindowLongPtrW + 18));\n    v12 = -1;\n    v13 = *((_BYTE **)*WindowLongPtrW + 8);\n    v16 = 0;\n    v17 = 0;\n    v18 = 0;\n    do\n      ++v12;\n    while ( v13[v12] );\n    sub_180003AB0(&v16, v13, v12);\n    CWin32InputBox::AnsiToUtf8(Source);\n    memset(*((void **)*WindowLongPtrW + 8), 0, *((unsigned int *)*WindowLongPtrW + 18));\n    v14 = (const char *)Source;\n    if ( v20 > 0xF )\n      v14 = Source[0];\n    strncpy(*((char **)*WindowLongPtrW + 8), v14, (unsigned int)(*((_DWORD *)*WindowLongPtrW + 18) - 1));\n    EndDialog(a1, a3);\n    if ( v20 > 0xF )\n    {\n      v15 = Source[0];\n      if ( v20 + 1 >= 0x1000 )\n      {\n        v15 = *((char **)Source[0] - 1);\n        if ( (unsigned __int64)(Source[0] - v15 - 8) > 0x1F )\n          invalid_parameter_noinfo_noreturn();\n      }\n      j_j_free(v15);\n    }\n  }\n  else\n  {\n    SetWindowLongPtrW(a1, -21, (LONG_PTR)a4);\n    *(_QWORD *)(*(_QWORD *)a4 + 104LL) = a1;\n    CWin32InputBox::InitDialog(a4);\n  }\n  return 1;\n}", "assembly": "; \n; CWin32InputBox::DlgProc from 0x18001e680 to 0x18001e804 (388 bytes)\n; \n; 4 xrefs:\n; > CWin32InputBox::InputBoxEx @ 0x18001e0fc\n; > CWin32InputBox::InputBox @ 0x18001e2aa\n; > <???> @ 0x18002fdf8\n; > <???> @ 0x18004b10c\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\npush    rbx                                                            ; +0x0, 0x18001e680\npush    rbp                                                            ; +0x2, 0x18001e682\npush    rsi                                                            ; +0x3, 0x18001e683\npush    rdi                                                            ; +0x4, 0x18001e684\npush    r14                                                            ; +0x5, 0x18001e685\nsub     rsp, 70h                                                       ; +0x7, 0x18001e687\nmov     rax, cs:__security_cookie                                      ; +0xb, 0x18001e68b\nxor     rax, rsp                                                       ; +0x12, 0x18001e692\nmov     [rsp+98h+var_30], rax                                          ; +0x15, 0x18001e695\nmov     ebx, edx                                                       ; +0x1a, 0x18001e69a\nmov     rdi, r9                                                        ; +0x1c, 0x18001e69c\nmov     edx, 0FFFFFFEBh; nIndex                                        ; +0x1f, 0x18001e69f\nmov     rbp, r8                                                        ; +0x24, 0x18001e6a4\nmov     rsi, rcx                                                       ; +0x27, 0x18001e6a7\ncall    cs:GetWindowLongPtrW                                           ; +0x2a, 0x18001e6aa\nmov     r14, rax                                                       ; +0x30, 0x18001e6b0\nsub     ebx, 110h                                                      ; +0x33, 0x18001e6b3\njz      loc_18001E7C7                                                  ; +0x39, 0x18001e6b9\ncmp     ebx, 1                                                         ; +0x3f, 0x18001e6bf\njnz     short loc_18001E6E2                                            ; +0x42, 0x18001e6c2\nxor     edi, edi                                                       ; +0x44, 0x18001e6c4\nmovzx   ebx, bp                                                        ; +0x46, 0x18001e6c6\nmov     ecx, edi                                                       ; +0x49, 0x18001e6c9\nlea     rax, unk_1800234D8                                             ; +0x4b, 0x18001e6cb\ncmp     rbx, [rcx+rax]                                                 ; +0x52, 0x18001e6d2\njz      short loc_18001E6E9                                            ; +0x56, 0x18001e6d6\nadd     rcx, 8                                                         ; +0x58, 0x18001e6d8\ncmp     rcx, 10h                                                       ; +0x5c, 0x18001e6dc\njb      short loc_18001E6D2                                            ; +0x60, 0x18001e6e0\nxor     eax, eax                                                       ; +0x62, 0x18001e6e2\njmp     loc_18001E7EC                                                  ; +0x64, 0x18001e6e4\nmov     rdx, [r14]                                                     ; +0x69, 0x18001e6e9\nmov     rcx, [r14+8]; hWnd                                             ; +0x6c, 0x18001e6ec\nmov     r8d, [rdx+48h]; nMaxCount                                      ; +0x70, 0x18001e6f0\nmov     rdx, [rdx+40h]; lpString                                       ; +0x74, 0x18001e6f4\ncall    cs:GetWindowTextA                                              ; +0x78, 0x18001e6f8\nmov     rax, [r14]                                                     ; +0x7e, 0x18001e6fe\nxorps   xmm0, xmm0                                                     ; +0x81, 0x18001e701\nmov     r8, 0FFFFFFFFFFFFFFFFh                                         ; +0x84, 0x18001e704\nmov     rdx, [rax+40h]                                                 ; +0x8b, 0x18001e70b\nmovups  [rsp+98h+var_78], xmm0                                         ; +0x8f, 0x18001e70f\nmov     [rsp+98h+var_68], rdi                                          ; +0x94, 0x18001e714\nmov     [rsp+98h+var_60], rdi                                          ; +0x99, 0x18001e719\nxchg    ax, ax                                                         ; +0x9e, 0x18001e71e\ninc     r8                                                             ; +0xa0, 0x18001e720\ncmp     [rdx+r8], dil                                                  ; +0xa3, 0x18001e723\njnz     short loc_18001E720                                            ; +0xa7, 0x18001e727\nlea     rcx, [rsp+98h+var_78]                                          ; +0xa9, 0x18001e729\ncall    sub_180003AB0                                                  ; +0xae, 0x18001e72e\nlea     rdx, [rsp+98h+var_78]                                          ; +0xb3, 0x18001e733\nlea     rcx, [rsp+98h+Source]; void *                                  ; +0xb8, 0x18001e738\ncall    ?AnsiToUtf8@CWin32InputBox@@SA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V23@@Z; CWin32InputBox::AnsiToUtf8(std::string) ; +0xbd, 0x18001e73d\nmov     rcx, [r14]                                                     ; +0xc2, 0x18001e742\nxor     edx, edx; Val                                                  ; +0xc5, 0x18001e745\nmov     r8d, [rcx+48h]; Size                                           ; +0xc7, 0x18001e747\nmov     rcx, [rcx+40h]; void *                                         ; +0xcb, 0x18001e74b\ncall    memset                                                         ; +0xcf, 0x18001e74f\nmov     rcx, [r14]                                                     ; +0xd4, 0x18001e754\nlea     rdx, [rsp+98h+Source]                                          ; +0xd7, 0x18001e757\ncmp     [rsp+98h+var_38], 0Fh                                          ; +0xdc, 0x18001e75c\ncmova   rdx, [rsp+98h+Source]; Source                                  ; +0xe2, 0x18001e762\nmov     r8d, [rcx+48h]                                                 ; +0xe8, 0x18001e768\nmov     rcx, [rcx+40h]; Destination                                    ; +0xec, 0x18001e76c\ndec     r8d; Count                                                     ; +0xf0, 0x18001e770\ncall    cs:strncpy                                                     ; +0xf3, 0x18001e773\nmov     rdx, rbx; nResult                                              ; +0xf9, 0x18001e779\nmov     rcx, rsi; hDlg                                                 ; +0xfc, 0x18001e77c\ncall    cs:EndDialog                                                   ; +0xff, 0x18001e77f\nmov     rdx, [rsp+98h+var_38]                                          ; +0x105, 0x18001e785\ncmp     rdx, 0Fh                                                       ; +0x10a, 0x18001e78a\njbe     short loc_18001E7E7                                            ; +0x10e, 0x18001e78e\nmov     rcx, [rsp+98h+Source]; Block                                   ; +0x110, 0x18001e790\ninc     rdx                                                            ; +0x115, 0x18001e795\nmov     rax, rcx                                                       ; +0x118, 0x18001e798\ncmp     rdx, 1000h                                                     ; +0x11b, 0x18001e79b\njb      short loc_18001E7C0                                            ; +0x122, 0x18001e7a2\nmov     rcx, [rcx-8]                                                   ; +0x124, 0x18001e7a4\nadd     rdx, 27h ; '''                                                 ; +0x128, 0x18001e7a8\nsub     rax, rcx                                                       ; +0x12c, 0x18001e7ac\nadd     rax, 0FFFFFFFFFFFFFFF8h                                        ; +0x12f, 0x18001e7af\ncmp     rax, 1Fh                                                       ; +0x133, 0x18001e7b3\njbe     short loc_18001E7C0                                            ; +0x137, 0x18001e7b7\ncall    cs:_invalid_parameter_noinfo_noreturn                          ; +0x139, 0x18001e7b9\nalign 20h                                                              ; +0x13f, 0x18001e7bf\ncall    j_j_free                                                       ; +0x140, 0x18001e7c0\njmp     short loc_18001E7E7                                            ; +0x145, 0x18001e7c5\nmov     r8, rdi; dwNewLong                                             ; +0x147, 0x18001e7c7\nmov     edx, 0FFFFFFEBh; nIndex                                        ; +0x14a, 0x18001e7ca\nmov     rcx, rsi; hWnd                                                 ; +0x14f, 0x18001e7cf\ncall    cs:SetWindowLongPtrW                                           ; +0x152, 0x18001e7d2\nmov     rax, [rdi]                                                     ; +0x158, 0x18001e7d8\nmov     rcx, rdi; this                                                 ; +0x15b, 0x18001e7db\nmov     [rax+68h], rsi                                                 ; +0x15e, 0x18001e7de\ncall    ?InitDialog@CWin32InputBox@@AEAAXXZ; CWin32InputBox::InitDialog(void) ; +0x162, 0x18001e7e2\nmov     eax, 1                                                         ; +0x167, 0x18001e7e7\nmov     rcx, [rsp+98h+var_30]                                          ; +0x16c, 0x18001e7ec\nxor     rcx, rsp; StackCookie                                          ; +0x171, 0x18001e7f1\ncall    __security_check_cookie                                        ; +0x174, 0x18001e7f4\nadd     rsp, 70h                                                       ; +0x179, 0x18001e7f9\npop     r14                                                            ; +0x17d, 0x18001e7fd\npop     rdi                                                            ; +0x17f, 0x18001e7ff\npop     rsi                                                            ; +0x180, 0x18001e800\npop     rbp                                                            ; +0x181, 0x18001e801\npop     rbx                                                            ; +0x182, 0x18001e802\nretn                                                                   ; +0x183, 0x18001e803", "xrefs": ["CWin32InputBox::InputBoxEx @ 0x18001e0fc", "CWin32InputBox::InputBox @ 0x18001e2aa", "<???> @ 0x18002fdf8", "<???> @ 0x18004b10c"], "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"}