{"type": "func", "start": 6442575888, "end": 6442576373, "name": "CWin32InputBox::AnsiToUtf8", "pseudocode": "// \n// CWin32InputBox::AnsiToUtf8 from 0x18001e810 to 0x18001e9f5 (485 bytes)\n// \n// 3 xrefs:\n// > CWin32InputBox::DlgProc @ 0x18001e73d\n// > <???> @ 0x18002fdf8\n// > <???> @ 0x18004b118\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// Hidden C++ exception states: #wind=2\nvoid **__fastcall CWin32InputBox::AnsiToUtf8(void **a1, __int64 a2)\n{\n  const CHAR *v4; // r8\n  size_t v5; // rbx\n  int v6; // esi\n  void *lpWideCharStr; // r12\n  const CHAR *v8; // r8\n  int v9; // esi\n  void *v10; // rbp\n  unsigned __int64 v11; // rdx\n  _QWORD *v12; // rcx\n\n  *(_OWORD *)a1 = 0;\n  a1[2] = nullptr;\n  a1[3] = (void *)15;\n  *(_BYTE *)a1 = 0;\n  if ( *(_QWORD *)(a2 + 16) )\n  {\n    v4 = (const CHAR *)a2;\n    if ( *(_QWORD *)(a2 + 24) > 0xFu )\n      v4 = *(const CHAR **)a2;\n    v5 = -1;\n    v6 = MultiByteToWideChar(0, 0, v4, -1, nullptr, 0);\n    lpWideCharStr = malloc(2LL * (v6 + 1));\n    memset(lpWideCharStr, 0, 2LL * (v6 + 1));\n    v8 = (const CHAR *)a2;\n    if ( *(_QWORD *)(a2 + 24) > 0xFu )\n      v8 = *(const CHAR **)a2;\n    MultiByteToWideChar(0, 0, v8, -1, (LPWSTR)lpWideCharStr, 2 * v6 + 2);\n    v9 = WideCharToMultiByte(0xFDE9u, 0, (LPCWCH)lpWideCharStr, -1, nullptr, 0, nullptr, nullptr) + 1;\n    v10 = malloc(v9);\n    memset(v10, 0, v9);\n    WideCharToMultiByte(0xFDE9u, 0, (LPCWCH)lpWideCharStr, -1, (LPSTR)v10, v9, nullptr, nullptr);\n    do\n      ++v5;\n    while ( *((_BYTE *)v10 + v5) );\n    sub_180003BC0(a1, v10, v5);\n    free(v10);\n    free(lpWideCharStr);\n  }\n  v11 = *(_QWORD *)(a2 + 24);\n  if ( v11 > 0xF )\n  {\n    v12 = *(_QWORD **)a2;\n    if ( v11 + 1 >= 0x1000 )\n    {\n      if ( (unsigned __int64)v12 - *(v12 - 1) - 8 > 0x1F )\n        invalid_parameter_noinfo_noreturn();\n      v12 = (_QWORD *)*(v12 - 1);\n    }\n    j_j_free(v12);\n  }\n  *(_QWORD *)(a2 + 16) = 0;\n  *(_QWORD *)(a2 + 24) = 15;\n  *(_BYTE *)a2 = 0;\n  return a1;\n}", "assembly": "; \n; CWin32InputBox::AnsiToUtf8 from 0x18001e810 to 0x18001e9f5 (485 bytes)\n; \n; 3 xrefs:\n; > CWin32InputBox::DlgProc @ 0x18001e73d\n; > <???> @ 0x18002fdf8\n; > <???> @ 0x18004b118\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_10], rbx                                              ; +0x0, 0x18001e810\npush    rbp                                                            ; +0x5, 0x18001e815\npush    rsi                                                            ; +0x6, 0x18001e816\npush    rdi                                                            ; +0x7, 0x18001e817\npush    r12                                                            ; +0x8, 0x18001e818\npush    r13                                                            ; +0xa, 0x18001e81a\npush    r14                                                            ; +0xc, 0x18001e81c\npush    r15                                                            ; +0xe, 0x18001e81e\nsub     rsp, 60h                                                       ; +0x10, 0x18001e820\nmov     rax, cs:__security_cookie                                      ; +0x14, 0x18001e824\nxor     rax, rsp                                                       ; +0x1b, 0x18001e82b\nmov     [rsp+98h+var_40], rax                                          ; +0x1e, 0x18001e82e\nmov     r14, rdx                                                       ; +0x23, 0x18001e833\nmov     r15, rcx                                                       ; +0x26, 0x18001e836\nmov     [rsp+98h+var_50], rcx                                          ; +0x29, 0x18001e839\nmov     [rsp+98h+var_48], rdx                                          ; +0x2e, 0x18001e83e\nxor     r13d, r13d                                                     ; +0x33, 0x18001e843\nmov     [rsp+98h+var_58], r13d                                         ; +0x36, 0x18001e846\nxorps   xmm0, xmm0                                                     ; +0x3b, 0x18001e84b\nmovups  xmmword ptr [rcx], xmm0                                        ; +0x3e, 0x18001e84e\nmov     [rcx+10h], r13                                                 ; +0x41, 0x18001e851\nmov     qword ptr [rcx+18h], 0Fh                                       ; +0x45, 0x18001e855\nmov     [rcx], r13b                                                    ; +0x4d, 0x18001e85d\nmov     [rsp+98h+var_58], 1                                            ; +0x50, 0x18001e860\ncmp     [rdx+10h], r13                                                 ; +0x58, 0x18001e868\njbe     loc_18001E980                                                  ; +0x5c, 0x18001e86c\nmov     r8, rdx                                                        ; +0x62, 0x18001e872\ncmp     qword ptr [rdx+18h], 0Fh                                       ; +0x65, 0x18001e875\njbe     short loc_18001E87F                                            ; +0x6a, 0x18001e87a\nmov     r8, [rdx]; lpMultiByteStr                                      ; +0x6c, 0x18001e87c\nmov     [rsp+98h+cchWideChar], r13d; cchWideChar                       ; +0x6f, 0x18001e87f\nmov     [rsp+98h+lpWideCharStr], r13; lpWideCharStr                    ; +0x74, 0x18001e884\nmov     rbx, 0FFFFFFFFFFFFFFFFh                                        ; +0x79, 0x18001e889\nmov     r9d, ebx; cbMultiByte                                          ; +0x80, 0x18001e890\nxor     edx, edx; dwFlags                                              ; +0x83, 0x18001e893\nxor     ecx, ecx; CodePage                                             ; +0x85, 0x18001e895\ncall    cs:MultiByteToWideChar                                         ; +0x87, 0x18001e897\nmov     esi, eax                                                       ; +0x8d, 0x18001e89d\ninc     eax                                                            ; +0x8f, 0x18001e89f\nmovsxd  rdi, eax                                                       ; +0x91, 0x18001e8a1\nadd     rdi, rdi                                                       ; +0x94, 0x18001e8a4\nmov     rcx, rdi; Size                                                 ; +0x97, 0x18001e8a7\ncall    cs:__imp_malloc                                                ; +0x9a, 0x18001e8aa\nmov     r12, rax                                                       ; +0xa0, 0x18001e8b0\nmov     r8, rdi; Size                                                  ; +0xa3, 0x18001e8b3\nxor     edx, edx; Val                                                  ; +0xa6, 0x18001e8b6\nmov     rcx, rax; void *                                               ; +0xa8, 0x18001e8b8\ncall    memset                                                         ; +0xab, 0x18001e8bb\nmov     r8, r14                                                        ; +0xb0, 0x18001e8c0\ncmp     qword ptr [r14+18h], 0Fh                                       ; +0xb3, 0x18001e8c3\njbe     short loc_18001E8CD                                            ; +0xb8, 0x18001e8c8\nmov     r8, [r14]; lpMultiByteStr                                      ; +0xba, 0x18001e8ca\nlea     eax, ds:2[rsi*2]                                               ; +0xbd, 0x18001e8cd\nmov     [rsp+98h+cchWideChar], eax; cchWideChar                        ; +0xc4, 0x18001e8d4\nmov     [rsp+98h+lpWideCharStr], r12; lpWideCharStr                    ; +0xc8, 0x18001e8d8\nmov     r9d, ebx; cbMultiByte                                          ; +0xcd, 0x18001e8dd\nxor     edx, edx; dwFlags                                              ; +0xd0, 0x18001e8e0\nxor     ecx, ecx; CodePage                                             ; +0xd2, 0x18001e8e2\ncall    cs:MultiByteToWideChar                                         ; +0xd4, 0x18001e8e4\nmov     [rsp+98h+lpUsedDefaultChar], r13; lpUsedDefaultChar            ; +0xda, 0x18001e8ea\nmov     [rsp+98h+lpDefaultChar], r13; lpDefaultChar                    ; +0xdf, 0x18001e8ef\nmov     [rsp+98h+cchWideChar], r13d; cbMultiByte                       ; +0xe4, 0x18001e8f4\nmov     [rsp+98h+lpWideCharStr], r13; lpMultiByteStr                   ; +0xe9, 0x18001e8f9\nmov     r9d, ebx; cchWideChar                                          ; +0xee, 0x18001e8fe\nmov     r8, r12; lpWideCharStr                                         ; +0xf1, 0x18001e901\nxor     edx, edx; dwFlags                                              ; +0xf4, 0x18001e904\nmov     ecx, 0FDE9h; CodePage                                          ; +0xf6, 0x18001e906\ncall    cs:WideCharToMultiByte                                         ; +0xfb, 0x18001e90b\nlea     esi, [rax+1]                                                   ; +0x101, 0x18001e911\nmovsxd  rdi, esi                                                       ; +0x104, 0x18001e914\nmov     rcx, rdi; Size                                                 ; +0x107, 0x18001e917\ncall    cs:__imp_malloc                                                ; +0x10a, 0x18001e91a\nmov     rbp, rax                                                       ; +0x110, 0x18001e920\nmov     r8, rdi; Size                                                  ; +0x113, 0x18001e923\nxor     edx, edx; Val                                                  ; +0x116, 0x18001e926\nmov     rcx, rax; void *                                               ; +0x118, 0x18001e928\ncall    memset                                                         ; +0x11b, 0x18001e92b\nmov     [rsp+98h+lpUsedDefaultChar], r13; lpUsedDefaultChar            ; +0x120, 0x18001e930\nmov     [rsp+98h+lpDefaultChar], r13; lpDefaultChar                    ; +0x125, 0x18001e935\nmov     [rsp+98h+cchWideChar], esi; cbMultiByte                        ; +0x12a, 0x18001e93a\nmov     [rsp+98h+lpWideCharStr], rbp; lpMultiByteStr                   ; +0x12e, 0x18001e93e\nmov     r9d, ebx; cchWideChar                                          ; +0x133, 0x18001e943\nmov     r8, r12; lpWideCharStr                                         ; +0x136, 0x18001e946\nxor     edx, edx; dwFlags                                              ; +0x139, 0x18001e949\nmov     ecx, 0FDE9h; CodePage                                          ; +0x13b, 0x18001e94b\ncall    cs:WideCharToMultiByte                                         ; +0x140, 0x18001e950\ninc     rbx                                                            ; +0x146, 0x18001e956\ncmp     byte ptr [rbx+rbp], 0                                          ; +0x149, 0x18001e959\njnz     short loc_18001E956                                            ; +0x14d, 0x18001e95d\nmov     r8, rbx; Size                                                  ; +0x14f, 0x18001e95f\nmov     rdx, rbp; Src                                                  ; +0x152, 0x18001e962\nmov     rcx, r15; void *                                               ; +0x155, 0x18001e965\ncall    sub_180003BC0                                                  ; +0x158, 0x18001e968\nmov     rcx, rbp; Block                                                ; +0x15d, 0x18001e96d\ncall    cs:__imp_free                                                  ; +0x160, 0x18001e970\nmov     rcx, r12; Block                                                ; +0x166, 0x18001e976\ncall    cs:__imp_free                                                  ; +0x169, 0x18001e979\nnop                                                                    ; +0x16f, 0x18001e97f\nmov     rdx, [r14+18h]                                                 ; +0x170, 0x18001e980\ncmp     rdx, 0Fh                                                       ; +0x174, 0x18001e984\njbe     short loc_18001E9B6                                            ; +0x178, 0x18001e988\ninc     rdx                                                            ; +0x17a, 0x18001e98a\nmov     rcx, [r14]                                                     ; +0x17d, 0x18001e98d\ncmp     rdx, 1000h                                                     ; +0x180, 0x18001e990\njb      short loc_18001E9B1                                            ; +0x187, 0x18001e997\nadd     rdx, 27h ; '''                                                 ; +0x189, 0x18001e999\nmov     r8, [rcx-8]                                                    ; +0x18d, 0x18001e99d\nsub     rcx, r8                                                        ; +0x191, 0x18001e9a1\nlea     rax, [rcx-8]                                                   ; +0x194, 0x18001e9a4\ncmp     rax, 1Fh                                                       ; +0x198, 0x18001e9a8\nja      short loc_18001E9EE                                            ; +0x19c, 0x18001e9ac\nmov     rcx, r8; Block                                                 ; +0x19e, 0x18001e9ae\ncall    j_j_free                                                       ; +0x1a1, 0x18001e9b1\nmov     [r14+10h], r13                                                 ; +0x1a6, 0x18001e9b6\nmov     qword ptr [r14+18h], 0Fh                                       ; +0x1aa, 0x18001e9ba\nmov     byte ptr [r14], 0                                              ; +0x1b2, 0x18001e9c2\nmov     rax, r15                                                       ; +0x1b6, 0x18001e9c6\nmov     rcx, [rsp+98h+var_40]                                          ; +0x1b9, 0x18001e9c9\nxor     rcx, rsp; StackCookie                                          ; +0x1be, 0x18001e9ce\ncall    __security_check_cookie                                        ; +0x1c1, 0x18001e9d1\nmov     rbx, [rsp+98h+arg_10]                                          ; +0x1c6, 0x18001e9d6\nadd     rsp, 60h                                                       ; +0x1ce, 0x18001e9de\npop     r15                                                            ; +0x1d2, 0x18001e9e2\npop     r14                                                            ; +0x1d4, 0x18001e9e4\npop     r13                                                            ; +0x1d6, 0x18001e9e6\npop     r12                                                            ; +0x1d8, 0x18001e9e8\npop     rdi                                                            ; +0x1da, 0x18001e9ea\npop     rsi                                                            ; +0x1db, 0x18001e9eb\npop     rbp                                                            ; +0x1dc, 0x18001e9ec\nretn                                                                   ; +0x1dd, 0x18001e9ed\ncall    cs:_invalid_parameter_noinfo_noreturn                          ; +0x1de, 0x18001e9ee\ndb 0CCh                                                                ; +0x1e4, 0x18001e9f4", "xrefs": ["CWin32InputBox::DlgProc @ 0x18001e73d", "<???> @ 0x18002fdf8", "<???> @ 0x18004b118"], "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"}