{"type": "func", "start": 6443725860, "end": 6443726272, "name": "_wctomb_s_l", "pseudocode": "// \n// _wctomb_s_l from 0x180137424 to 0x1801375c0 (412 bytes)\n// \n// 4 xrefs:\n// > unknown_libname_47 @ 0x18012e370\n// > unknown_libname_56 @ 0x18012edc1\n// > wctomb_s @ 0x1801375ca\n// > <???> @ 0x1802035d8\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\nerrno_t __cdecl wctomb_s_l(int *SizeConverted, char *MbCh, size_t SizeInBytes, wchar_t WCh, _locale_t Locale)\n{\n  errno_t v9; // ebx\n  struct _Mbstatet *v10; // r9\n  UINT v11; // ecx\n  int v12; // eax\n  int v13; // eax\n  __int64 v14; // [rsp+40h] [rbp-20h] BYREF\n  __int64 v15; // [rsp+48h] [rbp-18h]\n  char v16; // [rsp+58h] [rbp-8h]\n  __int64 v17; // [rsp+88h] [rbp+28h] BYREF\n  WCHAR v18; // [rsp+98h] [rbp+38h] BYREF\n\n  v18 = WCh;\n  if ( MbCh || !SizeInBytes )\n  {\n    if ( SizeConverted )\n      *SizeConverted = -1;\n    if ( SizeInBytes > 0x7FFFFFFF )\n    {\n      v9 = 22;\n      *errno() = 22;\n      invalid_parameter_noinfo();\n      return v9;\n    }\n    _LocaleUpdate::_LocaleUpdate((_LocaleUpdate *)&v14, Locale);\n    v11 = *(_DWORD *)(v15 + 12);\n    if ( v11 == 65001 )\n    {\n      v17 = 0;\n      v12 = __crt_mbstring::__c32rtomb_utf8((__crt_mbstring *)MbCh, (char *)v18, (char32_t)&v17, v10);\n      if ( SizeConverted )\n        *SizeConverted = v12;\n      if ( v12 > 4 )\n      {\n        v9 = *errno();\n        goto LABEL_21;\n      }\n      goto LABEL_33;\n    }\n    if ( !*(_QWORD *)(v15 + 312) )\n    {\n      if ( v18 > 0xFFu )\n      {\n        if ( MbCh && SizeInBytes )\n          memset(MbCh, 0, SizeInBytes);\n        goto LABEL_20;\n      }\n      if ( !MbCh )\n        goto LABEL_27;\n      if ( SizeInBytes )\n      {\n        *MbCh = v18;\nLABEL_27:\n        if ( SizeConverted )\n          *SizeConverted = 1;\nLABEL_33:\n        v9 = 0;\n        goto LABEL_21;\n      }\nLABEL_38:\n      v9 = 34;\n      *errno() = 34;\n      invalid_parameter_noinfo();\nLABEL_21:\n      if ( v16 )\n        *(_DWORD *)(v14 + 936) &= ~2u;\n      return v9;\n    }\n    LODWORD(v17) = 0;\n    v13 = _acrt_WideCharToMultiByte(v11, 0, &v18, 1, MbCh, SizeInBytes, nullptr, (BOOL *)&v17);\n    if ( v13 )\n    {\n      if ( !(_DWORD)v17 )\n      {\n        if ( SizeConverted )\n          *SizeConverted = v13;\n        goto LABEL_33;\n      }\n    }\n    else if ( GetLastError() == 122 )\n    {\n      if ( MbCh && SizeInBytes )\n        memset(MbCh, 0, SizeInBytes);\n      goto LABEL_38;\n    }\nLABEL_20:\n    v9 = 42;\n    *errno() = 42;\n    goto LABEL_21;\n  }\n  if ( SizeConverted )\n    *SizeConverted = 0;\n  return 0;\n}", "assembly": "; \n; _wctomb_s_l from 0x180137424 to 0x1801375c0 (412 bytes)\n; \n; 4 xrefs:\n; > unknown_libname_47 @ 0x18012e370\n; > unknown_libname_56 @ 0x18012edc1\n; > wctomb_s @ 0x1801375ca\n; > <???> @ 0x1802035d8\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     [rsp-18h+arg_0], rbx                                           ; +0x0, 0x180137424\nmov     [rsp-18h+arg_18], r9w                                          ; +0x5, 0x180137429\npush    rbp                                                            ; +0xb, 0x18013742f\npush    rsi                                                            ; +0xc, 0x180137430\npush    rdi                                                            ; +0xd, 0x180137431\nmov     rbp, rsp                                                       ; +0xe, 0x180137432\nsub     rsp, 60h                                                       ; +0x11, 0x180137435\nmov     rsi, r8                                                        ; +0x15, 0x180137439\nmov     rdi, rdx                                                       ; +0x18, 0x18013743c\nmov     rbx, rcx                                                       ; +0x1b, 0x18013743f\ntest    rdx, rdx                                                       ; +0x1e, 0x180137442\njnz     short loc_18013745A                                            ; +0x21, 0x180137445\ntest    r8, r8                                                         ; +0x23, 0x180137447\njz      short loc_18013745A                                            ; +0x26, 0x18013744a\ntest    rcx, rcx                                                       ; +0x28, 0x18013744c\njz      short loc_180137453                                            ; +0x2b, 0x18013744f\nand     [rcx], edx                                                     ; +0x2d, 0x180137451\nxor     eax, eax                                                       ; +0x2f, 0x180137453\njmp     loc_180137519                                                  ; +0x31, 0x180137455\ntest    rbx, rbx                                                       ; +0x36, 0x18013745a\njz      short loc_180137462                                            ; +0x39, 0x18013745d\nor      dword ptr [rcx], 0FFFFFFFFh                                    ; +0x3b, 0x18013745f\ncmp     rsi, 7FFFFFFFh                                                 ; +0x3e, 0x180137462\njbe     short loc_180137481                                            ; +0x45, 0x180137469\ncall    _errno                                                         ; +0x47, 0x18013746b\nmov     ebx, 16h                                                       ; +0x4c, 0x180137470\nmov     [rax], ebx                                                     ; +0x51, 0x180137475\ncall    _invalid_parameter_noinfo                                      ; +0x53, 0x180137477\njmp     loc_180137517                                                  ; +0x58, 0x18013747c\nmov     rdx, [rbp+Locale]; struct __crt_locale_pointers *              ; +0x5d, 0x180137481\nlea     rcx, [rbp+var_20]; this                                        ; +0x61, 0x180137485\ncall    ??0_LocaleUpdate@@QEAA@QEAU__crt_locale_pointers@@@Z           ; +0x65, 0x180137489\nmov     rax, [rbp+var_18]                                              ; +0x6a, 0x18013748e\nmov     ecx, [rax+0Ch]                                                 ; +0x6e, 0x180137492\ncmp     ecx, 0FDE9h                                                    ; +0x71, 0x180137495\njnz     short loc_1801374CB                                            ; +0x77, 0x18013749b\nmovzx   edx, [rbp+arg_18]; char *                                      ; +0x79, 0x18013749d\nlea     r8, [rbp+arg_8]; char32_t                                      ; +0x7d, 0x1801374a1\nand     [rbp+arg_8], 0                                                 ; +0x81, 0x1801374a5\nmov     rcx, rdi; this                                                 ; +0x86, 0x1801374aa\ncall    ?__c32rtomb_utf8@__crt_mbstring@@YA_KPEAD_UPEAU_Mbstatet@@@Z   ; +0x89, 0x1801374ad\ntest    rbx, rbx                                                       ; +0x8e, 0x1801374b2\njz      short loc_1801374B9                                            ; +0x91, 0x1801374b5\nmov     [rbx], eax                                                     ; +0x93, 0x1801374b7\ncmp     eax, 4                                                         ; +0x95, 0x1801374b9\njle     loc_180137580                                                  ; +0x98, 0x1801374bc\ncall    _errno                                                         ; +0x9e, 0x1801374c2\nmov     ebx, [rax]                                                     ; +0xa3, 0x1801374c7\njmp     short loc_180137506                                            ; +0xa5, 0x1801374c9\ncmp     qword ptr [rax+138h], 0                                        ; +0xa7, 0x1801374cb\njnz     short loc_180137542                                            ; +0xaf, 0x1801374d3\nmovzx   eax, [rbp+arg_18]                                              ; +0xb1, 0x1801374d5\nmov     ecx, 0FFh                                                      ; +0xb5, 0x1801374d9\ncmp     ax, cx                                                         ; +0xba, 0x1801374de\njbe     short loc_180137529                                            ; +0xbd, 0x1801374e1\ntest    rdi, rdi                                                       ; +0xbf, 0x1801374e3\njz      short loc_1801374FA                                            ; +0xc2, 0x1801374e6\ntest    rsi, rsi                                                       ; +0xc4, 0x1801374e8\njz      short loc_1801374FA                                            ; +0xc7, 0x1801374eb\nmov     r8, rsi; Size                                                  ; +0xc9, 0x1801374ed\nxor     edx, edx; Val                                                  ; +0xcc, 0x1801374f0\nmov     rcx, rdi; void *                                               ; +0xce, 0x1801374f2\ncall    memset                                                         ; +0xd1, 0x1801374f5\ncall    _errno                                                         ; +0xd6, 0x1801374fa\nmov     ebx, 2Ah ; '*'                                                 ; +0xdb, 0x1801374ff\nmov     [rax], ebx                                                     ; +0xe0, 0x180137504\ncmp     [rbp+var_8], 0                                                 ; +0xe2, 0x180137506\njz      short loc_180137517                                            ; +0xe6, 0x18013750a\nmov     rcx, [rbp+var_20]                                              ; +0xe8, 0x18013750c\nand     dword ptr [rcx+3A8h], 0FFFFFFFDh                               ; +0xec, 0x180137510\nmov     eax, ebx                                                       ; +0xf3, 0x180137517\nmov     rbx, [rsp+60h+arg_0]                                           ; +0xf5, 0x180137519\nadd     rsp, 60h                                                       ; +0xfd, 0x180137521\npop     rdi                                                            ; +0x101, 0x180137525\npop     rsi                                                            ; +0x102, 0x180137526\npop     rbp                                                            ; +0x103, 0x180137527\nretn                                                                   ; +0x104, 0x180137528\ntest    rdi, rdi                                                       ; +0x105, 0x180137529\njz      short loc_180137535                                            ; +0x108, 0x18013752c\ntest    rsi, rsi                                                       ; +0x10a, 0x18013752e\njz      short loc_1801375AA                                            ; +0x10d, 0x180137531\nmov     [rdi], al                                                      ; +0x10f, 0x180137533\ntest    rbx, rbx                                                       ; +0x111, 0x180137535\njz      short loc_180137580                                            ; +0x114, 0x180137538\nmov     dword ptr [rbx], 1                                             ; +0x116, 0x18013753a\njmp     short loc_180137580                                            ; +0x11c, 0x180137540\nand     dword ptr [rbp+arg_8], 0                                       ; +0x11e, 0x180137542\nlea     rax, [rbp+arg_8]                                               ; +0x122, 0x180137546\nmov     [rsp+60h+var_28], rax                                          ; +0x126, 0x18013754a\nlea     r8, [rbp+arg_18]                                               ; +0x12b, 0x18013754f\nand     [rsp+60h+var_30], 0                                            ; +0x12f, 0x180137553\nmov     r9d, 1                                                         ; +0x135, 0x180137559\nmov     [rsp+60h+var_38], esi                                          ; +0x13b, 0x18013755f\nxor     edx, edx                                                       ; +0x13f, 0x180137563\nmov     [rsp+60h+var_40], rdi                                          ; +0x141, 0x180137565\ncall    __acrt_WideCharToMultiByte                                     ; +0x146, 0x18013756a\ntest    eax, eax                                                       ; +0x14b, 0x18013756f\njz      short loc_180137584                                            ; +0x14d, 0x180137571\ncmp     dword ptr [rbp+arg_8], 0                                       ; +0x14f, 0x180137573\njnz     short loc_1801374FA                                            ; +0x153, 0x180137577\ntest    rbx, rbx                                                       ; +0x155, 0x180137579\njz      short loc_180137580                                            ; +0x158, 0x18013757c\nmov     [rbx], eax                                                     ; +0x15a, 0x18013757e\nxor     ebx, ebx                                                       ; +0x15c, 0x180137580\njmp     short loc_180137506                                            ; +0x15e, 0x180137582\ncall    cs:GetLastError                                                ; +0x160, 0x180137584\ncmp     eax, 7Ah ; 'z'                                                 ; +0x166, 0x18013758a\njnz     loc_1801374FA                                                  ; +0x169, 0x18013758d\ntest    rdi, rdi                                                       ; +0x16f, 0x180137593\njz      short loc_1801375AA                                            ; +0x172, 0x180137596\ntest    rsi, rsi                                                       ; +0x174, 0x180137598\njz      short loc_1801375AA                                            ; +0x177, 0x18013759b\nmov     r8, rsi; Size                                                  ; +0x179, 0x18013759d\nxor     edx, edx; Val                                                  ; +0x17c, 0x1801375a0\nmov     rcx, rdi; void *                                               ; +0x17e, 0x1801375a2\ncall    memset                                                         ; +0x181, 0x1801375a5\ncall    _errno                                                         ; +0x186, 0x1801375aa\nmov     ebx, 22h ; '\"'                                                 ; +0x18b, 0x1801375af\nmov     [rax], ebx                                                     ; +0x190, 0x1801375b4\ncall    _invalid_parameter_noinfo                                      ; +0x192, 0x1801375b6\njmp     loc_180137506                                                  ; +0x197, 0x1801375bb", "xrefs": ["unknown_libname_47 @ 0x18012e370", "unknown_libname_56 @ 0x18012edc1", "wctomb_s @ 0x1801375ca", "<???> @ 0x1802035d8"], "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"}