{"type": "func", "start": 6443766352, "end": 6443766821, "name": "__crt_mbstring::__mbrtoc32_utf8", "pseudocode": "// \n// __crt_mbstring::__mbrtoc32_utf8 from 0x180141250 to 0x180141425 (469 bytes)\n// \n// 4 xrefs:\n// > __crt_mbstring::__mbrtowc_utf8 @ 0x18013da7e\n// > __crt_mbstring::__mbsrtowcs_utf8 @ 0x18013db1f\n// > __crt_mbstring::__mbsrtowcs_utf8 @ 0x18013dc01\n// > <???> @ 0x180203c98\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\nunsigned __int64 __fastcall __crt_mbstring::__mbrtoc32_utf8(\n        unsigned __int64 this,\n        char32_t *a2,\n        const char *a3,\n        void *a4)\n{\n  __int64 v4; // r10\n  void *v5; // r11\n  const char *v6; // rdi\n  unsigned __int64 v8; // r14\n  _DWORD *v9; // rsi\n  int v11; // r9d\n  unsigned __int8 v12; // r8\n  unsigned __int8 v13; // bl\n  unsigned int v14; // edx\n  unsigned __int64 v15; // r9\n  char v16; // cl\n  _DWORD v17[6]; // [rsp+18h] [rbp-50h]\n\n  v4 = 0;\n  v5 = &unk_1801F5730;\n  v6 = &byte_18014572F;\n  if ( a4 )\n    v5 = a4;\n  if ( a2 )\n    v6 = (const char *)a2;\n  v8 = 1;\n  if ( a2 )\n    v8 = (unsigned __int64)a3;\n  v9 = (_DWORD *)(this & -(__int64)(a2 != nullptr));\n  if ( !v8 )\n    return -2;\n  if ( !*((_WORD *)v5 + 3) )\n  {\n    v11 = *(unsigned __int8 *)v6++;\n    if ( (v11 & 0x80u) == 0 )\n    {\n      if ( v9 )\n        *v9 = v11;\n      LOBYTE(v4) = (_BYTE)v11 != 0;\n      return v4;\n    }\n    if ( (v11 & 0xE0) == 0xC0 )\n    {\n      v12 = 2;\nLABEL_20:\n      v13 = v12;\n      v14 = v11 & ((1 << (7 - v12)) - 1);\n      goto LABEL_24;\n    }\n    if ( (v11 & 0xF0) == 0xE0 )\n    {\n      v12 = 3;\n      goto LABEL_20;\n    }\n    if ( (v11 & 0xF8) == 0xF0 )\n    {\n      v12 = 4;\n      goto LABEL_20;\n    }\nLABEL_38:\n    *(_QWORD *)v5 = 0;\n    *errno() = 42;\n    return -1;\n  }\n  v12 = *((_BYTE *)v5 + 4);\n  v14 = *(_DWORD *)v5;\n  v13 = *((_BYTE *)v5 + 6);\n  if ( (unsigned __int8)(v12 - 2) > 2u || !v13 || v13 >= v12 )\n    goto LABEL_38;\nLABEL_24:\n  v15 = v13;\n  if ( v13 >= v8 )\n    v15 = v8;\n  while ( v6 - (const char *)a2 < v15 )\n  {\n    v16 = *v6++;\n    if ( (v16 & 0xC0) != 0x80 )\n      goto LABEL_38;\n    v14 = (v14 << 6) | v16 & 0x3F;\n  }\n  if ( v15 < v13 )\n  {\n    *((_WORD *)v5 + 2) = v12;\n    *((_WORD *)v5 + 3) = (unsigned __int8)(v13 - v15);\n    *(_DWORD *)v5 = v14;\n    return -2;\n  }\n  if ( v14 - 55296 <= 0x7FF )\n    goto LABEL_38;\n  if ( v14 >= 0x110000 )\n    goto LABEL_38;\n  v17[2] = 128;\n  v17[3] = 2048;\n  v17[4] = 0x10000;\n  if ( v14 < v17[v12] )\n    goto LABEL_38;\n  if ( v9 )\n    *v9 = v14;\n  *(_QWORD *)v5 = 0;\n  return v13 & (unsigned __int64)-(__int64)(v14 != 0);\n}", "assembly": "; \n; __crt_mbstring::__mbrtoc32_utf8 from 0x180141250 to 0x180141425 (469 bytes)\n; \n; 4 xrefs:\n; > __crt_mbstring::__mbrtowc_utf8 @ 0x18013da7e\n; > __crt_mbstring::__mbsrtowcs_utf8 @ 0x18013db1f\n; > __crt_mbstring::__mbsrtowcs_utf8 @ 0x18013dc01\n; > <???> @ 0x180203c98\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+arg_8], rbx                                               ; +0x0, 0x180141250\npush    rbp                                                            ; +0x5, 0x180141255\npush    rsi                                                            ; +0x6, 0x180141256\npush    rdi                                                            ; +0x7, 0x180141257\npush    r14                                                            ; +0x8, 0x180141258\npush    r15                                                            ; +0xa, 0x18014125a\nsub     rsp, 40h                                                       ; +0xc, 0x18014125c\nmov     rax, cs:__security_cookie                                      ; +0x10, 0x180141260\nxor     rax, rsp                                                       ; +0x17, 0x180141267\nmov     [rsp+68h+var_38], rax                                          ; +0x1a, 0x18014126a\nxor     r10d, r10d                                                     ; +0x1f, 0x18014126f\nlea     r11, unk_1801F5730                                             ; +0x22, 0x180141272\ntest    r9, r9                                                         ; +0x29, 0x180141279\nlea     rdi, byte_18014572F                                            ; +0x2c, 0x18014127c\nmov     rax, rdx                                                       ; +0x33, 0x180141283\nmov     r15, rdx                                                       ; +0x36, 0x180141286\ncmovnz  r11, r9                                                        ; +0x39, 0x180141289\ntest    rdx, rdx                                                       ; +0x3d, 0x18014128d\nlea     ebp, [r10+1]                                                   ; +0x40, 0x180141290\ncmovnz  rdi, rdx                                                       ; +0x44, 0x180141294\nmov     r14d, ebp                                                      ; +0x48, 0x180141298\ncmovnz  r14, r8                                                        ; +0x4b, 0x18014129b\nneg     rax                                                            ; +0x4f, 0x18014129f\nsbb     rsi, rsi                                                       ; +0x52, 0x1801412a2\nand     rsi, rcx                                                       ; +0x55, 0x1801412a5\ntest    r14, r14                                                       ; +0x58, 0x1801412a8\njnz     short loc_1801412B9                                            ; +0x5b, 0x1801412ab\nmov     rax, 0FFFFFFFFFFFFFFFEh                                        ; +0x5d, 0x1801412ad\njmp     loc_180141407                                                  ; +0x64, 0x1801412b4\ncmp     [r11+6], r10w                                                  ; +0x69, 0x1801412b9\njnz     short loc_180141328                                            ; +0x6e, 0x1801412be\nmovzx   r9d, byte ptr [rdi]                                            ; +0x70, 0x1801412c0\ninc     rdi                                                            ; +0x74, 0x1801412c4\ntest    r9b, r9b                                                       ; +0x77, 0x1801412c7\njs      short loc_1801412E3                                            ; +0x7a, 0x1801412ca\ntest    rsi, rsi                                                       ; +0x7c, 0x1801412cc\njz      short loc_1801412D4                                            ; +0x7f, 0x1801412cf\nmov     [rsi], r9d                                                     ; +0x81, 0x1801412d1\ntest    r9b, r9b                                                       ; +0x84, 0x1801412d4\nsetnz   r10b                                                           ; +0x87, 0x1801412d7\nmov     rax, r10                                                       ; +0x8b, 0x1801412db\njmp     loc_180141407                                                  ; +0x8e, 0x1801412de\nmov     al, r9b                                                        ; +0x93, 0x1801412e3\nand     al, 0E0h                                                       ; +0x96, 0x1801412e6\ncmp     al, 0C0h                                                       ; +0x98, 0x1801412e8\njnz     short loc_1801412F1                                            ; +0x9a, 0x1801412ea\nmov     r8b, 2                                                         ; +0x9c, 0x1801412ec\njmp     short loc_18014130F                                            ; +0x9f, 0x1801412ef\nmov     al, r9b                                                        ; +0xa1, 0x1801412f1\nand     al, 0F0h                                                       ; +0xa4, 0x1801412f4\ncmp     al, 0E0h                                                       ; +0xa6, 0x1801412f6\njnz     short loc_1801412FF                                            ; +0xa8, 0x1801412f8\nmov     r8b, 3                                                         ; +0xaa, 0x1801412fa\njmp     short loc_18014130F                                            ; +0xad, 0x1801412fd\nmov     al, r9b                                                        ; +0xaf, 0x1801412ff\nand     al, 0F8h                                                       ; +0xb2, 0x180141302\ncmp     al, 0F0h                                                       ; +0xb4, 0x180141304\njnz     loc_1801413F5                                                  ; +0xb6, 0x180141306\nmov     r8b, 4                                                         ; +0xbc, 0x18014130c\nmovzx   eax, r8b                                                       ; +0xbf, 0x18014130f\nmov     ecx, 7                                                         ; +0xc3, 0x180141313\nsub     ecx, eax                                                       ; +0xc8, 0x180141318\nmov     edx, ebp                                                       ; +0xca, 0x18014131a\nshl     edx, cl                                                        ; +0xcc, 0x18014131c\nmov     bl, r8b                                                        ; +0xce, 0x18014131e\nsub     edx, ebp                                                       ; +0xd1, 0x180141321\nand     edx, r9d                                                       ; +0xd3, 0x180141323\njmp     short loc_180141351                                            ; +0xd6, 0x180141326\nmov     r8b, [r11+4]                                                   ; +0xd8, 0x180141328\nmov     edx, [r11]                                                     ; +0xdc, 0x18014132c\nmov     bl, [r11+6]                                                    ; +0xdf, 0x18014132f\nlea     eax, [r8-2]                                                    ; +0xe3, 0x180141333\ncmp     al, 2                                                          ; +0xe7, 0x180141337\nja      loc_1801413F5                                                  ; +0xe9, 0x180141339\ncmp     bl, bpl                                                        ; +0xef, 0x18014133f\njb      loc_1801413F5                                                  ; +0xf2, 0x180141342\ncmp     bl, r8b                                                        ; +0xf8, 0x180141348\njnb     loc_1801413F5                                                  ; +0xfb, 0x18014134b\nmovzx   ebp, bl                                                        ; +0x101, 0x180141351\ncmp     rbp, r14                                                       ; +0x104, 0x180141354\nmov     r9d, ebp                                                       ; +0x107, 0x180141357\ncmovnb  r9, r14                                                        ; +0x10a, 0x18014135a\njmp     short loc_18014137E                                            ; +0x10e, 0x18014135e\nmovzx   ecx, byte ptr [rdi]                                            ; +0x110, 0x180141360\ninc     rdi                                                            ; +0x113, 0x180141363\nmov     al, cl                                                         ; +0x116, 0x180141366\nand     al, 0C0h                                                       ; +0x118, 0x180141368\ncmp     al, 80h                                                        ; +0x11a, 0x18014136a\njnz     loc_1801413F5                                                  ; +0x11c, 0x18014136c\nmov     eax, edx                                                       ; +0x122, 0x180141372\nand     ecx, 3Fh                                                       ; +0x124, 0x180141374\nshl     eax, 6                                                         ; +0x127, 0x180141377\nmov     edx, ecx                                                       ; +0x12a, 0x18014137a\nor      edx, eax                                                       ; +0x12c, 0x18014137c\nmov     rax, rdi                                                       ; +0x12e, 0x18014137e\nsub     rax, r15                                                       ; +0x131, 0x180141381\ncmp     rax, r9                                                        ; +0x134, 0x180141384\njb      short loc_180141360                                            ; +0x137, 0x180141387\ncmp     r9, rbp                                                        ; +0x139, 0x180141389\njnb     short loc_1801413AA                                            ; +0x13c, 0x18014138c\nmovzx   eax, r8b                                                       ; +0x13e, 0x18014138e\nsub     bl, r9b                                                        ; +0x142, 0x180141392\nmov     [r11+4], ax                                                    ; +0x145, 0x180141395\nmovzx   eax, bl                                                        ; +0x14a, 0x18014139a\nmov     [r11+6], ax                                                    ; +0x14d, 0x18014139d\nmov     [r11], edx                                                     ; +0x152, 0x1801413a2\njmp     loc_1801412AD                                                  ; +0x155, 0x1801413a5\nlea     eax, [rdx-0D800h]                                              ; +0x15a, 0x1801413aa\ncmp     eax, 7FFh                                                      ; +0x160, 0x1801413b0\njbe     short loc_1801413F5                                            ; +0x165, 0x1801413b5\ncmp     edx, 110000h                                                   ; +0x167, 0x1801413b7\njnb     short loc_1801413F5                                            ; +0x16d, 0x1801413bd\nmovzx   eax, r8b                                                       ; +0x16f, 0x1801413bf\nmov     [rsp+68h+var_48], 80h                                          ; +0x173, 0x1801413c3\nmov     [rsp+68h+var_44], 800h                                         ; +0x17b, 0x1801413cb\nmov     [rsp+68h+var_40], 10000h                                       ; +0x183, 0x1801413d3\ncmp     edx, [rsp+rax*4+68h+var_50]                                    ; +0x18b, 0x1801413db\njb      short loc_1801413F5                                            ; +0x18f, 0x1801413df\ntest    rsi, rsi                                                       ; +0x191, 0x1801413e1\njz      short loc_1801413E8                                            ; +0x194, 0x1801413e4\nmov     [rsi], edx                                                     ; +0x196, 0x1801413e6\nneg     edx                                                            ; +0x198, 0x1801413e8\nmov     [r11], r10                                                     ; +0x19a, 0x1801413ea\nsbb     rax, rax                                                       ; +0x19d, 0x1801413ed\nand     rax, rbp                                                       ; +0x1a0, 0x1801413f0\njmp     short loc_180141407                                            ; +0x1a3, 0x1801413f3\nmov     [r11], r10                                                     ; +0x1a5, 0x1801413f5\ncall    _errno                                                         ; +0x1a8, 0x1801413f8\nmov     dword ptr [rax], 2Ah ; '*'                                     ; +0x1ad, 0x1801413fd\nor      rax, 0FFFFFFFFFFFFFFFFh                                        ; +0x1b3, 0x180141403\nmov     rcx, [rsp+68h+var_38]                                          ; +0x1b7, 0x180141407\nxor     rcx, rsp; StackCookie                                          ; +0x1bc, 0x18014140c\ncall    __security_check_cookie                                        ; +0x1bf, 0x18014140f\nmov     rbx, [rsp+68h+arg_8]                                           ; +0x1c4, 0x180141414\nadd     rsp, 40h                                                       ; +0x1c9, 0x180141419\npop     r15                                                            ; +0x1cd, 0x18014141d\npop     r14                                                            ; +0x1cf, 0x18014141f\npop     rdi                                                            ; +0x1d1, 0x180141421\npop     rsi                                                            ; +0x1d2, 0x180141422\npop     rbp                                                            ; +0x1d3, 0x180141423\nretn                                                                   ; +0x1d4, 0x180141424", "xrefs": ["__crt_mbstring::__mbrtowc_utf8 @ 0x18013da7e", "__crt_mbstring::__mbsrtowcs_utf8 @ 0x18013db1f", "__crt_mbstring::__mbsrtowcs_utf8 @ 0x18013dc01", "<???> @ 0x180203c98"], "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"}