{"type": "func", "start": 6443764756, "end": 6443765545, "name": "__acrt_LCMapStringA_stat", "pseudocode": "// \n// __acrt_LCMapStringA_stat from 0x180140c14 to 0x180140f29 (789 bytes)\n// \n// 3 xrefs:\n// > __acrt_LCMapStringA @ 0x180140f98\n// > <???> @ 0x180203c44\n// > <???> @ 0x180203c50\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 __fastcall __acrt_LCMapStringA_stat(\n        struct __crt_locale_pointers *a1,\n        const wchar_t *a2,\n        DWORD a3,\n        const char *a4,\n        int a5,\n        char *a6,\n        int a7,\n        UINT a8,\n        int a9)\n{\n  int v9; // ebx\n  int v13; // eax\n  UINT v14; // r14d\n  int result; // eax\n  int v16; // r12d\n  unsigned __int64 v17; // rcx\n  unsigned __int64 v18; // rdx\n  __int64 v19; // rax\n  void *v20; // rsp\n  WCHAR *v21; // rsi\n  WCHAR *v22; // rax\n  const wchar_t *v23; // r15\n  int v24; // eax\n  int v25; // edi\n  size_t v26; // rcx\n  __int64 v27; // rax\n  void *v28; // rsp\n  WCHAR *v29; // rbx\n  WCHAR *v30; // rax\n  _BYTE v31[32]; // [rsp+0h] [rbp-50h] BYREF\n  CHAR *v32; // [rsp+20h] [rbp-30h]\n  int v33; // [rsp+28h] [rbp-28h]\n  const CHAR *v34; // [rsp+30h] [rbp-20h]\n  BOOL *v35; // [rsp+38h] [rbp-18h]\n  const wchar_t *v36; // [rsp+50h] [rbp+0h] BYREF\n\n  v9 = a5;\n  v36 = a2;\n  if ( a5 > 0 )\n  {\n    v13 = _strncnt(a4, a5);\n    v9 = v13 + 1;\n    if ( v13 >= a5 )\n      v9 = v13;\n  }\n  v14 = a8;\n  if ( !a8 )\n    v14 = *((_DWORD *)a1->locinfo + 3);\n  result = _acrt_MultiByteToWideChar(v14, a9 != 0 ? 9 : 1, a4, v9, nullptr, 0);\n  v16 = result;\n  if ( result )\n  {\n    v17 = 2LL * result + 16;\n    v18 = v17 & -(__int64)(2LL * result < v17);\n    if ( !v18 )\n    {\n      v21 = nullptr;\n      goto LABEL_17;\n    }\n    if ( v18 > 0x400 )\n    {\n      v22 = (WCHAR *)malloc_base(v17 & -(__int64)(2LL * result < v17));\n      v21 = v22;\n      if ( !v22 )\n      {\nLABEL_17:\n        if ( v21 )\n        {\n          if ( _acrt_MultiByteToWideChar(v14, 1, a4, v9, v21, v16) )\n          {\n            v23 = v36;\n            v24 = _acrt_LCMapStringEx((__int64)v36, a3, v21, v16, nullptr, 0, 0, 0, 0);\n            v25 = v24;\n            if ( v24 )\n            {\n              if ( (a3 & 0x400) != 0 )\n              {\n                if ( !a7 )\n                  goto LABEL_43;\n                if ( v24 <= a7 )\n                {\n                  v25 = _acrt_LCMapStringEx((__int64)v23, a3, v21, v16, (WCHAR *)a6, a7, 0, 0, 0);\n                  if ( v25 )\n                    goto LABEL_43;\n                }\n                goto LABEL_42;\n              }\n              v26 = (2LL * v24 + 16) & -(__int64)(2LL * v24 < (unsigned __int64)(2LL * v24 + 16));\n              if ( !v26 )\n              {\n                v29 = nullptr;\nLABEL_35:\n                if ( v29 )\n                {\n                  if ( _acrt_LCMapStringEx((__int64)v23, a3, v21, v16, v29, v25, 0, 0, 0) )\n                  {\n                    v35 = nullptr;\n                    v34 = nullptr;\n                    if ( a7 )\n                    {\n                      v33 = a7;\n                      v32 = a6;\n                    }\n                    else\n                    {\n                      v33 = 0;\n                      v32 = nullptr;\n                    }\n                    v25 = _acrt_WideCharToMultiByte(v14, 0, v29, v25, v32, v33, v34, v35);\n                    if ( v25 )\n                    {\n                      if ( *((_DWORD *)v29 - 4) == 56797 )\n                        free_base(v29 - 8);\n                      goto LABEL_43;\n                    }\n                  }\n                  if ( *((_DWORD *)v29 - 4) == 56797 )\n                    free_base(v29 - 8);\n                }\n                goto LABEL_42;\n              }\n              if ( v26 > 0x400 )\n              {\n                v30 = (WCHAR *)malloc_base(v26);\n                v29 = v30;\n                if ( !v30 )\n                  goto LABEL_35;\n                *(_DWORD *)v30 = 56797;\n                goto LABEL_33;\n              }\n              v27 = v26 + 15;\n              if ( v26 + 15 < v26 )\n                v27 = 0xFFFFFFFFFFFFFF0LL;\n              v28 = alloca(v27 & 0xFFFFFFFFFFFFFFF0uLL);\n              v29 = (WCHAR *)&v36;\n              if ( v31 != (_BYTE *)-80LL )\n              {\n                LODWORD(v36) = 52428;\nLABEL_33:\n                v29 += 8;\n                goto LABEL_35;\n              }\n            }\n          }\n        }\nLABEL_42:\n        v25 = 0;\nLABEL_43:\n        if ( v21 )\n        {\n          if ( *((_DWORD *)v21 - 4) == 56797 )\n            free_base(v21 - 8);\n        }\n        return v25;\n      }\n      *(_DWORD *)v22 = 56797;\n    }\n    else\n    {\n      v19 = v18 + 15;\n      if ( v18 + 15 < v18 )\n        v19 = 0xFFFFFFFFFFFFFF0LL;\n      v20 = alloca(v19 & 0xFFFFFFFFFFFFFFF0uLL);\n      v21 = (WCHAR *)&v36;\n      if ( v31 == (_BYTE *)-80LL )\n        goto LABEL_42;\n      LODWORD(v36) = 52428;\n    }\n    v21 += 8;\n    goto LABEL_17;\n  }\n  return result;\n}", "assembly": "; \n; __acrt_LCMapStringA_stat from 0x180140c14 to 0x180140f29 (789 bytes)\n; \n; 3 xrefs:\n; > __acrt_LCMapStringA @ 0x180140f98\n; > <???> @ 0x180203c44\n; > <???> @ 0x180203c50\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    rbp                                                            ; +0x0, 0x180140c14\npush    r12                                                            ; +0x2, 0x180140c16\npush    r13                                                            ; +0x4, 0x180140c18\npush    r14                                                            ; +0x6, 0x180140c1a\npush    r15                                                            ; +0x8, 0x180140c1c\nsub     rsp, 60h                                                       ; +0xa, 0x180140c1e\nlea     rbp, [rsp+50h]                                                 ; +0xe, 0x180140c22\nmov     [rbp+30h+arg_0], rbx                                           ; +0x13, 0x180140c27\nmov     [rbp+30h+arg_8], rsi                                           ; +0x17, 0x180140c2b\nmov     [rbp+30h+arg_10], rdi                                          ; +0x1b, 0x180140c2f\nmov     rax, cs:__security_cookie                                      ; +0x1f, 0x180140c33\nxor     rax, rbp                                                       ; +0x26, 0x180140c3a\nmov     [rbp+30h+var_28], rax                                          ; +0x29, 0x180140c3d\nmovsxd  rbx, [rbp+30h+arg_20]                                          ; +0x2d, 0x180140c41\nmov     r15, r9                                                        ; +0x31, 0x180140c45\nmov     [rbp+30h+var_30], rdx                                          ; +0x34, 0x180140c48\nmov     r13d, r8d                                                      ; +0x38, 0x180140c4c\nmov     rdi, rcx                                                       ; +0x3b, 0x180140c4f\ntest    ebx, ebx                                                       ; +0x3e, 0x180140c52\njle     short loc_180140C6A                                            ; +0x40, 0x180140c54\nmov     rdx, rbx; Count                                                ; +0x42, 0x180140c56\nmov     rcx, r9; String                                                ; +0x45, 0x180140c59\ncall    __strncnt                                                      ; +0x48, 0x180140c5c\ncmp     eax, ebx                                                       ; +0x4d, 0x180140c61\nlea     ebx, [rax+1]                                                   ; +0x4f, 0x180140c63\njl      short loc_180140C6A                                            ; +0x52, 0x180140c66\nmov     ebx, eax                                                       ; +0x54, 0x180140c68\nmov     r14d, [rbp+30h+arg_38]                                         ; +0x56, 0x180140c6a\ntest    r14d, r14d                                                     ; +0x5a, 0x180140c6e\njnz     short loc_180140C7A                                            ; +0x5d, 0x180140c71\nmov     rax, [rdi]                                                     ; +0x5f, 0x180140c73\nmov     r14d, [rax+0Ch]                                                ; +0x62, 0x180140c76\nneg     [rbp+30h+arg_40]                                               ; +0x66, 0x180140c7a\nmov     r9d, ebx                                                       ; +0x6c, 0x180140c80\nmov     r8, r15                                                        ; +0x6f, 0x180140c83\nmov     ecx, r14d                                                      ; +0x72, 0x180140c86\nsbb     edx, edx                                                       ; +0x75, 0x180140c89\nand     [rsp+80h+var_58], 0                                            ; +0x77, 0x180140c8b\nand     [rsp+80h+var_60], 0                                            ; +0x7c, 0x180140c90\nand     edx, 8                                                         ; +0x82, 0x180140c96\ninc     edx                                                            ; +0x85, 0x180140c99\ncall    __acrt_MultiByteToWideChar                                     ; +0x87, 0x180140c9b\nmovsxd  r12, eax                                                       ; +0x8c, 0x180140ca0\ntest    eax, eax                                                       ; +0x8f, 0x180140ca3\njz      loc_180140EE1                                                  ; +0x91, 0x180140ca5\nmov     rax, r12                                                       ; +0x97, 0x180140cab\nmov     r8, 0FFFFFFFFFFFFFF0h                                          ; +0x9a, 0x180140cae\nadd     rax, rax                                                       ; +0xa4, 0x180140cb8\nlea     rcx, [rax+10h]                                                 ; +0xa7, 0x180140cbb\ncmp     rax, rcx                                                       ; +0xab, 0x180140cbf\nsbb     rdx, rdx                                                       ; +0xae, 0x180140cc2\nand     rdx, rcx                                                       ; +0xb1, 0x180140cc5\njz      short loc_180140D1D                                            ; +0xb4, 0x180140cc8\ncmp     rdx, 400h                                                      ; +0xb6, 0x180140cca\nja      short loc_180140D01                                            ; +0xbd, 0x180140cd1\nlea     rax, [rdx+0Fh]                                                 ; +0xbf, 0x180140cd3\ncmp     rax, rdx                                                       ; +0xc3, 0x180140cd7\nja      short loc_180140CDF                                            ; +0xc6, 0x180140cda\nmov     rax, r8                                                        ; +0xc8, 0x180140cdc\nand     rax, 0FFFFFFFFFFFFFFF0h                                        ; +0xcb, 0x180140cdf\ncall    __alloca_probe                                                 ; +0xcf, 0x180140ce3\nsub     rsp, rax                                                       ; +0xd4, 0x180140ce8\nlea     rsi, [rsp+80h+var_30]                                          ; +0xd7, 0x180140ceb\ntest    rsi, rsi                                                       ; +0xdc, 0x180140cf0\njz      loc_180140EC7                                                  ; +0xdf, 0x180140cf3\nmov     dword ptr [rsi], 0CCCCh                                        ; +0xe5, 0x180140cf9\njmp     short loc_180140D17                                            ; +0xeb, 0x180140cff\nmov     rcx, rdx; Size                                                 ; +0xed, 0x180140d01\ncall    _malloc_base                                                   ; +0xf0, 0x180140d04\nmov     rsi, rax                                                       ; +0xf5, 0x180140d09\ntest    rax, rax                                                       ; +0xf8, 0x180140d0c\njz      short loc_180140D1F                                            ; +0xfb, 0x180140d0f\nmov     dword ptr [rax], 0DDDDh                                        ; +0xfd, 0x180140d11\nadd     rsi, 10h                                                       ; +0x103, 0x180140d17\njmp     short loc_180140D1F                                            ; +0x107, 0x180140d1b\nxor     esi, esi                                                       ; +0x109, 0x180140d1d\ntest    rsi, rsi                                                       ; +0x10b, 0x180140d1f\njz      loc_180140EC7                                                  ; +0x10e, 0x180140d22\nmov     [rsp+80h+var_58], r12d                                         ; +0x114, 0x180140d28\nmov     r9d, ebx                                                       ; +0x119, 0x180140d2d\nmov     r8, r15                                                        ; +0x11c, 0x180140d30\nmov     [rsp+80h+var_60], rsi                                          ; +0x11f, 0x180140d33\nmov     edx, 1                                                         ; +0x124, 0x180140d38\nmov     ecx, r14d                                                      ; +0x129, 0x180140d3d\ncall    __acrt_MultiByteToWideChar                                     ; +0x12c, 0x180140d40\ntest    eax, eax                                                       ; +0x131, 0x180140d45\njz      loc_180140EC7                                                  ; +0x133, 0x180140d47\nand     [rsp+80h+var_40], 0                                            ; +0x139, 0x180140d4d\nmov     r9d, r12d                                                      ; +0x13f, 0x180140d53\nand     [rsp+80h+var_48], 0                                            ; +0x142, 0x180140d56\nmov     r8, rsi                                                        ; +0x148, 0x180140d5c\nand     [rsp+80h+var_50], 0                                            ; +0x14b, 0x180140d5f\nmov     edx, r13d                                                      ; +0x151, 0x180140d65\nmov     r15, [rbp+30h+var_30]                                          ; +0x154, 0x180140d68\nand     [rsp+80h+var_58], 0                                            ; +0x158, 0x180140d6c\nmov     rcx, r15                                                       ; +0x15d, 0x180140d71\nand     [rsp+80h+var_60], 0                                            ; +0x160, 0x180140d74\ncall    __acrt_LCMapStringEx                                           ; +0x166, 0x180140d7a\nmovsxd  rdi, eax                                                       ; +0x16b, 0x180140d7f\ntest    eax, eax                                                       ; +0x16e, 0x180140d82\njz      loc_180140EC7                                                  ; +0x170, 0x180140d84\nmov     edx, 400h                                                      ; +0x176, 0x180140d8a\ntest    edx, r13d                                                      ; +0x17b, 0x180140d8f\njz      short loc_180140DE6                                            ; +0x17e, 0x180140d92\nmov     eax, [rbp+30h+arg_30]                                          ; +0x180, 0x180140d94\ntest    eax, eax                                                       ; +0x183, 0x180140d97\njz      loc_180140EC9                                                  ; +0x185, 0x180140d99\ncmp     edi, eax                                                       ; +0x18b, 0x180140d9f\njg      loc_180140EC7                                                  ; +0x18d, 0x180140da1\nand     [rsp+80h+var_40], 0                                            ; +0x193, 0x180140da7\nmov     r9d, r12d                                                      ; +0x199, 0x180140dad\nand     [rsp+80h+var_48], 0                                            ; +0x19c, 0x180140db0\nmov     r8, rsi                                                        ; +0x1a2, 0x180140db6\nand     [rsp+80h+var_50], 0                                            ; +0x1a5, 0x180140db9\nmov     edx, r13d                                                      ; +0x1ab, 0x180140dbf\nmov     [rsp+80h+var_58], eax                                          ; +0x1ae, 0x180140dc2\nmov     rcx, r15                                                       ; +0x1b2, 0x180140dc6\nmov     rax, [rbp+30h+arg_28]                                          ; +0x1b5, 0x180140dc9\nmov     [rsp+80h+var_60], rax                                          ; +0x1b9, 0x180140dcd\ncall    __acrt_LCMapStringEx                                           ; +0x1be, 0x180140dd2\nmov     edi, eax                                                       ; +0x1c3, 0x180140dd7\ntest    eax, eax                                                       ; +0x1c5, 0x180140dd9\njnz     loc_180140EC9                                                  ; +0x1c7, 0x180140ddb\njmp     loc_180140EC7                                                  ; +0x1cd, 0x180140de1\nmov     rcx, rdi                                                       ; +0x1d2, 0x180140de6\nadd     rcx, rcx                                                       ; +0x1d5, 0x180140de9\nlea     rax, [rcx+10h]                                                 ; +0x1d8, 0x180140dec\ncmp     rcx, rax                                                       ; +0x1dc, 0x180140df0\nsbb     rcx, rcx                                                       ; +0x1df, 0x180140df3\nand     rcx, rax; Size                                                 ; +0x1e2, 0x180140df6\njz      short loc_180140E4E                                            ; +0x1e5, 0x180140df9\ncmp     rcx, rdx                                                       ; +0x1e7, 0x180140dfb\nja      short loc_180140E35                                            ; +0x1ea, 0x180140dfe\nlea     rax, [rcx+0Fh]                                                 ; +0x1ec, 0x180140e00\ncmp     rax, rcx                                                       ; +0x1f0, 0x180140e04\nja      short loc_180140E13                                            ; +0x1f3, 0x180140e07\nmov     rax, 0FFFFFFFFFFFFFF0h                                         ; +0x1f5, 0x180140e09\nand     rax, 0FFFFFFFFFFFFFFF0h                                        ; +0x1ff, 0x180140e13\ncall    __alloca_probe                                                 ; +0x203, 0x180140e17\nsub     rsp, rax                                                       ; +0x208, 0x180140e1c\nlea     rbx, [rsp+80h+var_30]                                          ; +0x20b, 0x180140e1f\ntest    rbx, rbx                                                       ; +0x210, 0x180140e24\njz      loc_180140EC7                                                  ; +0x213, 0x180140e27\nmov     dword ptr [rbx], 0CCCCh                                        ; +0x219, 0x180140e2d\njmp     short loc_180140E48                                            ; +0x21f, 0x180140e33\ncall    _malloc_base                                                   ; +0x221, 0x180140e35\nmov     rbx, rax                                                       ; +0x226, 0x180140e3a\ntest    rax, rax                                                       ; +0x229, 0x180140e3d\njz      short loc_180140E50                                            ; +0x22c, 0x180140e40\nmov     dword ptr [rax], 0DDDDh                                        ; +0x22e, 0x180140e42\nadd     rbx, 10h                                                       ; +0x234, 0x180140e48\njmp     short loc_180140E50                                            ; +0x238, 0x180140e4c\nxor     ebx, ebx                                                       ; +0x23a, 0x180140e4e\ntest    rbx, rbx                                                       ; +0x23c, 0x180140e50\njz      short loc_180140EC7                                            ; +0x23f, 0x180140e53\nand     [rsp+80h+var_40], 0                                            ; +0x241, 0x180140e55\nmov     r9d, r12d                                                      ; +0x247, 0x180140e5b\nand     [rsp+80h+var_48], 0                                            ; +0x24a, 0x180140e5e\nmov     r8, rsi                                                        ; +0x250, 0x180140e64\nand     [rsp+80h+var_50], 0                                            ; +0x253, 0x180140e67\nmov     edx, r13d                                                      ; +0x259, 0x180140e6d\nmov     [rsp+80h+var_58], edi                                          ; +0x25c, 0x180140e70\nmov     rcx, r15                                                       ; +0x260, 0x180140e74\nmov     [rsp+80h+var_60], rbx                                          ; +0x263, 0x180140e77\ncall    __acrt_LCMapStringEx                                           ; +0x268, 0x180140e7c\ntest    eax, eax                                                       ; +0x26d, 0x180140e81\njz      short loc_180140EB6                                            ; +0x26f, 0x180140e83\nand     [rsp+80h+var_48], 0                                            ; +0x271, 0x180140e85\nxor     edx, edx                                                       ; +0x277, 0x180140e8b\nand     [rsp+80h+var_50], rdx                                          ; +0x279, 0x180140e8d\nmov     r9d, edi                                                       ; +0x27e, 0x180140e92\nmov     eax, [rbp+30h+arg_30]                                          ; +0x281, 0x180140e95\nmov     r8, rbx                                                        ; +0x284, 0x180140e98\nmov     ecx, r14d                                                      ; +0x287, 0x180140e9b\ntest    eax, eax                                                       ; +0x28a, 0x180140e9e\njnz     short loc_180140F07                                            ; +0x28c, 0x180140ea0\nand     [rsp+80h+var_58], edx                                          ; +0x28e, 0x180140ea2\nand     [rsp+80h+var_60], rdx                                          ; +0x292, 0x180140ea6\ncall    __acrt_WideCharToMultiByte                                     ; +0x297, 0x180140eab\nmov     edi, eax                                                       ; +0x29c, 0x180140eb0\ntest    eax, eax                                                       ; +0x29e, 0x180140eb2\njnz     short loc_180140F16                                            ; +0x2a0, 0x180140eb4\nlea     rcx, [rbx-10h]; Block                                          ; +0x2a2, 0x180140eb6\ncmp     dword ptr [rcx], 0DDDDh                                        ; +0x2a6, 0x180140eba\njnz     short loc_180140EC7                                            ; +0x2ac, 0x180140ec0\ncall    _free_base                                                     ; +0x2ae, 0x180140ec2\nxor     edi, edi                                                       ; +0x2b3, 0x180140ec7\ntest    rsi, rsi                                                       ; +0x2b5, 0x180140ec9\njz      short loc_180140EDF                                            ; +0x2b8, 0x180140ecc\nlea     rcx, [rsi-10h]; Block                                          ; +0x2ba, 0x180140ece\ncmp     dword ptr [rcx], 0DDDDh                                        ; +0x2be, 0x180140ed2\njnz     short loc_180140EDF                                            ; +0x2c4, 0x180140ed8\ncall    _free_base                                                     ; +0x2c6, 0x180140eda\nmov     eax, edi                                                       ; +0x2cb, 0x180140edf\nmov     rcx, [rbp+30h+var_28]                                          ; +0x2cd, 0x180140ee1\nxor     rcx, rbp; StackCookie                                          ; +0x2d1, 0x180140ee5\ncall    __security_check_cookie                                        ; +0x2d4, 0x180140ee8\nmov     rbx, [rbp+30h+arg_0]                                           ; +0x2d9, 0x180140eed\nmov     rsi, [rbp+30h+arg_8]                                           ; +0x2dd, 0x180140ef1\nmov     rdi, [rbp+30h+arg_10]                                          ; +0x2e1, 0x180140ef5\nlea     rsp, [rbp+10h]                                                 ; +0x2e5, 0x180140ef9\npop     r15                                                            ; +0x2e9, 0x180140efd\npop     r14                                                            ; +0x2eb, 0x180140eff\npop     r13                                                            ; +0x2ed, 0x180140f01\npop     r12                                                            ; +0x2ef, 0x180140f03\npop     rbp                                                            ; +0x2f1, 0x180140f05\nretn                                                                   ; +0x2f2, 0x180140f06\nmov     [rsp+80h+var_58], eax                                          ; +0x2f3, 0x180140f07\nmov     rax, [rbp+30h+arg_28]                                          ; +0x2f7, 0x180140f0b\nmov     [rsp+80h+var_60], rax                                          ; +0x2fb, 0x180140f0f\njmp     short loc_180140EAB                                            ; +0x300, 0x180140f14\nlea     rcx, [rbx-10h]; Block                                          ; +0x302, 0x180140f16\ncmp     dword ptr [rcx], 0DDDDh                                        ; +0x306, 0x180140f1a\njnz     short loc_180140EC9                                            ; +0x30c, 0x180140f20\ncall    _free_base                                                     ; +0x30e, 0x180140f22\njmp     short loc_180140EC9                                            ; +0x313, 0x180140f27", "xrefs": ["__acrt_LCMapStringA @ 0x180140f98", "<???> @ 0x180203c44", "<???> @ 0x180203c50"], "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"}