{"type": "func", "start": 6443751620, "end": 6443751783, "name": "__crt_mbstring::__c16rtomb_utf8", "pseudocode": "// \n// __crt_mbstring::__c16rtomb_utf8 from 0x18013d8c4 to 0x18013d967 (163 bytes)\n// \n// 3 xrefs:\n// > __crt_mbstring::__wcsrtombs_utf8 @ 0x180137164\n// > __crt_mbstring::__wcsrtombs_utf8 @ 0x1801371d8\n// > <???> @ 0x180203ae8\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::__c16rtomb_utf8(\n        __crt_mbstring *this,\n        char *a2,\n        _DWORD *a3,\n        struct _Mbstatet *a4)\n{\n  struct _Mbstatet *v4; // r9\n  _DWORD *v5; // rbx\n  unsigned __int16 v6; // dx\n  unsigned __int64 result; // rax\n  char *v8; // rdx\n  __int64 v9; // [rsp+40h] [rbp+18h] BYREF\n\n  v4 = (struct _Mbstatet *)(unsigned __int16)a2;\n  v5 = &unk_1801F5728;\n  if ( a3 )\n    v5 = a3;\n  v6 = (_WORD)a2 + 9216;\n  if ( *v5 )\n  {\n    if ( v6 > 0x3FFu )\n      goto LABEL_5;\n    v9 = 0;\n    result = __crt_mbstring::__c32rtomb_utf8(this, (char *)(*v5 + ((unsigned int)v4 & 0xFFFF23FF)), (char32_t)&v9, v4);\n    *(_QWORD *)v5 = 0;\n  }\n  else\n  {\n    if ( v6 <= 0x3FFu )\n    {\nLABEL_5:\n      *(_QWORD *)v5 = 0;\n      *errno() = 42;\n      return -1;\n    }\n    v8 = (char *)(unsigned int)v4;\n    LOWORD(v4) = (_WORD)v4 + 10240;\n    if ( (unsigned __int16)v4 > 0x3FFu )\n    {\n      return __crt_mbstring::__c32rtomb_utf8(this, v8, (char32_t)v5, v4);\n    }\n    else\n    {\n      *v5 = (((_DWORD)v8 << 10) & 0xFC9FFC00) + 0x10000;\n      return 0;\n    }\n  }\n  return result;\n}", "assembly": "; \n; __crt_mbstring::__c16rtomb_utf8 from 0x18013d8c4 to 0x18013d967 (163 bytes)\n; \n; 3 xrefs:\n; > __crt_mbstring::__wcsrtombs_utf8 @ 0x180137164\n; > __crt_mbstring::__wcsrtombs_utf8 @ 0x1801371d8\n; > <???> @ 0x180203ae8\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    rbx                                                            ; +0x0, 0x18013d8c4\nsub     rsp, 20h                                                       ; +0x2, 0x18013d8c6\ntest    r8, r8                                                         ; +0x6, 0x18013d8ca\nmovzx   r9d, dx; struct _Mbstatet *                                    ; +0x9, 0x18013d8cd\nlea     rbx, unk_1801F5728                                             ; +0xd, 0x18013d8d1\nmov     edx, 2400h                                                     ; +0x14, 0x18013d8d8\ncmovnz  rbx, r8                                                        ; +0x19, 0x18013d8dd\nmov     eax, 3FFh                                                      ; +0x1d, 0x18013d8e1\nadd     edx, r9d                                                       ; +0x22, 0x18013d8e6\ncmp     dword ptr [rbx], 0                                             ; +0x25, 0x18013d8e9\njnz     short loc_18013D93D                                            ; +0x28, 0x18013d8ec\ncmp     dx, ax                                                         ; +0x2a, 0x18013d8ee\nja      short loc_18013D908                                            ; +0x2d, 0x18013d8f1\nand     qword ptr [rbx], 0                                             ; +0x2f, 0x18013d8f3\ncall    _errno                                                         ; +0x33, 0x18013d8f7\nmov     dword ptr [rax], 2Ah ; '*'                                     ; +0x38, 0x18013d8fc\nor      rax, 0FFFFFFFFFFFFFFFFh                                        ; +0x3e, 0x18013d902\njmp     short loc_18013D961                                            ; +0x42, 0x18013d906\nmov     r8d, 2800h                                                     ; +0x44, 0x18013d908\nmov     edx, r9d; char *                                               ; +0x4a, 0x18013d90e\nadd     r9w, r8w; struct _Mbstatet *                                   ; +0x4d, 0x18013d911\ncmp     r9w, ax                                                        ; +0x51, 0x18013d915\nja      short loc_18013D930                                            ; +0x55, 0x18013d919\nshl     edx, 0Ah                                                       ; +0x57, 0x18013d91b\nand     edx, 0FC9FFC00h                                                ; +0x5a, 0x18013d91e\nadd     edx, 10000h                                                    ; +0x60, 0x18013d924\nmov     [rbx], edx                                                     ; +0x66, 0x18013d92a\nxor     eax, eax                                                       ; +0x68, 0x18013d92c\njmp     short loc_18013D961                                            ; +0x6a, 0x18013d92e\nmov     r8, rbx; char32_t                                              ; +0x6c, 0x18013d930\nadd     rsp, 20h                                                       ; +0x6f, 0x18013d933\npop     rbx                                                            ; +0x73, 0x18013d937\njmp     j_?__c32rtomb_utf8@__crt_mbstring@@YA_KPEAD_UPEAU_Mbstatet@@@Z ; +0x74, 0x18013d938\ncmp     dx, ax                                                         ; +0x79, 0x18013d93d\nja      short loc_18013D8F3                                            ; +0x7c, 0x18013d940\nand     [rsp+28h+arg_10], 0                                            ; +0x7e, 0x18013d942\nlea     r8, [rsp+28h+arg_10]; char32_t                                 ; +0x84, 0x18013d948\nmov     edx, r9d                                                       ; +0x89, 0x18013d94d\nand     edx, 0FFFF23FFh                                                ; +0x8c, 0x18013d950\nadd     edx, [rbx]; char *                                             ; +0x92, 0x18013d956\ncall    j_?__c32rtomb_utf8@__crt_mbstring@@YA_KPEAD_UPEAU_Mbstatet@@@Z ; +0x94, 0x18013d958\nand     qword ptr [rbx], 0                                             ; +0x99, 0x18013d95d\nadd     rsp, 20h                                                       ; +0x9d, 0x18013d961\npop     rbx                                                            ; +0xa1, 0x18013d965\nretn                                                                   ; +0xa2, 0x18013d966", "xrefs": ["__crt_mbstring::__wcsrtombs_utf8 @ 0x180137164", "__crt_mbstring::__wcsrtombs_utf8 @ 0x1801371d8", "<???> @ 0x180203ae8"], "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"}