{"type": "func", "start": 6443704336, "end": 6443704611, "name": "create_environment<wchar_t>", "pseudocode": "// \n// create_environment<wchar_t> from 0x180132010 to 0x180132123 (275 bytes)\n// \n// 2 xrefs:\n// > common_initialize_environment_nolock<wchar_t> @ 0x180131ece\n// > <???> @ 0x180202f84\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 create_environment<wchar_t>(wchar_t *Source)\n{\n  void *v2; // rsi\n  __int64 v3; // rcx\n  wchar_t *v4; // r8\n  wchar_t i; // dx\n  __int64 v6; // rax\n  __int64 v7; // rax\n  void *v8; // rax\n  void *v9; // rbx\n  wchar_t **v10; // r15\n  __int64 v11; // rbp\n  size_t v12; // rbp\n  wchar_t *v13; // rax\n  wchar_t *v14; // rdi\n\n  v2 = nullptr;\n  v3 = 0;\n  v4 = Source;\n  for ( i = *Source; i; i = *v4 )\n  {\n    v6 = v3 + 1;\n    if ( i == 61 )\n      v6 = v3;\n    v3 = v6;\n    v7 = -1;\n    do\n      ++v7;\n    while ( v4[v7] );\n    v4 += v7 + 1;\n  }\n  v8 = calloc_base(v3 + 1, 8u);\n  v9 = v8;\n  if ( v8 )\n  {\n    v10 = (wchar_t **)v8;\n    while ( *Source )\n    {\n      v11 = -1;\n      do\n        ++v11;\n      while ( Source[v11] );\n      v12 = v11 + 1;\n      if ( *Source != 61 )\n      {\n        v13 = (wchar_t *)calloc_base(v12, 2u);\n        v14 = v13;\n        if ( !v13 )\n        {\n          unknown_libname_63(v9);\n          free_base(nullptr);\n          goto LABEL_20;\n        }\n        if ( wcscpy_s(v13, v12, Source) )\n          invoke_watson(nullptr, nullptr, nullptr, 0, 0);\n        *v10++ = v14;\n        free_base(nullptr);\n      }\n      Source += v12;\n    }\n    v2 = v9;\n  }\nLABEL_20:\n  free_base(nullptr);\n  return v2;\n}", "assembly": "; \n; create_environment<wchar_t> from 0x180132010 to 0x180132123 (275 bytes)\n; \n; 2 xrefs:\n; > common_initialize_environment_nolock<wchar_t> @ 0x180131ece\n; > <???> @ 0x180202f84\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, 0x180132010\nmov     [rsp+arg_8], rbp                                               ; +0x5, 0x180132015\nmov     [rsp+arg_10], rsi                                              ; +0xa, 0x18013201a\npush    rdi                                                            ; +0xf, 0x18013201f\npush    r14                                                            ; +0x10, 0x180132020\npush    r15                                                            ; +0x12, 0x180132022\nsub     rsp, 30h                                                       ; +0x14, 0x180132024\nmov     r14, rcx                                                       ; +0x18, 0x180132028\nxor     esi, esi                                                       ; +0x1b, 0x18013202b\nmov     ecx, esi                                                       ; +0x1d, 0x18013202d\nmov     r8, r14                                                        ; +0x1f, 0x18013202f\nmovzx   edx, word ptr [r14]                                            ; +0x22, 0x180132032\njmp     short loc_180132061                                            ; +0x26, 0x180132036\ncmp     dx, 3Dh ; '='                                                  ; +0x28, 0x180132038\nlea     rax, [rcx+1]                                                   ; +0x2c, 0x18013203c\ncmovz   rax, rcx                                                       ; +0x30, 0x180132040\nmov     rcx, rax                                                       ; +0x34, 0x180132044\nor      rax, 0FFFFFFFFFFFFFFFFh                                        ; +0x37, 0x180132047\ninc     rax                                                            ; +0x3b, 0x18013204b\ncmp     [r8+rax*2], si                                                 ; +0x3e, 0x18013204e\njnz     short loc_18013204B                                            ; +0x43, 0x180132053\nlea     r8, [r8+rax*2]                                                 ; +0x45, 0x180132055\nadd     r8, 2                                                          ; +0x49, 0x180132059\nmovzx   edx, word ptr [r8]                                             ; +0x4d, 0x18013205d\ntest    dx, dx                                                         ; +0x51, 0x180132061\njnz     short loc_180132038                                            ; +0x54, 0x180132064\ninc     rcx; Count                                                     ; +0x56, 0x180132066\nmov     edx, 8; Size                                                   ; +0x59, 0x180132069\ncall    _calloc_base                                                   ; +0x5e, 0x18013206e\nmov     rbx, rax                                                       ; +0x63, 0x180132073\ntest    rax, rax                                                       ; +0x66, 0x180132076\njz      short loc_1801320ED                                            ; +0x69, 0x180132079\nmov     r15, rax                                                       ; +0x6b, 0x18013207b\nmovzx   eax, word ptr [r14]                                            ; +0x6e, 0x18013207e\ntest    ax, ax                                                         ; +0x72, 0x180132082\njz      short loc_1801320EA                                            ; +0x75, 0x180132085\nor      rbp, 0FFFFFFFFFFFFFFFFh                                        ; +0x77, 0x180132087\ninc     rbp                                                            ; +0x7b, 0x18013208b\ncmp     [r14+rbp*2], si                                                ; +0x7e, 0x18013208e\njnz     short loc_18013208B                                            ; +0x83, 0x180132093\ninc     rbp                                                            ; +0x85, 0x180132095\ncmp     ax, 3Dh ; '='                                                  ; +0x88, 0x180132098\njz      short loc_1801320D3                                            ; +0x8c, 0x18013209c\nmov     edx, 2; Size                                                   ; +0x8e, 0x18013209e\nmov     rcx, rbp; Count                                                ; +0x93, 0x1801320a3\ncall    _calloc_base                                                   ; +0x96, 0x1801320a6\nmov     rdi, rax                                                       ; +0x9b, 0x1801320ab\ntest    rax, rax                                                       ; +0x9e, 0x1801320ae\njz      short loc_1801320D9                                            ; +0xa1, 0x1801320b1\nmov     r8, r14; Source                                                ; +0xa3, 0x1801320b3\nmov     rdx, rbp; SizeInWords                                          ; +0xa6, 0x1801320b6\nmov     rcx, rax; Destination                                          ; +0xa9, 0x1801320b9\ncall    wcscpy_s                                                       ; +0xac, 0x1801320bc\nxor     ecx, ecx; Block                                                ; +0xb1, 0x1801320c1\ntest    eax, eax                                                       ; +0xb3, 0x1801320c3\njnz     short loc_180132110                                            ; +0xb5, 0x1801320c5\nmov     [r15], rdi                                                     ; +0xb7, 0x1801320c7\nadd     r15, 8                                                         ; +0xba, 0x1801320ca\ncall    _free_base                                                     ; +0xbe, 0x1801320ce\nlea     r14, [r14+rbp*2]                                               ; +0xc3, 0x1801320d3\njmp     short loc_18013207E                                            ; +0xc7, 0x1801320d7\nmov     rcx, rbx; Block                                                ; +0xc9, 0x1801320d9\ncall    unknown_libname_63; Microsoft VisualC 64bit universal runtime  ; +0xcc, 0x1801320dc\nxor     ecx, ecx; Block                                                ; +0xd1, 0x1801320e1\ncall    _free_base                                                     ; +0xd3, 0x1801320e3\njmp     short loc_1801320ED                                            ; +0xd8, 0x1801320e8\nmov     rsi, rbx                                                       ; +0xda, 0x1801320ea\nxor     ecx, ecx; Block                                                ; +0xdd, 0x1801320ed\ncall    _free_base                                                     ; +0xdf, 0x1801320ef\nmov     rbx, [rsp+48h+arg_0]                                           ; +0xe4, 0x1801320f4\nmov     rax, rsi                                                       ; +0xe9, 0x1801320f9\nmov     rsi, [rsp+48h+arg_10]                                          ; +0xec, 0x1801320fc\nmov     rbp, [rsp+48h+arg_8]                                           ; +0xf1, 0x180132101\nadd     rsp, 30h                                                       ; +0xf6, 0x180132106\npop     r15                                                            ; +0xfa, 0x18013210a\npop     r14                                                            ; +0xfc, 0x18013210c\npop     rdi                                                            ; +0xfe, 0x18013210e\nretn                                                                   ; +0xff, 0x18013210f\nxor     r9d, r9d; LineNo                                               ; +0x100, 0x180132110\nmov     [rsp+48h+Reserved], rsi; Reserved                              ; +0x103, 0x180132113\nxor     r8d, r8d; FileName                                             ; +0x108, 0x180132118\nxor     edx, edx; FunctionName                                         ; +0x10b, 0x18013211b\ncall    _invoke_watson                                                 ; +0x10d, 0x18013211d\ndb 0CCh                                                                ; +0x112, 0x180132122", "xrefs": ["common_initialize_environment_nolock<wchar_t> @ 0x180131ece", "<???> @ 0x180202f84"], "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"}