{"type": "func", "start": 6443745828, "end": 6443746202, "name": "__acrt_free_locale", "pseudocode": "// \n// __acrt_free_locale from 0x18013c224 to 0x18013c39a (374 bytes)\n// \n// 3 xrefs:\n// > replace_current_thread_locale_nolock @ 0x18013524f\n// > _updatetlocinfoEx_nolock @ 0x18013c58d\n// > <???> @ 0x1802039bc\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\nvoid __fastcall _acrt_free_locale(char *Block)\n{\n  _UNKNOWN **v1; // rax\n  _DWORD *v3; // rax\n  _DWORD *v4; // rcx\n  _DWORD *v5; // rcx\n  _DWORD *v6; // rax\n  void **v7; // rsi\n  __int64 v8; // rbp\n  _DWORD **v9; // rdi\n  _DWORD *v10; // rcx\n  _DWORD *v11; // rcx\n\n  v1 = *((_UNKNOWN ***)Block + 31);\n  if ( v1 )\n  {\n    if ( v1 != &off_1801B2160 )\n    {\n      v3 = *((_DWORD **)Block + 28);\n      if ( v3 )\n      {\n        if ( !*v3 )\n        {\n          v4 = *((_DWORD **)Block + 30);\n          if ( v4 && !*v4 )\n          {\n            free_base(v4);\n            _free_lconv_mon(*((_QWORD *)Block + 31));\n          }\n          v5 = *((_DWORD **)Block + 29);\n          if ( v5 && !*v5 )\n          {\n            free_base(v5);\n            _free_lconv_num(*((_QWORD *)Block + 31));\n          }\n          free_base(*((void **)Block + 28));\n          free_base(*((void **)Block + 31));\n        }\n      }\n    }\n  }\n  v6 = *((_DWORD **)Block + 32);\n  if ( v6 && !*v6 )\n  {\n    free_base((void *)(*((_QWORD *)Block + 33) - 254LL));\n    free_base((void *)(*((_QWORD *)Block + 34) - 128LL));\n    free_base((void *)(*((_QWORD *)Block + 35) - 128LL));\n    free_base(*((void **)Block + 32));\n  }\n  _acrt_locale_free_lc_time_if_unreferenced(*((void **)Block + 36));\n  v7 = (void **)(Block + 296);\n  v8 = 6;\n  v9 = (_DWORD **)(Block + 56);\n  do\n  {\n    if ( *(v9 - 2) != (_DWORD *)&unk_1801B19E8 )\n    {\n      v10 = *v9;\n      if ( *v9 )\n      {\n        if ( !*v10 )\n        {\n          free_base(v10);\n          free_base(*v7);\n        }\n      }\n    }\n    if ( *(v9 - 3) )\n    {\n      v11 = *(v9 - 1);\n      if ( v11 )\n      {\n        if ( !*v11 )\n          free_base(v11);\n      }\n    }\n    ++v7;\n    v9 += 4;\n    --v8;\n  }\n  while ( v8 );\n  free_base(Block);\n}", "assembly": "; \n; __acrt_free_locale from 0x18013c224 to 0x18013c39a (374 bytes)\n; \n; 3 xrefs:\n; > replace_current_thread_locale_nolock @ 0x18013524f\n; > _updatetlocinfoEx_nolock @ 0x18013c58d\n; > <???> @ 0x1802039bc\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, 0x18013c224\nmov     [rsp+arg_8], rbp                                               ; +0x5, 0x18013c229\nmov     [rsp+arg_10], rsi                                              ; +0xa, 0x18013c22e\npush    rdi                                                            ; +0xf, 0x18013c233\nsub     rsp, 20h                                                       ; +0x10, 0x18013c234\nmov     rax, [rcx+0F8h]                                                ; +0x14, 0x18013c238\nmov     rbx, rcx                                                       ; +0x1b, 0x18013c23f\ntest    rax, rax                                                       ; +0x1e, 0x18013c242\njz      short loc_18013C2C0                                            ; +0x21, 0x18013c245\nlea     rcx, off_1801B2160                                             ; +0x23, 0x18013c247\ncmp     rax, rcx                                                       ; +0x2a, 0x18013c24e\njz      short loc_18013C2C0                                            ; +0x2d, 0x18013c251\nmov     rax, [rbx+0E0h]                                                ; +0x2f, 0x18013c253\ntest    rax, rax                                                       ; +0x36, 0x18013c25a\njz      short loc_18013C2C0                                            ; +0x39, 0x18013c25d\ncmp     dword ptr [rax], 0                                             ; +0x3b, 0x18013c25f\njnz     short loc_18013C2C0                                            ; +0x3e, 0x18013c262\nmov     rcx, [rbx+0F0h]; Block                                         ; +0x40, 0x18013c264\ntest    rcx, rcx                                                       ; +0x47, 0x18013c26b\njz      short loc_18013C286                                            ; +0x4a, 0x18013c26e\ncmp     dword ptr [rcx], 0                                             ; +0x4c, 0x18013c270\njnz     short loc_18013C286                                            ; +0x4f, 0x18013c273\ncall    _free_base                                                     ; +0x51, 0x18013c275\nmov     rcx, [rbx+0F8h]                                                ; +0x56, 0x18013c27a\ncall    __free_lconv_mon                                               ; +0x5d, 0x18013c281\nmov     rcx, [rbx+0E8h]; Block                                         ; +0x62, 0x18013c286\ntest    rcx, rcx                                                       ; +0x69, 0x18013c28d\njz      short loc_18013C2A8                                            ; +0x6c, 0x18013c290\ncmp     dword ptr [rcx], 0                                             ; +0x6e, 0x18013c292\njnz     short loc_18013C2A8                                            ; +0x71, 0x18013c295\ncall    _free_base                                                     ; +0x73, 0x18013c297\nmov     rcx, [rbx+0F8h]                                                ; +0x78, 0x18013c29c\ncall    __free_lconv_num                                               ; +0x7f, 0x18013c2a3\nmov     rcx, [rbx+0E0h]; Block                                         ; +0x84, 0x18013c2a8\ncall    _free_base                                                     ; +0x8b, 0x18013c2af\nmov     rcx, [rbx+0F8h]; Block                                         ; +0x90, 0x18013c2b4\ncall    _free_base                                                     ; +0x97, 0x18013c2bb\nmov     rax, [rbx+100h]                                                ; +0x9c, 0x18013c2c0\ntest    rax, rax                                                       ; +0xa3, 0x18013c2c7\njz      short loc_18013C313                                            ; +0xa6, 0x18013c2ca\ncmp     dword ptr [rax], 0                                             ; +0xa8, 0x18013c2cc\njnz     short loc_18013C313                                            ; +0xab, 0x18013c2cf\nmov     rcx, [rbx+108h]                                                ; +0xad, 0x18013c2d1\nsub     rcx, 0FEh; Block                                               ; +0xb4, 0x18013c2d8\ncall    _free_base                                                     ; +0xbb, 0x18013c2df\nmov     rcx, [rbx+110h]                                                ; +0xc0, 0x18013c2e4\nmov     edi, 80h                                                       ; +0xc7, 0x18013c2eb\nsub     rcx, rdi; Block                                                ; +0xcc, 0x18013c2f0\ncall    _free_base                                                     ; +0xcf, 0x18013c2f3\nmov     rcx, [rbx+118h]                                                ; +0xd4, 0x18013c2f8\nsub     rcx, rdi; Block                                                ; +0xdb, 0x18013c2ff\ncall    _free_base                                                     ; +0xde, 0x18013c302\nmov     rcx, [rbx+100h]; Block                                         ; +0xe3, 0x18013c307\ncall    _free_base                                                     ; +0xea, 0x18013c30e\nmov     rcx, [rbx+120h]; Block                                         ; +0xef, 0x18013c313\ncall    __acrt_locale_free_lc_time_if_unreferenced                     ; +0xf6, 0x18013c31a\nlea     rsi, [rbx+128h]                                                ; +0xfb, 0x18013c31f\nmov     ebp, 6                                                         ; +0x102, 0x18013c326\nlea     rdi, [rbx+38h]                                                 ; +0x107, 0x18013c32b\nlea     rax, unk_1801B19E8                                             ; +0x10b, 0x18013c32f\ncmp     [rdi-10h], rax                                                 ; +0x112, 0x18013c336\njz      short loc_18013C356                                            ; +0x116, 0x18013c33a\nmov     rcx, [rdi]; Block                                              ; +0x118, 0x18013c33c\ntest    rcx, rcx                                                       ; +0x11b, 0x18013c33f\njz      short loc_18013C356                                            ; +0x11e, 0x18013c342\ncmp     dword ptr [rcx], 0                                             ; +0x120, 0x18013c344\njnz     short loc_18013C356                                            ; +0x123, 0x18013c347\ncall    _free_base                                                     ; +0x125, 0x18013c349\nmov     rcx, [rsi]; Block                                              ; +0x12a, 0x18013c34e\ncall    _free_base                                                     ; +0x12d, 0x18013c351\ncmp     qword ptr [rdi-18h], 0                                         ; +0x132, 0x18013c356\njz      short loc_18013C370                                            ; +0x137, 0x18013c35b\nmov     rcx, [rdi-8]; Block                                            ; +0x139, 0x18013c35d\ntest    rcx, rcx                                                       ; +0x13d, 0x18013c361\njz      short loc_18013C370                                            ; +0x140, 0x18013c364\ncmp     dword ptr [rcx], 0                                             ; +0x142, 0x18013c366\njnz     short loc_18013C370                                            ; +0x145, 0x18013c369\ncall    _free_base                                                     ; +0x147, 0x18013c36b\nadd     rsi, 8                                                         ; +0x14c, 0x18013c370\nadd     rdi, 20h ; ' '                                                 ; +0x150, 0x18013c374\nsub     rbp, 1                                                         ; +0x154, 0x18013c378\njnz     short loc_18013C32F                                            ; +0x158, 0x18013c37c\nmov     rcx, rbx; Block                                                ; +0x15a, 0x18013c37e\nmov     rbx, [rsp+28h+arg_0]                                           ; +0x15d, 0x18013c381\nmov     rbp, [rsp+28h+arg_8]                                           ; +0x162, 0x18013c386\nmov     rsi, [rsp+28h+arg_10]                                          ; +0x167, 0x18013c38b\nadd     rsp, 20h                                                       ; +0x16c, 0x18013c390\npop     rdi                                                            ; +0x170, 0x18013c394\njmp     _free_base                                                     ; +0x171, 0x18013c395", "xrefs": ["replace_current_thread_locale_nolock @ 0x18013524f", "_updatetlocinfoEx_nolock @ 0x18013c58d", "<???> @ 0x1802039bc"], "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"}