{"type": "func", "start": 6443715960, "end": 6443716255, "name": "_wcsicmp_l", "pseudocode": "// \n// _wcsicmp_l from 0x180134d78 to 0x180134e9f (295 bytes)\n// \n// 2 xrefs:\n// > _wcsicmp @ 0x180134d71\n// > <???> @ 0x1802032e4\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\nint __cdecl wcsicmp_l(const wchar_t *String1, const wchar_t *String2, _locale_t Locale)\n{\n  wchar_t *v3; // rsi\n  wchar_t *v4; // rbx\n  __int64 v6; // rdx\n  int v7; // edi\n  __int64 v8; // rcx\n  unsigned __int16 v9; // ax\n  int v10; // ebp\n  int v11; // edi\n  __int64 v12; // rcx\n  unsigned __int16 v13; // ax\n  __int64 v14; // [rsp+20h] [rbp-38h] BYREF\n  _QWORD v15[2]; // [rsp+28h] [rbp-30h] BYREF\n  char v16; // [rsp+38h] [rbp-20h]\n\n  v3 = (wchar_t *)String2;\n  v4 = (wchar_t *)String1;\n  if ( String1 && String2 )\n  {\n    _LocaleUpdate::_LocaleUpdate((_LocaleUpdate *)&v14, Locale);\n    v6 = v15[0];\n    if ( *(_QWORD *)(v15[0] + 312LL) )\n    {\n      do\n      {\n        if ( *v4 >= 0x100u )\n        {\n          v9 = sub_18013C0DC(*v4, v15);\n          v6 = v15[0];\n        }\n        else\n        {\n          v8 = *(unsigned __int8 *)v4;\n          if ( (wctype[v8 + 1] & 1) != 0 )\n            LOBYTE(v8) = *(_BYTE *)(v8 + *(_QWORD *)(v6 + 272));\n          v9 = (unsigned __int8)v8;\n        }\n        ++v4;\n        v10 = v9;\n        v11 = v9;\n        if ( *v3 >= 0x100u )\n        {\n          v13 = sub_18013C0DC(*v3, v15);\n          v6 = v15[0];\n        }\n        else\n        {\n          v12 = *(unsigned __int8 *)v3;\n          if ( (wctype[v12 + 1] & 1) != 0 )\n            LOBYTE(v12) = *(_BYTE *)(v12 + *(_QWORD *)(v6 + 272));\n          v13 = (unsigned __int8)v12;\n        }\n        ++v3;\n        v7 = v11 - v13;\n      }\n      while ( !v7 && v10 );\n    }\n    else\n    {\n      v7 = _ascii_wcsicmp(v4, v3);\n    }\n    if ( v16 )\n      *(_DWORD *)(v14 + 936) &= ~2u;\n    return v7;\n  }\n  else\n  {\n    *errno() = 22;\n    invalid_parameter_noinfo();\n    return 0x7FFFFFFF;\n  }\n}", "assembly": "; \n; _wcsicmp_l from 0x180134d78 to 0x180134e9f (295 bytes)\n; \n; 2 xrefs:\n; > _wcsicmp @ 0x180134d71\n; > <???> @ 0x1802032e4\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_0], rbx                                               ; +0x0, 0x180134d78\nmov     [rsp+arg_8], rbp                                               ; +0x5, 0x180134d7d\nmov     [rsp+arg_10], rsi                                              ; +0xa, 0x180134d82\npush    rdi                                                            ; +0xf, 0x180134d87\npush    r14                                                            ; +0x10, 0x180134d88\npush    r15                                                            ; +0x12, 0x180134d8a\nsub     rsp, 40h                                                       ; +0x14, 0x180134d8c\nmov     rsi, rdx                                                       ; +0x18, 0x180134d90\nmov     rbx, rcx                                                       ; +0x1b, 0x180134d93\ntest    rcx, rcx                                                       ; +0x1e, 0x180134d96\njnz     short loc_180134DB5                                            ; +0x21, 0x180134d99\ncall    _errno                                                         ; +0x23, 0x180134d9b\nmov     dword ptr [rax], 16h                                           ; +0x28, 0x180134da0\ncall    _invalid_parameter_noinfo                                      ; +0x2e, 0x180134da6\nmov     eax, 7FFFFFFFh                                                 ; +0x33, 0x180134dab\njmp     loc_180134E86                                                  ; +0x38, 0x180134db0\ntest    rsi, rsi                                                       ; +0x3d, 0x180134db5\njz      short loc_180134D9B                                            ; +0x40, 0x180134db8\nmov     rdx, r8; struct __crt_locale_pointers *                        ; +0x42, 0x180134dba\nlea     rcx, [rsp+58h+var_38]; this                                    ; +0x45, 0x180134dbd\ncall    ??0_LocaleUpdate@@QEAA@QEAU__crt_locale_pointers@@@Z           ; +0x4a, 0x180134dc2\nmov     rdx, [rsp+58h+var_30]                                          ; +0x4f, 0x180134dc7\ncmp     qword ptr [rdx+138h], 0                                        ; +0x54, 0x180134dcc\njnz     short loc_180134DE8                                            ; +0x5c, 0x180134dd4\nmov     rdx, rsi                                                       ; +0x5e, 0x180134dd6\nmov     rcx, rbx                                                       ; +0x61, 0x180134dd9\ncall    __ascii_wcsicmp                                                ; +0x64, 0x180134ddc\nmov     edi, eax                                                       ; +0x69, 0x180134de1\njmp     loc_180134E71                                                  ; +0x6b, 0x180134de3\nmov     r14d, 100h                                                     ; +0x70, 0x180134de8\nlea     r15, _wctype                                                   ; +0x76, 0x180134dee\ncmp     [rbx], r14w                                                    ; +0x7d, 0x180134df5\njnb     short loc_180134E15                                            ; +0x81, 0x180134df9\nmovzx   ecx, byte ptr [rbx]                                            ; +0x83, 0x180134dfb\ntest    byte ptr [r15+rcx*2+2], 1                                      ; +0x86, 0x180134dfe\njz      short loc_180134E10                                            ; +0x8c, 0x180134e04\nmov     rax, [rdx+110h]                                                ; +0x8e, 0x180134e06\nmov     cl, [rcx+rax]                                                  ; +0x95, 0x180134e0d\nmovzx   eax, cl                                                        ; +0x98, 0x180134e10\njmp     short loc_180134E27                                            ; +0x9b, 0x180134e13\nmovzx   ecx, word ptr [rbx]                                            ; +0x9d, 0x180134e15\nlea     rdx, [rsp+58h+var_30]                                          ; +0xa0, 0x180134e18\ncall    sub_18013C0DC                                                  ; +0xa5, 0x180134e1d\nmov     rdx, [rsp+58h+var_30]                                          ; +0xaa, 0x180134e22\nadd     rbx, 2                                                         ; +0xaf, 0x180134e27\nmovzx   ebp, ax                                                        ; +0xb3, 0x180134e2b\nmov     edi, ebp                                                       ; +0xb6, 0x180134e2e\ncmp     [rsi], r14w                                                    ; +0xb8, 0x180134e30\njnb     short loc_180134E50                                            ; +0xbc, 0x180134e34\nmovzx   ecx, byte ptr [rsi]                                            ; +0xbe, 0x180134e36\ntest    byte ptr [r15+rcx*2+2], 1                                      ; +0xc1, 0x180134e39\njz      short loc_180134E4B                                            ; +0xc7, 0x180134e3f\nmov     rax, [rdx+110h]                                                ; +0xc9, 0x180134e41\nmov     cl, [rcx+rax]                                                  ; +0xd0, 0x180134e48\nmovzx   eax, cl                                                        ; +0xd3, 0x180134e4b\njmp     short loc_180134E62                                            ; +0xd6, 0x180134e4e\nmovzx   ecx, word ptr [rsi]                                            ; +0xd8, 0x180134e50\nlea     rdx, [rsp+58h+var_30]                                          ; +0xdb, 0x180134e53\ncall    sub_18013C0DC                                                  ; +0xe0, 0x180134e58\nmov     rdx, [rsp+58h+var_30]                                          ; +0xe5, 0x180134e5d\nadd     rsi, 2                                                         ; +0xea, 0x180134e62\nmovzx   eax, ax                                                        ; +0xee, 0x180134e66\nsub     edi, eax                                                       ; +0xf1, 0x180134e69\njnz     short loc_180134E71                                            ; +0xf3, 0x180134e6b\ntest    ebp, ebp                                                       ; +0xf5, 0x180134e6d\njnz     short loc_180134DF5                                            ; +0xf7, 0x180134e6f\ncmp     [rsp+58h+var_20], 0                                            ; +0xf9, 0x180134e71\njz      short loc_180134E84                                            ; +0xfe, 0x180134e76\nmov     rax, [rsp+58h+var_38]                                          ; +0x100, 0x180134e78\nand     dword ptr [rax+3A8h], 0FFFFFFFDh                               ; +0x105, 0x180134e7d\nmov     eax, edi                                                       ; +0x10c, 0x180134e84\nmov     rbx, [rsp+58h+arg_0]                                           ; +0x10e, 0x180134e86\nmov     rbp, [rsp+58h+arg_8]                                           ; +0x113, 0x180134e8b\nmov     rsi, [rsp+58h+arg_10]                                          ; +0x118, 0x180134e90\nadd     rsp, 40h                                                       ; +0x11d, 0x180134e95\npop     r15                                                            ; +0x121, 0x180134e99\npop     r14                                                            ; +0x123, 0x180134e9b\npop     rdi                                                            ; +0x125, 0x180134e9d\nretn                                                                   ; +0x126, 0x180134e9e", "xrefs": ["_wcsicmp @ 0x180134d71", "<???> @ 0x1802032e4"], "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"}