{"type": "func", "start": 6443751212, "end": 6443751609, "name": "__acrt_GetStringTypeA", "pseudocode": "// \n// __acrt_GetStringTypeA from 0x18013d72c to 0x18013d8b9 (397 bytes)\n// \n// 4 xrefs:\n// > _isctype_l @ 0x180136c40\n// > setSBUpLow @ 0x18013a47a\n// > <???> @ 0x180203ad0\n// > <???> @ 0x180203adc\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__int64 __fastcall _acrt_GetStringTypeA(\n        struct __crt_locale_pointers *a1,\n        DWORD dwInfoType,\n        const CHAR *a3,\n        int a4,\n        LPWORD lpCharType,\n        UINT a6,\n        int a7)\n{\n  UINT v10; // edi\n  int v11; // eax\n  __int64 v12; // r14\n  unsigned int StringTypeW; // edi\n  size_t v14; // rcx\n  __int64 v15; // rax\n  void *v16; // rsp\n  _QWORD *v17; // rbx\n  _DWORD *v18; // rax\n  int v19; // eax\n  __int64 v21; // [rsp+0h] [rbp-30h] BYREF\n  _QWORD v22[3]; // [rsp+30h] [rbp+0h] BYREF\n  char v23; // [rsp+48h] [rbp+18h]\n\n  _LocaleUpdate::_LocaleUpdate((_LocaleUpdate *)v22, a1);\n  v10 = a6;\n  if ( !a6 )\n    v10 = *(_DWORD *)(v22[1] + 12LL);\n  v11 = _acrt_MultiByteToWideChar(v10, a7 != 0 ? 9 : 1, a3, a4, nullptr, 0);\n  v12 = v11;\n  if ( !v11 )\n  {\n    StringTypeW = 0;\n    goto LABEL_22;\n  }\n  v14 = (2LL * v11 + 16) & -(__int64)(2LL * v11 < (unsigned __int64)(2LL * v11 + 16));\n  if ( !v14 )\n  {\n    v17 = nullptr;\n    goto LABEL_15;\n  }\n  if ( v14 <= 0x400 )\n  {\n    v15 = v14 + 15;\n    if ( v14 + 15 < v14 )\n      v15 = 0xFFFFFFFFFFFFFF0LL;\n    v16 = alloca(v15 & 0xFFFFFFFFFFFFFFF0uLL);\n    v17 = v22;\n    if ( &v21 == (__int64 *)-48LL )\n      goto LABEL_18;\n    LODWORD(v22[0]) = 52428;\n    goto LABEL_13;\n  }\n  v18 = malloc_base(v14);\n  v17 = v18;\n  if ( v18 )\n  {\n    *v18 = 56797;\nLABEL_13:\n    v17 += 2;\n  }\nLABEL_15:\n  if ( !v17 || (memset(v17, 0, 2 * v12), (v19 = _acrt_MultiByteToWideChar(v10, 1, a3, a4, (WCHAR *)v17, v12)) == 0) )\n  {\nLABEL_18:\n    StringTypeW = 0;\n    goto LABEL_19;\n  }\n  StringTypeW = GetStringTypeW(dwInfoType, (LPCWCH)v17, v19, lpCharType);\nLABEL_19:\n  if ( v17 && *((_DWORD *)v17 - 4) == 56797 )\n    free_base(v17 - 2);\nLABEL_22:\n  if ( v23 )\n    *(_DWORD *)(v22[0] + 936LL) &= ~2u;\n  return StringTypeW;\n}", "assembly": "; \n; __acrt_GetStringTypeA from 0x18013d72c to 0x18013d8b9 (397 bytes)\n; \n; 4 xrefs:\n; > _isctype_l @ 0x180136c40\n; > setSBUpLow @ 0x18013a47a\n; > <???> @ 0x180203ad0\n; > <???> @ 0x180203adc\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, 0x18013d72c\npush    r12                                                            ; +0x2, 0x18013d72e\npush    r13                                                            ; +0x4, 0x18013d730\npush    r14                                                            ; +0x6, 0x18013d732\npush    r15                                                            ; +0x8, 0x18013d734\nsub     rsp, 60h                                                       ; +0xa, 0x18013d736\nlea     rbp, [rsp+30h]                                                 ; +0xe, 0x18013d73a\nmov     [rbp+50h+arg_0], rbx                                           ; +0x13, 0x18013d73f\nmov     [rbp+50h+arg_8], rsi                                           ; +0x17, 0x18013d743\nmov     [rbp+50h+arg_10], rdi                                          ; +0x1b, 0x18013d747\nmov     rax, cs:__security_cookie                                      ; +0x1f, 0x18013d74b\nxor     rax, rbp                                                       ; +0x26, 0x18013d752\nmov     [rbp+50h+var_30], rax                                          ; +0x29, 0x18013d755\nmov     r13d, edx                                                      ; +0x2d, 0x18013d759\nmov     r15d, r9d                                                      ; +0x30, 0x18013d75c\nmov     rdx, rcx; struct __crt_locale_pointers *                       ; +0x33, 0x18013d75f\nmov     r12, r8                                                        ; +0x36, 0x18013d762\nlea     rcx, [rbp+50h+var_50]; this                                    ; +0x39, 0x18013d765\ncall    ??0_LocaleUpdate@@QEAA@QEAU__crt_locale_pointers@@@Z           ; +0x3d, 0x18013d769\nmov     edi, [rbp+50h+arg_28]                                          ; +0x42, 0x18013d76e\ntest    edi, edi                                                       ; +0x48, 0x18013d774\njnz     short loc_18013D77F                                            ; +0x4a, 0x18013d776\nmov     rax, [rbp+50h+var_48]                                          ; +0x4c, 0x18013d778\nmov     edi, [rax+0Ch]                                                 ; +0x50, 0x18013d77c\nneg     [rbp+50h+arg_30]                                               ; +0x53, 0x18013d77f\nmov     r9d, r15d                                                      ; +0x59, 0x18013d785\nmov     r8, r12                                                        ; +0x5c, 0x18013d788\nmov     ecx, edi                                                       ; +0x5f, 0x18013d78b\nsbb     edx, edx                                                       ; +0x61, 0x18013d78d\nand     [rsp+80h+var_58], 0                                            ; +0x63, 0x18013d78f\nand     [rsp+80h+var_60], 0                                            ; +0x68, 0x18013d794\nand     edx, 8                                                         ; +0x6e, 0x18013d79a\ninc     edx                                                            ; +0x71, 0x18013d79d\ncall    __acrt_MultiByteToWideChar                                     ; +0x73, 0x18013d79f\nmovsxd  r14, eax                                                       ; +0x78, 0x18013d7a4\ntest    eax, eax                                                       ; +0x7b, 0x18013d7a7\njnz     short loc_18013D7B2                                            ; +0x7d, 0x18013d7a9\nxor     edi, edi                                                       ; +0x7f, 0x18013d7ab\njmp     loc_18013D880                                                  ; +0x81, 0x18013d7ad\nmov     rsi, r14                                                       ; +0x86, 0x18013d7b2\nadd     rsi, rsi                                                       ; +0x89, 0x18013d7b5\nlea     rax, [rsi+10h]                                                 ; +0x8c, 0x18013d7b8\ncmp     rsi, rax                                                       ; +0x90, 0x18013d7bc\nsbb     rcx, rcx                                                       ; +0x93, 0x18013d7bf\nand     rcx, rax; Size                                                 ; +0x96, 0x18013d7c2\njz      short loc_18013D81A                                            ; +0x99, 0x18013d7c5\ncmp     rcx, 400h                                                      ; +0x9b, 0x18013d7c7\nja      short loc_18013D801                                            ; +0xa2, 0x18013d7ce\nlea     rax, [rcx+0Fh]                                                 ; +0xa4, 0x18013d7d0\ncmp     rax, rcx                                                       ; +0xa8, 0x18013d7d4\nja      short loc_18013D7E3                                            ; +0xab, 0x18013d7d7\nmov     rax, 0FFFFFFFFFFFFFF0h                                         ; +0xad, 0x18013d7d9\nand     rax, 0FFFFFFFFFFFFFFF0h                                        ; +0xb7, 0x18013d7e3\ncall    __alloca_probe                                                 ; +0xbb, 0x18013d7e7\nsub     rsp, rax                                                       ; +0xc0, 0x18013d7ec\nlea     rbx, [rsp+80h+var_50]                                          ; +0xc3, 0x18013d7ef\ntest    rbx, rbx                                                       ; +0xc8, 0x18013d7f4\njz      short loc_18013D868                                            ; +0xcb, 0x18013d7f7\nmov     dword ptr [rbx], 0CCCCh                                        ; +0xcd, 0x18013d7f9\njmp     short loc_18013D814                                            ; +0xd3, 0x18013d7ff\ncall    _malloc_base                                                   ; +0xd5, 0x18013d801\nmov     rbx, rax                                                       ; +0xda, 0x18013d806\ntest    rax, rax                                                       ; +0xdd, 0x18013d809\njz      short loc_18013D81C                                            ; +0xe0, 0x18013d80c\nmov     dword ptr [rax], 0DDDDh                                        ; +0xe2, 0x18013d80e\nadd     rbx, 10h                                                       ; +0xe8, 0x18013d814\njmp     short loc_18013D81C                                            ; +0xec, 0x18013d818\nxor     ebx, ebx                                                       ; +0xee, 0x18013d81a\ntest    rbx, rbx                                                       ; +0xf0, 0x18013d81c\njz      short loc_18013D868                                            ; +0xf3, 0x18013d81f\nmov     r8, rsi; Size                                                  ; +0xf5, 0x18013d821\nxor     edx, edx; Val                                                  ; +0xf8, 0x18013d824\nmov     rcx, rbx; void *                                               ; +0xfa, 0x18013d826\ncall    memset                                                         ; +0xfd, 0x18013d829\nmov     r9d, r15d                                                      ; +0x102, 0x18013d82e\nmov     [rsp+80h+var_58], r14d                                         ; +0x105, 0x18013d831\nmov     r8, r12                                                        ; +0x10a, 0x18013d836\nmov     [rsp+80h+var_60], rbx                                          ; +0x10d, 0x18013d839\nmov     edx, 1                                                         ; +0x112, 0x18013d83e\nmov     ecx, edi                                                       ; +0x117, 0x18013d843\ncall    __acrt_MultiByteToWideChar                                     ; +0x119, 0x18013d845\ntest    eax, eax                                                       ; +0x11e, 0x18013d84a\njz      short loc_18013D868                                            ; +0x120, 0x18013d84c\nmov     r9, [rbp+50h+lpCharType]; lpCharType                           ; +0x122, 0x18013d84e\nmov     r8d, eax; cchSrc                                               ; +0x129, 0x18013d855\nmov     rdx, rbx; lpSrcStr                                             ; +0x12c, 0x18013d858\nmov     ecx, r13d; dwInfoType                                          ; +0x12f, 0x18013d85b\ncall    cs:__imp_GetStringTypeW                                        ; +0x132, 0x18013d85e\nmov     edi, eax                                                       ; +0x138, 0x18013d864\njmp     short loc_18013D86A                                            ; +0x13a, 0x18013d866\nxor     edi, edi                                                       ; +0x13c, 0x18013d868\ntest    rbx, rbx                                                       ; +0x13e, 0x18013d86a\njz      short loc_18013D880                                            ; +0x141, 0x18013d86d\nlea     rcx, [rbx-10h]; Block                                          ; +0x143, 0x18013d86f\ncmp     dword ptr [rcx], 0DDDDh                                        ; +0x147, 0x18013d873\njnz     short loc_18013D880                                            ; +0x14d, 0x18013d879\ncall    _free_base                                                     ; +0x14f, 0x18013d87b\ncmp     [rbp+50h+var_38], 0                                            ; +0x154, 0x18013d880\njz      short loc_18013D891                                            ; +0x158, 0x18013d884\nmov     rax, [rbp+50h+var_50]                                          ; +0x15a, 0x18013d886\nand     dword ptr [rax+3A8h], 0FFFFFFFDh                               ; +0x15e, 0x18013d88a\nmov     eax, edi                                                       ; +0x165, 0x18013d891\nmov     rcx, [rbp+50h+var_30]                                          ; +0x167, 0x18013d893\nxor     rcx, rbp; StackCookie                                          ; +0x16b, 0x18013d897\ncall    __security_check_cookie                                        ; +0x16e, 0x18013d89a\nmov     rbx, [rbp+50h+arg_0]                                           ; +0x173, 0x18013d89f\nmov     rsi, [rbp+50h+arg_8]                                           ; +0x177, 0x18013d8a3\nmov     rdi, [rbp+50h+arg_10]                                          ; +0x17b, 0x18013d8a7\nlea     rsp, [rbp+30h]                                                 ; +0x17f, 0x18013d8ab\npop     r15                                                            ; +0x183, 0x18013d8af\npop     r14                                                            ; +0x185, 0x18013d8b1\npop     r13                                                            ; +0x187, 0x18013d8b3\npop     r12                                                            ; +0x189, 0x18013d8b5\npop     rbp                                                            ; +0x18b, 0x18013d8b7\nretn                                                                   ; +0x18c, 0x18013d8b8", "xrefs": ["_isctype_l @ 0x180136c40", "setSBUpLow @ 0x18013a47a", "<???> @ 0x180203ad0", "<???> @ 0x180203adc"], "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"}