// // setSBUpLow from 0x18013a3b8 to 0x18013a599 (481 bytes) // // 3 xrefs: // > _setmbcp_nolock @ 0x18013a936 // > @ 0x180203848 // > @ 0x180203854 // // 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 // void __fastcall setSBUpLow(struct __crt_multibyte_data *a1) { UINT v2; // ecx unsigned int v3; // eax char *v4; // rcx __int64 v5; // rsi BYTE v6; // al BYTE *LeadByte; // rdx unsigned int v8; // r8d __int64 i; // rcx __int64 v10; // rax WORD *v11; // rdx char v12; // cl unsigned int v13; // edx __int64 v14; // rcx char v15; // al struct _cpinfo CPInfo; // [rsp+50h] [rbp-B0h] BYREF char v17[256]; // [rsp+70h] [rbp-90h] BYREF char v18[256]; // [rsp+170h] [rbp+70h] BYREF char v19[256]; // [rsp+270h] [rbp+170h] BYREF WORD CharType[512]; // [rsp+370h] [rbp+270h] BYREF v2 = *((_DWORD *)a1 + 1); if ( v2 == 65001 || !GetCPInfo(v2, &CPInfo) ) { v13 = 0; v14 = 1; do { if ( v13 - 97 + 32 > 0x19 ) { if ( v13 - 97 > 0x19 ) { v15 = 0; } else { *((_BYTE *)a1 + v14 + 24) |= 0x20u; v15 = v13 - 32; } } else { *((_BYTE *)a1 + v14 + 24) |= 0x10u; v15 = v13 + 32; } *((_BYTE *)a1 + v14 + 280) = v15; ++v13; ++v14; } while ( v13 < 0x100 ); } else { v3 = 0; v4 = v17; v5 = 256; do *v4++ = v3++; while ( v3 < 0x100 ); v6 = CPInfo.LeadByte[0]; LeadByte = CPInfo.LeadByte; v17[0] = 32; while ( v6 ) { v8 = LeadByte[1]; for ( i = v6; (unsigned int)i <= v8 && (unsigned int)i < 0x100; i = (unsigned int)(i + 1) ) v17[i] = 32; LeadByte += 2; v6 = *LeadByte; } _acrt_GetStringTypeA(nullptr, 1u, CharType, *((_DWORD *)a1 + 1), 0); _acrt_LCMapStringA(nullptr, *((wchar_t **)a1 + 68), 0x100u, v17, 256, v18, 256, *((_DWORD *)a1 + 1), 0); _acrt_LCMapStringA(nullptr, *((wchar_t **)a1 + 68), 0x200u, v17, 256, v19, 256, *((_DWORD *)a1 + 1), 0); v10 = 1; v11 = CharType; do { if ( (*(_BYTE *)v11 & 1) != 0 ) { *((_BYTE *)a1 + v10 + 24) |= 0x10u; v12 = v17[v10 + 255]; } else if ( (*(_BYTE *)v11 & 2) != 0 ) { *((_BYTE *)a1 + v10 + 24) |= 0x20u; v12 = v18[v10 + 255]; } else { v12 = 0; } *((_BYTE *)a1 + v10 + 280) = v12; ++v11; ++v10; --v5; } while ( v5 ); } }