{"type": "func", "start": 6443735220, "end": 6443735614, "name": "__acrt_wcs_to_mbs_cp<__crt_win32_buffer_internal_dynamic_resizing>", "pseudocode": "// \n// __acrt_wcs_to_mbs_cp<__crt_win32_buffer_internal_dynamic_resizing> from 0x1801398b4 to 0x180139a3e (394 bytes)\n// \n// 2 xrefs:\n// > _wsetlocale_set_cat @ 0x180139ff9\n// > <???> @ 0x180203800\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_wcs_to_mbs_cp<__crt_win32_buffer_internal_dynamic_resizing>(\n        const WCHAR *a1,\n        __int64 a2,\n        UINT a3)\n{\n  unsigned int v3; // ebx\n  void *v7; // rax\n  unsigned int v8; // edx\n  int v9; // eax\n  size_t v10; // rbp\n  DWORD LastError; // eax\n  unsigned __int64 v12; // rcx\n  __int64 v13; // rax\n  __int64 v14; // rax\n  int v15; // eax\n\n  v3 = 0;\n  if ( !a1 )\n  {\n    if ( *(_BYTE *)(a2 + 40) )\n    {\n      free_base(*(void **)(a2 + 16));\n      *(_BYTE *)(a2 + 40) = 0;\n    }\n    *(_QWORD *)(a2 + 16) = 0;\n    *(_QWORD *)(a2 + 24) = 0;\n    goto LABEL_5;\n  }\n  if ( *a1 )\n  {\n    v9 = _acrt_WideCharToMultiByte(a3, 0, a1, -1, nullptr, 0, nullptr, nullptr);\n    v10 = v9;\n    if ( v9 )\n    {\n      v12 = *(_QWORD *)(a2 + 24);\n      if ( v9 > v12 )\n      {\n        if ( *(_BYTE *)(a2 + 40) )\n        {\n          free_base(*(void **)(a2 + 16));\n          *(_BYTE *)(a2 + 40) = 0;\n        }\n        v13 = (__int64)malloc_base(v10);\n        *(_QWORD *)(a2 + 16) = v13;\n        v12 = 0;\n        v14 = -v13;\n        v8 = v14 == 0 ? 0xC : 0;\n        if ( (v14 == 0 ? 0xC : 0) == 0 )\n          v12 = v10;\n        *(_BYTE *)(a2 + 40) = v8 == 0;\n        *(_QWORD *)(a2 + 24) = v12;\n        if ( (v14 == 0 ? 0xC : 0) != 0 )\n          return v8;\n      }\n      v15 = _acrt_WideCharToMultiByte(a3, 0, a1, -1, *(CHAR **)(a2 + 16), v12, nullptr, nullptr);\n      if ( v15 )\n      {\n        *(_QWORD *)(a2 + 32) = v15 - 1LL;\n        return v3;\n      }\n    }\n    LastError = GetLastError();\n    _acrt_errno_map_os_error(LastError);\n    return (unsigned int)*errno();\n  }\n  if ( !*(_QWORD *)(a2 + 24) )\n  {\n    if ( *(_BYTE *)(a2 + 40) )\n    {\n      free_base(*(void **)(a2 + 16));\n      *(_BYTE *)(a2 + 40) = 0;\n    }\n    v7 = malloc_base(1u);\n    *(_QWORD *)(a2 + 16) = v7;\n    v8 = v7 == nullptr ? 0xC : 0;\n    *(_BYTE *)(a2 + 40) = v8 == 0;\n    *(_QWORD *)(a2 + 24) = v8 == 0;\n    if ( (v7 == nullptr ? 0xC : 0) != 0 )\n      return v8;\n  }\n  **(_BYTE **)(a2 + 16) = 0;\nLABEL_5:\n  *(_QWORD *)(a2 + 32) = 0;\n  return v3;\n}", "assembly": "; \n; __acrt_wcs_to_mbs_cp<__crt_win32_buffer_internal_dynamic_resizing> from 0x1801398b4 to 0x180139a3e (394 bytes)\n; \n; 2 xrefs:\n; > _wsetlocale_set_cat @ 0x180139ff9\n; > <???> @ 0x180203800\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     rax, rsp                                                       ; +0x0, 0x1801398b4\nmov     [rax+8], rbx                                                   ; +0x3, 0x1801398b7\nmov     [rax+10h], rbp                                                 ; +0x7, 0x1801398bb\nmov     [rax+18h], rsi                                                 ; +0xb, 0x1801398bf\nmov     [rax+20h], rdi                                                 ; +0xf, 0x1801398c3\npush    r14                                                            ; +0x13, 0x1801398c7\nsub     rsp, 40h                                                       ; +0x15, 0x1801398c9\nxor     ebx, ebx                                                       ; +0x19, 0x1801398cd\nmov     r14d, r8d                                                      ; +0x1b, 0x1801398cf\nmov     rdi, rdx                                                       ; +0x1e, 0x1801398d2\nmov     rsi, rcx                                                       ; +0x21, 0x1801398d5\ntest    rcx, rcx                                                       ; +0x24, 0x1801398d8\njnz     short loc_1801398FF                                            ; +0x27, 0x1801398db\ncmp     [rdx+28h], bl                                                  ; +0x29, 0x1801398dd\njz      short loc_1801398EE                                            ; +0x2c, 0x1801398e0\nmov     rcx, [rdx+10h]; Block                                          ; +0x2e, 0x1801398e2\ncall    _free_base                                                     ; +0x32, 0x1801398e6\nmov     [rdi+28h], bl                                                  ; +0x37, 0x1801398eb\nmov     [rdi+10h], rbx                                                 ; +0x3a, 0x1801398ee\nmov     [rdi+18h], rbx                                                 ; +0x3e, 0x1801398f2\nmov     [rdi+20h], rbx                                                 ; +0x42, 0x1801398f6\njmp     loc_180139A21                                                  ; +0x46, 0x1801398fa\ncmp     [rcx], bx                                                      ; +0x4b, 0x1801398ff\njnz     short loc_180139958                                            ; +0x4e, 0x180139902\ncmp     [rdx+18h], rbx                                                 ; +0x50, 0x180139904\njnz     short loc_180139950                                            ; +0x54, 0x180139908\ncmp     [rdx+28h], bl                                                  ; +0x56, 0x18013990a\njz      short loc_18013991B                                            ; +0x59, 0x18013990d\nmov     rcx, [rdx+10h]; Block                                          ; +0x5b, 0x18013990f\ncall    _free_base                                                     ; +0x5f, 0x180139913\nmov     [rdi+28h], bl                                                  ; +0x64, 0x180139918\nmov     ecx, 1; Size                                                   ; +0x67, 0x18013991b\ncall    _malloc_base                                                   ; +0x6c, 0x180139920\nmov     [rdi+10h], rax                                                 ; +0x71, 0x180139925\nmov     rcx, rbx                                                       ; +0x75, 0x180139929\nneg     rax                                                            ; +0x78, 0x18013992c\nsbb     edx, edx                                                       ; +0x7b, 0x18013992f\nnot     edx                                                            ; +0x7d, 0x180139931\nand     edx, 0Ch                                                       ; +0x7f, 0x180139933\nsetz    cl                                                             ; +0x82, 0x180139936\ntest    edx, edx                                                       ; +0x85, 0x180139939\nsetz    al                                                             ; +0x87, 0x18013993b\nmov     [rdi+28h], al                                                  ; +0x8a, 0x18013993e\nmov     [rdi+18h], rcx                                                 ; +0x8d, 0x180139941\ntest    edx, edx                                                       ; +0x91, 0x180139945\njz      short loc_180139950                                            ; +0x93, 0x180139947\nmov     ebx, edx                                                       ; +0x95, 0x180139949\njmp     loc_180139A21                                                  ; +0x97, 0x18013994b\nmov     rax, [rdi+10h]                                                 ; +0x9c, 0x180139950\nmov     [rax], bl                                                      ; +0xa0, 0x180139954\njmp     short loc_1801398F6                                            ; +0xa2, 0x180139956\nmov     [rsp+48h+var_10], rbx                                          ; +0xa4, 0x180139958\nor      r9d, 0FFFFFFFFh                                                ; +0xa9, 0x18013995d\nmov     [rsp+48h+var_18], rbx                                          ; +0xad, 0x180139961\nmov     r8, rsi                                                        ; +0xb2, 0x180139966\nmov     [rsp+48h+var_20], ebx                                          ; +0xb5, 0x180139969\nxor     edx, edx                                                       ; +0xb9, 0x18013996d\nmov     ecx, r14d                                                      ; +0xbb, 0x18013996f\nmov     [rsp+48h+var_28], rbx                                          ; +0xbe, 0x180139972\ncall    __acrt_WideCharToMultiByte                                     ; +0xc3, 0x180139977\nmovsxd  rbp, eax                                                       ; +0xc8, 0x18013997c\ntest    eax, eax                                                       ; +0xcb, 0x18013997f\njnz     short loc_18013999C                                            ; +0xcd, 0x180139981\ncall    cs:GetLastError                                                ; +0xcf, 0x180139983\nmov     ecx, eax                                                       ; +0xd5, 0x180139989\ncall    __acrt_errno_map_os_error                                      ; +0xd7, 0x18013998b\ncall    _errno                                                         ; +0xdc, 0x180139990\nmov     ebx, [rax]                                                     ; +0xe1, 0x180139995\njmp     loc_180139A21                                                  ; +0xe3, 0x180139997\nmov     rcx, [rdi+18h]                                                 ; +0xe8, 0x18013999c\ncmp     rbp, rcx                                                       ; +0xec, 0x1801399a0\njbe     short loc_1801399E7                                            ; +0xef, 0x1801399a3\ncmp     [rdi+28h], bl                                                  ; +0xf1, 0x1801399a5\njz      short loc_1801399B6                                            ; +0xf4, 0x1801399a8\nmov     rcx, [rdi+10h]; Block                                          ; +0xf6, 0x1801399aa\ncall    _free_base                                                     ; +0xfa, 0x1801399ae\nmov     [rdi+28h], bl                                                  ; +0xff, 0x1801399b3\nmov     rcx, rbp; Size                                                 ; +0x102, 0x1801399b6\ncall    _malloc_base                                                   ; +0x105, 0x1801399b9\nmov     [rdi+10h], rax                                                 ; +0x10a, 0x1801399be\nmov     rcx, rbx                                                       ; +0x10e, 0x1801399c2\nneg     rax                                                            ; +0x111, 0x1801399c5\nsbb     edx, edx                                                       ; +0x114, 0x1801399c8\nnot     edx                                                            ; +0x116, 0x1801399ca\nand     edx, 0Ch                                                       ; +0x118, 0x1801399cc\ncmovz   rcx, rbp                                                       ; +0x11b, 0x1801399cf\ntest    edx, edx                                                       ; +0x11f, 0x1801399d3\nsetz    al                                                             ; +0x121, 0x1801399d5\nmov     [rdi+28h], al                                                  ; +0x124, 0x1801399d8\nmov     [rdi+18h], rcx                                                 ; +0x127, 0x1801399db\ntest    edx, edx                                                       ; +0x12b, 0x1801399df\njnz     loc_180139949                                                  ; +0x12d, 0x1801399e1\nmov     rax, [rdi+10h]                                                 ; +0x133, 0x1801399e7\nor      r9d, 0FFFFFFFFh                                                ; +0x137, 0x1801399eb\nmov     [rsp+48h+var_10], rbx                                          ; +0x13b, 0x1801399ef\nmov     r8, rsi                                                        ; +0x140, 0x1801399f4\nmov     [rsp+48h+var_18], rbx                                          ; +0x143, 0x1801399f7\nxor     edx, edx                                                       ; +0x148, 0x1801399fc\nmov     [rsp+48h+var_20], ecx                                          ; +0x14a, 0x1801399fe\nmov     ecx, r14d                                                      ; +0x14e, 0x180139a02\nmov     [rsp+48h+var_28], rax                                          ; +0x151, 0x180139a05\ncall    __acrt_WideCharToMultiByte                                     ; +0x156, 0x180139a0a\nmovsxd  rcx, eax                                                       ; +0x15b, 0x180139a0f\ntest    eax, eax                                                       ; +0x15e, 0x180139a12\njz      loc_180139983                                                  ; +0x160, 0x180139a14\ndec     rcx                                                            ; +0x166, 0x180139a1a\nmov     [rdi+20h], rcx                                                 ; +0x169, 0x180139a1d\nmov     rbp, [rsp+48h+arg_8]                                           ; +0x16d, 0x180139a21\nmov     eax, ebx                                                       ; +0x172, 0x180139a26\nmov     rbx, [rsp+48h+arg_0]                                           ; +0x174, 0x180139a28\nmov     rsi, [rsp+48h+arg_10]                                          ; +0x179, 0x180139a2d\nmov     rdi, [rsp+48h+arg_18]                                          ; +0x17e, 0x180139a32\nadd     rsp, 40h                                                       ; +0x183, 0x180139a37\npop     r14                                                            ; +0x187, 0x180139a3b\nretn                                                                   ; +0x189, 0x180139a3d", "xrefs": ["_wsetlocale_set_cat @ 0x180139ff9", "<???> @ 0x180203800"], "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"}