{"type": "func", "start": 6442576384, "end": 6442576869, "name": "CWin32InputBox::Utf8ToAnsi", "pseudocode": "// \n// CWin32InputBox::Utf8ToAnsi from 0x18001ea00 to 0x18001ebe5 (485 bytes)\n// \n// 5 xrefs:\n// > CWin32InputBox::InitDialog @ 0x18001e390\n// > CWin32InputBox::InitDialog @ 0x18001e420\n// > CWin32InputBox::InitDialog @ 0x18001e4fd\n// > <???> @ 0x18002fdf8\n// > <???> @ 0x18004b124\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\nvoid **__fastcall CWin32InputBox::Utf8ToAnsi(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(0xFDE9u, 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(0xFDE9u, 0, v8, -1, (LPWSTR)lpWideCharStr, 2 * v6 + 2);\n    v9 = WideCharToMultiByte(0, 0, (LPCWCH)lpWideCharStr, -1, nullptr, 0, nullptr, nullptr) + 1;\n    v10 = malloc(v9);\n    memset(v10, 0, v9);\n    WideCharToMultiByte(0, 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::Utf8ToAnsi from 0x18001ea00 to 0x18001ebe5 (485 bytes)\n; \n; 5 xrefs:\n; > CWin32InputBox::InitDialog @ 0x18001e390\n; > CWin32InputBox::InitDialog @ 0x18001e420\n; > CWin32InputBox::InitDialog @ 0x18001e4fd\n; > <???> @ 0x18002fdf8\n; > <???> @ 0x18004b124\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, 0x18001ea00\npush    rbp                                                            ; +0x5, 0x18001ea05\npush    rsi                                                            ; +0x6, 0x18001ea06\npush    rdi                                                            ; +0x7, 0x18001ea07\npush    r12                                                            ; +0x8, 0x18001ea08\npush    r13                                                            ; +0xa, 0x18001ea0a\npush    r14                                                            ; +0xc, 0x18001ea0c\npush    r15                                                            ; +0xe, 0x18001ea0e\nsub     rsp, 60h                                                       ; +0x10, 0x18001ea10\nmov     rax, cs:__security_cookie                                      ; +0x14, 0x18001ea14\nxor     rax, rsp                                                       ; +0x1b, 0x18001ea1b\nmov     [rsp+98h+var_40], rax                                          ; +0x1e, 0x18001ea1e\nmov     r14, rdx                                                       ; +0x23, 0x18001ea23\nmov     r15, rcx                                                       ; +0x26, 0x18001ea26\nmov     [rsp+98h+var_50], rcx                                          ; +0x29, 0x18001ea29\nmov     [rsp+98h+var_48], rdx                                          ; +0x2e, 0x18001ea2e\nxor     r13d, r13d                                                     ; +0x33, 0x18001ea33\nmov     [rsp+98h+var_58], r13d                                         ; +0x36, 0x18001ea36\nxorps   xmm0, xmm0                                                     ; +0x3b, 0x18001ea3b\nmovups  xmmword ptr [rcx], xmm0                                        ; +0x3e, 0x18001ea3e\nmov     [rcx+10h], r13                                                 ; +0x41, 0x18001ea41\nmov     qword ptr [rcx+18h], 0Fh                                       ; +0x45, 0x18001ea45\nmov     [rcx], r13b                                                    ; +0x4d, 0x18001ea4d\nmov     [rsp+98h+var_58], 1                                            ; +0x50, 0x18001ea50\ncmp     [rdx+10h], r13                                                 ; +0x58, 0x18001ea58\njbe     loc_18001EB70                                                  ; +0x5c, 0x18001ea5c\nmov     r8, rdx                                                        ; +0x62, 0x18001ea62\ncmp     qword ptr [rdx+18h], 0Fh                                       ; +0x65, 0x18001ea65\njbe     short loc_18001EA6F                                            ; +0x6a, 0x18001ea6a\nmov     r8, [rdx]; lpMultiByteStr                                      ; +0x6c, 0x18001ea6c\nmov     [rsp+98h+cchWideChar], r13d; cchWideChar                       ; +0x6f, 0x18001ea6f\nmov     [rsp+98h+lpWideCharStr], r13; lpWideCharStr                    ; +0x74, 0x18001ea74\nmov     rbx, 0FFFFFFFFFFFFFFFFh                                        ; +0x79, 0x18001ea79\nmov     r9d, ebx; cbMultiByte                                          ; +0x80, 0x18001ea80\nxor     edx, edx; dwFlags                                              ; +0x83, 0x18001ea83\nmov     ecx, 0FDE9h; CodePage                                          ; +0x85, 0x18001ea85\ncall    cs:MultiByteToWideChar                                         ; +0x8a, 0x18001ea8a\nmov     esi, eax                                                       ; +0x90, 0x18001ea90\ninc     eax                                                            ; +0x92, 0x18001ea92\nmovsxd  rdi, eax                                                       ; +0x94, 0x18001ea94\nadd     rdi, rdi                                                       ; +0x97, 0x18001ea97\nmov     rcx, rdi; Size                                                 ; +0x9a, 0x18001ea9a\ncall    cs:__imp_malloc                                                ; +0x9d, 0x18001ea9d\nmov     r12, rax                                                       ; +0xa3, 0x18001eaa3\nmov     r8, rdi; Size                                                  ; +0xa6, 0x18001eaa6\nxor     edx, edx; Val                                                  ; +0xa9, 0x18001eaa9\nmov     rcx, rax; void *                                               ; +0xab, 0x18001eaab\ncall    memset                                                         ; +0xae, 0x18001eaae\nmov     r8, r14                                                        ; +0xb3, 0x18001eab3\ncmp     qword ptr [r14+18h], 0Fh                                       ; +0xb6, 0x18001eab6\njbe     short loc_18001EAC0                                            ; +0xbb, 0x18001eabb\nmov     r8, [r14]; lpMultiByteStr                                      ; +0xbd, 0x18001eabd\nlea     eax, ds:2[rsi*2]                                               ; +0xc0, 0x18001eac0\nmov     [rsp+98h+cchWideChar], eax; cchWideChar                        ; +0xc7, 0x18001eac7\nmov     [rsp+98h+lpWideCharStr], r12; lpWideCharStr                    ; +0xcb, 0x18001eacb\nmov     r9d, ebx; cbMultiByte                                          ; +0xd0, 0x18001ead0\nxor     edx, edx; dwFlags                                              ; +0xd3, 0x18001ead3\nmov     ecx, 0FDE9h; CodePage                                          ; +0xd5, 0x18001ead5\ncall    cs:MultiByteToWideChar                                         ; +0xda, 0x18001eada\nmov     [rsp+98h+lpUsedDefaultChar], r13; lpUsedDefaultChar            ; +0xe0, 0x18001eae0\nmov     [rsp+98h+lpDefaultChar], r13; lpDefaultChar                    ; +0xe5, 0x18001eae5\nmov     [rsp+98h+cchWideChar], r13d; cbMultiByte                       ; +0xea, 0x18001eaea\nmov     [rsp+98h+lpWideCharStr], r13; lpMultiByteStr                   ; +0xef, 0x18001eaef\nmov     r9d, ebx; cchWideChar                                          ; +0xf4, 0x18001eaf4\nmov     r8, r12; lpWideCharStr                                         ; +0xf7, 0x18001eaf7\nxor     edx, edx; dwFlags                                              ; +0xfa, 0x18001eafa\nxor     ecx, ecx; CodePage                                             ; +0xfc, 0x18001eafc\ncall    cs:WideCharToMultiByte                                         ; +0xfe, 0x18001eafe\nlea     esi, [rax+1]                                                   ; +0x104, 0x18001eb04\nmovsxd  rdi, esi                                                       ; +0x107, 0x18001eb07\nmov     rcx, rdi; Size                                                 ; +0x10a, 0x18001eb0a\ncall    cs:__imp_malloc                                                ; +0x10d, 0x18001eb0d\nmov     rbp, rax                                                       ; +0x113, 0x18001eb13\nmov     r8, rdi; Size                                                  ; +0x116, 0x18001eb16\nxor     edx, edx; Val                                                  ; +0x119, 0x18001eb19\nmov     rcx, rax; void *                                               ; +0x11b, 0x18001eb1b\ncall    memset                                                         ; +0x11e, 0x18001eb1e\nmov     [rsp+98h+lpUsedDefaultChar], r13; lpUsedDefaultChar            ; +0x123, 0x18001eb23\nmov     [rsp+98h+lpDefaultChar], r13; lpDefaultChar                    ; +0x128, 0x18001eb28\nmov     [rsp+98h+cchWideChar], esi; cbMultiByte                        ; +0x12d, 0x18001eb2d\nmov     [rsp+98h+lpWideCharStr], rbp; lpMultiByteStr                   ; +0x131, 0x18001eb31\nmov     r9d, ebx; cchWideChar                                          ; +0x136, 0x18001eb36\nmov     r8, r12; lpWideCharStr                                         ; +0x139, 0x18001eb39\nxor     edx, edx; dwFlags                                              ; +0x13c, 0x18001eb3c\nxor     ecx, ecx; CodePage                                             ; +0x13e, 0x18001eb3e\ncall    cs:WideCharToMultiByte                                         ; +0x140, 0x18001eb40\ninc     rbx                                                            ; +0x146, 0x18001eb46\ncmp     byte ptr [rbx+rbp], 0                                          ; +0x149, 0x18001eb49\njnz     short loc_18001EB46                                            ; +0x14d, 0x18001eb4d\nmov     r8, rbx; Size                                                  ; +0x14f, 0x18001eb4f\nmov     rdx, rbp; Src                                                  ; +0x152, 0x18001eb52\nmov     rcx, r15; void *                                               ; +0x155, 0x18001eb55\ncall    sub_180003BC0                                                  ; +0x158, 0x18001eb58\nmov     rcx, rbp; Block                                                ; +0x15d, 0x18001eb5d\ncall    cs:__imp_free                                                  ; +0x160, 0x18001eb60\nmov     rcx, r12; Block                                                ; +0x166, 0x18001eb66\ncall    cs:__imp_free                                                  ; +0x169, 0x18001eb69\nnop                                                                    ; +0x16f, 0x18001eb6f\nmov     rdx, [r14+18h]                                                 ; +0x170, 0x18001eb70\ncmp     rdx, 0Fh                                                       ; +0x174, 0x18001eb74\njbe     short loc_18001EBA6                                            ; +0x178, 0x18001eb78\ninc     rdx                                                            ; +0x17a, 0x18001eb7a\nmov     rcx, [r14]                                                     ; +0x17d, 0x18001eb7d\ncmp     rdx, 1000h                                                     ; +0x180, 0x18001eb80\njb      short loc_18001EBA1                                            ; +0x187, 0x18001eb87\nadd     rdx, 27h ; '''                                                 ; +0x189, 0x18001eb89\nmov     r8, [rcx-8]                                                    ; +0x18d, 0x18001eb8d\nsub     rcx, r8                                                        ; +0x191, 0x18001eb91\nlea     rax, [rcx-8]                                                   ; +0x194, 0x18001eb94\ncmp     rax, 1Fh                                                       ; +0x198, 0x18001eb98\nja      short loc_18001EBDE                                            ; +0x19c, 0x18001eb9c\nmov     rcx, r8; Block                                                 ; +0x19e, 0x18001eb9e\ncall    j_j_free                                                       ; +0x1a1, 0x18001eba1\nmov     [r14+10h], r13                                                 ; +0x1a6, 0x18001eba6\nmov     qword ptr [r14+18h], 0Fh                                       ; +0x1aa, 0x18001ebaa\nmov     byte ptr [r14], 0                                              ; +0x1b2, 0x18001ebb2\nmov     rax, r15                                                       ; +0x1b6, 0x18001ebb6\nmov     rcx, [rsp+98h+var_40]                                          ; +0x1b9, 0x18001ebb9\nxor     rcx, rsp; StackCookie                                          ; +0x1be, 0x18001ebbe\ncall    __security_check_cookie                                        ; +0x1c1, 0x18001ebc1\nmov     rbx, [rsp+98h+arg_10]                                          ; +0x1c6, 0x18001ebc6\nadd     rsp, 60h                                                       ; +0x1ce, 0x18001ebce\npop     r15                                                            ; +0x1d2, 0x18001ebd2\npop     r14                                                            ; +0x1d4, 0x18001ebd4\npop     r13                                                            ; +0x1d6, 0x18001ebd6\npop     r12                                                            ; +0x1d8, 0x18001ebd8\npop     rdi                                                            ; +0x1da, 0x18001ebda\npop     rsi                                                            ; +0x1db, 0x18001ebdb\npop     rbp                                                            ; +0x1dc, 0x18001ebdc\nretn                                                                   ; +0x1dd, 0x18001ebdd\ncall    cs:_invalid_parameter_noinfo_noreturn                          ; +0x1de, 0x18001ebde\ndb 0CCh                                                                ; +0x1e4, 0x18001ebe4", "xrefs": ["CWin32InputBox::InitDialog @ 0x18001e390", "CWin32InputBox::InitDialog @ 0x18001e420", "CWin32InputBox::InitDialog @ 0x18001e4fd", "<???> @ 0x18002fdf8", "<???> @ 0x18004b124"], "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"}