// // __acrt_LCMapStringA_stat from 0x180140c14 to 0x180140f29 (789 bytes) // // 3 xrefs: // > __acrt_LCMapStringA @ 0x180140f98 // > @ 0x180203c44 // > @ 0x180203c50 // // 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 // int __fastcall __acrt_LCMapStringA_stat( struct __crt_locale_pointers *a1, const wchar_t *a2, DWORD a3, const char *a4, int a5, char *a6, int a7, UINT a8, int a9) { int v9; // ebx int v13; // eax UINT v14; // r14d int result; // eax int v16; // r12d unsigned __int64 v17; // rcx unsigned __int64 v18; // rdx __int64 v19; // rax void *v20; // rsp WCHAR *v21; // rsi WCHAR *v22; // rax const wchar_t *v23; // r15 int v24; // eax int v25; // edi size_t v26; // rcx __int64 v27; // rax void *v28; // rsp WCHAR *v29; // rbx WCHAR *v30; // rax _BYTE v31[32]; // [rsp+0h] [rbp-50h] BYREF CHAR *v32; // [rsp+20h] [rbp-30h] int v33; // [rsp+28h] [rbp-28h] const CHAR *v34; // [rsp+30h] [rbp-20h] BOOL *v35; // [rsp+38h] [rbp-18h] const wchar_t *v36; // [rsp+50h] [rbp+0h] BYREF v9 = a5; v36 = a2; if ( a5 > 0 ) { v13 = _strncnt(a4, a5); v9 = v13 + 1; if ( v13 >= a5 ) v9 = v13; } v14 = a8; if ( !a8 ) v14 = *((_DWORD *)a1->locinfo + 3); result = _acrt_MultiByteToWideChar(v14, a9 != 0 ? 9 : 1, a4, v9, nullptr, 0); v16 = result; if ( result ) { v17 = 2LL * result + 16; v18 = v17 & -(__int64)(2LL * result < v17); if ( !v18 ) { v21 = nullptr; goto LABEL_17; } if ( v18 > 0x400 ) { v22 = (WCHAR *)malloc_base(v17 & -(__int64)(2LL * result < v17)); v21 = v22; if ( !v22 ) { LABEL_17: if ( v21 ) { if ( _acrt_MultiByteToWideChar(v14, 1, a4, v9, v21, v16) ) { v23 = v36; v24 = _acrt_LCMapStringEx((__int64)v36, a3, v21, v16, nullptr, 0, 0, 0, 0); v25 = v24; if ( v24 ) { if ( (a3 & 0x400) != 0 ) { if ( !a7 ) goto LABEL_43; if ( v24 <= a7 ) { v25 = _acrt_LCMapStringEx((__int64)v23, a3, v21, v16, (WCHAR *)a6, a7, 0, 0, 0); if ( v25 ) goto LABEL_43; } goto LABEL_42; } v26 = (2LL * v24 + 16) & -(__int64)(2LL * v24 < (unsigned __int64)(2LL * v24 + 16)); if ( !v26 ) { v29 = nullptr; LABEL_35: if ( v29 ) { if ( _acrt_LCMapStringEx((__int64)v23, a3, v21, v16, v29, v25, 0, 0, 0) ) { v35 = nullptr; v34 = nullptr; if ( a7 ) { v33 = a7; v32 = a6; } else { v33 = 0; v32 = nullptr; } v25 = _acrt_WideCharToMultiByte(v14, 0, v29, v25, v32, v33, v34, v35); if ( v25 ) { if ( *((_DWORD *)v29 - 4) == 56797 ) free_base(v29 - 8); goto LABEL_43; } } if ( *((_DWORD *)v29 - 4) == 56797 ) free_base(v29 - 8); } goto LABEL_42; } if ( v26 > 0x400 ) { v30 = (WCHAR *)malloc_base(v26); v29 = v30; if ( !v30 ) goto LABEL_35; *(_DWORD *)v30 = 56797; goto LABEL_33; } v27 = v26 + 15; if ( v26 + 15 < v26 ) v27 = 0xFFFFFFFFFFFFFF0LL; v28 = alloca(v27 & 0xFFFFFFFFFFFFFFF0uLL); v29 = (WCHAR *)&v36; if ( v31 != (_BYTE *)-80LL ) { LODWORD(v36) = 52428; LABEL_33: v29 += 8; goto LABEL_35; } } } } LABEL_42: v25 = 0; LABEL_43: if ( v21 ) { if ( *((_DWORD *)v21 - 4) == 56797 ) free_base(v21 - 8); } return v25; } *(_DWORD *)v22 = 56797; } else { v19 = v18 + 15; if ( v18 + 15 < v18 ) v19 = 0xFFFFFFFFFFFFFF0LL; v20 = alloca(v19 & 0xFFFFFFFFFFFFFFF0uLL); v21 = (WCHAR *)&v36; if ( v31 == (_BYTE *)-80LL ) goto LABEL_42; LODWORD(v36) = 52428; } v21 += 8; goto LABEL_17; } return result; }