{"type": "func", "start": 6443704072, "end": 6443704334, "name": "create_environment<char>", "pseudocode": "// \n// create_environment<char> from 0x180131f08 to 0x18013200e (262 bytes)\n// \n// 2 xrefs:\n// > common_initialize_environment_nolock<char> @ 0x180131e67\n// > <???> @ 0x180202f78\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<char>(char *Source)\n{\n  void *v2; // rsi\n  __int64 v3; // rcx\n  char *v4; // r8\n  char i; // dl\n  __int64 v6; // rax\n  __int64 v7; // rax\n  void *v8; // rax\n  void *v9; // rbx\n  char **v10; // r15\n  __int64 v11; // rbp\n  size_t v12; // rbp\n  char *v13; // rax\n  char *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 = (char **)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 = (char *)calloc_base(v12, 1u);\n        v14 = v13;\n        if ( !v13 )\n        {\n          unknown_libname_62(v9);\n          free_base(nullptr);\n          goto LABEL_20;\n        }\n        if ( strcpy_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<char> from 0x180131f08 to 0x18013200e (262 bytes)\n; \n; 2 xrefs:\n; > common_initialize_environment_nolock<char> @ 0x180131e67\n; > <???> @ 0x180202f78\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, 0x180131f08\nmov     [rsp+arg_8], rbp                                               ; +0x5, 0x180131f0d\nmov     [rsp+arg_10], rsi                                              ; +0xa, 0x180131f12\npush    rdi                                                            ; +0xf, 0x180131f17\npush    r14                                                            ; +0x10, 0x180131f18\npush    r15                                                            ; +0x12, 0x180131f1a\nsub     rsp, 30h                                                       ; +0x14, 0x180131f1c\nmov     r14, rcx                                                       ; +0x18, 0x180131f20\nxor     esi, esi                                                       ; +0x1b, 0x180131f23\nmov     ecx, esi                                                       ; +0x1d, 0x180131f25\nmov     r8, r14                                                        ; +0x1f, 0x180131f27\nmov     dl, [r14]                                                      ; +0x22, 0x180131f2a\njmp     short loc_180131F53                                            ; +0x25, 0x180131f2d\ncmp     dl, 3Dh ; '='                                                  ; +0x27, 0x180131f2f\nlea     rax, [rcx+1]                                                   ; +0x2a, 0x180131f32\ncmovz   rax, rcx                                                       ; +0x2e, 0x180131f36\nmov     rcx, rax                                                       ; +0x32, 0x180131f3a\nor      rax, 0FFFFFFFFFFFFFFFFh                                        ; +0x35, 0x180131f3d\ninc     rax                                                            ; +0x39, 0x180131f41\ncmp     [r8+rax], sil                                                  ; +0x3c, 0x180131f44\njnz     short loc_180131F41                                            ; +0x40, 0x180131f48\ninc     r8                                                             ; +0x42, 0x180131f4a\nadd     r8, rax                                                        ; +0x45, 0x180131f4d\nmov     dl, [r8]                                                       ; +0x48, 0x180131f50\ntest    dl, dl                                                         ; +0x4b, 0x180131f53\njnz     short loc_180131F2F                                            ; +0x4d, 0x180131f55\ninc     rcx; Count                                                     ; +0x4f, 0x180131f57\nmov     edx, 8; Size                                                   ; +0x52, 0x180131f5a\ncall    _calloc_base                                                   ; +0x57, 0x180131f5f\nmov     rbx, rax                                                       ; +0x5c, 0x180131f64\ntest    rax, rax                                                       ; +0x5f, 0x180131f67\njz      short loc_180131FD8                                            ; +0x62, 0x180131f6a\nmov     r15, rax                                                       ; +0x64, 0x180131f6c\nmov     al, [r14]                                                      ; +0x67, 0x180131f6f\ntest    al, al                                                         ; +0x6a, 0x180131f72\njz      short loc_180131FD5                                            ; +0x6c, 0x180131f74\nor      rbp, 0FFFFFFFFFFFFFFFFh                                        ; +0x6e, 0x180131f76\ninc     rbp                                                            ; +0x72, 0x180131f7a\ncmp     [r14+rbp], sil                                                 ; +0x75, 0x180131f7d\njnz     short loc_180131F7A                                            ; +0x79, 0x180131f81\ninc     rbp                                                            ; +0x7b, 0x180131f83\ncmp     al, 3Dh ; '='                                                  ; +0x7e, 0x180131f86\njz      short loc_180131FBF                                            ; +0x80, 0x180131f88\nmov     edx, 1; Size                                                   ; +0x82, 0x180131f8a\nmov     rcx, rbp; Count                                                ; +0x87, 0x180131f8f\ncall    _calloc_base                                                   ; +0x8a, 0x180131f92\nmov     rdi, rax                                                       ; +0x8f, 0x180131f97\ntest    rax, rax                                                       ; +0x92, 0x180131f9a\njz      short loc_180131FC4                                            ; +0x95, 0x180131f9d\nmov     r8, r14; Source                                                ; +0x97, 0x180131f9f\nmov     rdx, rbp; SizeInBytes                                          ; +0x9a, 0x180131fa2\nmov     rcx, rax; Destination                                          ; +0x9d, 0x180131fa5\ncall    strcpy_s                                                       ; +0xa0, 0x180131fa8\nxor     ecx, ecx; Block                                                ; +0xa5, 0x180131fad\ntest    eax, eax                                                       ; +0xa7, 0x180131faf\njnz     short loc_180131FFB                                            ; +0xa9, 0x180131fb1\nmov     [r15], rdi                                                     ; +0xab, 0x180131fb3\nadd     r15, 8                                                         ; +0xae, 0x180131fb6\ncall    _free_base                                                     ; +0xb2, 0x180131fba\nadd     r14, rbp                                                       ; +0xb7, 0x180131fbf\njmp     short loc_180131F6F                                            ; +0xba, 0x180131fc2\nmov     rcx, rbx; Block                                                ; +0xbc, 0x180131fc4\ncall    unknown_libname_62; Microsoft VisualC 64bit universal runtime  ; +0xbf, 0x180131fc7\nxor     ecx, ecx; Block                                                ; +0xc4, 0x180131fcc\ncall    _free_base                                                     ; +0xc6, 0x180131fce\njmp     short loc_180131FD8                                            ; +0xcb, 0x180131fd3\nmov     rsi, rbx                                                       ; +0xcd, 0x180131fd5\nxor     ecx, ecx; Block                                                ; +0xd0, 0x180131fd8\ncall    _free_base                                                     ; +0xd2, 0x180131fda\nmov     rbx, [rsp+48h+arg_0]                                           ; +0xd7, 0x180131fdf\nmov     rax, rsi                                                       ; +0xdc, 0x180131fe4\nmov     rsi, [rsp+48h+arg_10]                                          ; +0xdf, 0x180131fe7\nmov     rbp, [rsp+48h+arg_8]                                           ; +0xe4, 0x180131fec\nadd     rsp, 30h                                                       ; +0xe9, 0x180131ff1\npop     r15                                                            ; +0xed, 0x180131ff5\npop     r14                                                            ; +0xef, 0x180131ff7\npop     rdi                                                            ; +0xf1, 0x180131ff9\nretn                                                                   ; +0xf2, 0x180131ffa\nxor     r9d, r9d; LineNo                                               ; +0xf3, 0x180131ffb\nmov     [rsp+48h+Reserved], rsi; Reserved                              ; +0xf6, 0x180131ffe\nxor     r8d, r8d; FileName                                             ; +0xfb, 0x180132003\nxor     edx, edx; FunctionName                                         ; +0xfe, 0x180132006\ncall    _invoke_watson                                                 ; +0x100, 0x180132008\ndb 0CCh                                                                ; +0x105, 0x18013200d", "xrefs": ["common_initialize_environment_nolock<char> @ 0x180131e67", "<???> @ 0x180202f78"], "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"}