{"type": "func", "start": 6443703468, "end": 6443703858, "name": "_configure_narrow_argv", "pseudocode": "// \n// _configure_narrow_argv from 0x180131cac to 0x180131e32 (390 bytes)\n// \n// 2 xrefs:\n// > __scrt_dllmain_after_initialize_c @ 0x1801204fb\n// > <???> @ 0x180202f54\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\nerrno_t __cdecl configure_narrow_argv(_crt_argv_mode mode)\n{\n  errno_t v1; // edi\n  errno_t v3; // ebx\n  char *v4; // rsi\n  unsigned __int64 v5; // r15\n  _QWORD *buffer_for_argv; // rax\n  void *v7; // rbx\n  void *v8; // rcx\n  errno_t v9; // esi\n  void *v10; // rdx\n  int v11; // ecx\n  _QWORD *i; // rax\n  void *Block; // [rsp+68h] [rbp+38h] BYREF\n  unsigned __int64 v15; // [rsp+70h] [rbp+40h] BYREF\n  unsigned __int64 v16; // [rsp+78h] [rbp+48h] BYREF\n\n  v1 = 0;\n  if ( mode )\n  {\n    if ( (unsigned int)(mode - 1) <= 1 )\n    {\n      _acrt_initialize_multibyte();\n      _acrt_GetModuleFileNameA(0, &unk_1801F4BF0, 260);\n      v4 = (char *)qword_1801F5600;\n      qword_1801F55E0 = (__int64)&unk_1801F4BF0;\n      if ( !qword_1801F5600 || !*(_BYTE *)qword_1801F5600 )\n        v4 = (char *)&unk_1801F4BF0;\n      v15 = 0;\n      v16 = 0;\n      parse_command_line<char>(v4, nullptr, nullptr, &v15, &v16);\n      v5 = v15;\n      buffer_for_argv = _acrt_allocate_buffer_for_argv(v15, v16, 1u);\n      v7 = buffer_for_argv;\n      if ( buffer_for_argv )\n      {\n        parse_command_line<char>(v4, buffer_for_argv, &buffer_for_argv[v5], &v15, &v16);\n        if ( mode == _crt_argv_unexpanded_arguments )\n        {\n          qword_1801F55F0 = v7;\n          dword_1801F55E8 = v15 - 1;\n          v8 = nullptr;\n        }\n        else\n        {\n          Block = nullptr;\n          v9 = common_expand_argv_wildcards<char>(v7, &Block);\n          if ( v9 )\n          {\n            free_base(Block);\n            Block = nullptr;\n            free_base(v7);\n            return v9;\n          }\n          v10 = Block;\n          v11 = 0;\n          for ( i = Block; *i; ++v11 )\n            ++i;\n          dword_1801F55E8 = v11;\n          Block = nullptr;\n          qword_1801F55F0 = v10;\n          free_base(nullptr);\n          v8 = v7;\n          Block = nullptr;\n        }\n        free_base(v8);\n        return v1;\n      }\n      v3 = 12;\n      *errno() = 12;\n      free_base(nullptr);\n    }\n    else\n    {\n      v3 = 22;\n      *errno() = 22;\n      invalid_parameter_noinfo();\n    }\n    return v3;\n  }\n  return v1;\n}", "assembly": "; \n; _configure_narrow_argv from 0x180131cac to 0x180131e32 (390 bytes)\n; \n; 2 xrefs:\n; > __scrt_dllmain_after_initialize_c @ 0x1801204fb\n; > <???> @ 0x180202f54\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-28h+arg_0], rbx                                           ; +0x0, 0x180131cac\npush    rbp                                                            ; +0x5, 0x180131cb1\npush    rsi                                                            ; +0x6, 0x180131cb2\npush    rdi                                                            ; +0x7, 0x180131cb3\npush    r14                                                            ; +0x8, 0x180131cb4\npush    r15                                                            ; +0xa, 0x180131cb6\nmov     rbp, rsp                                                       ; +0xc, 0x180131cb8\nsub     rsp, 30h                                                       ; +0xf, 0x180131cbb\nxor     edi, edi                                                       ; +0x13, 0x180131cbf\nmov     r14d, ecx                                                      ; +0x15, 0x180131cc1\ntest    ecx, ecx                                                       ; +0x18, 0x180131cc4\njz      loc_180131E1F                                                  ; +0x1a, 0x180131cc6\nlea     eax, [rcx-1]                                                   ; +0x20, 0x180131ccc\ncmp     eax, 1                                                         ; +0x23, 0x180131ccf\njbe     short loc_180131CEA                                            ; +0x26, 0x180131cd2\ncall    _errno                                                         ; +0x28, 0x180131cd4\nlea     ebx, [rdi+16h]                                                 ; +0x2d, 0x180131cd9\nmov     [rax], ebx                                                     ; +0x30, 0x180131cdc\ncall    _invalid_parameter_noinfo                                      ; +0x32, 0x180131cde\nmov     edi, ebx                                                       ; +0x37, 0x180131ce3\njmp     loc_180131E1F                                                  ; +0x39, 0x180131ce5\ncall    __acrt_initialize_multibyte                                    ; +0x3e, 0x180131cea\nlea     rbx, unk_1801F4BF0                                             ; +0x43, 0x180131cef\nmov     r8d, 104h                                                      ; +0x4a, 0x180131cf6\nmov     rdx, rbx                                                       ; +0x50, 0x180131cfc\nxor     ecx, ecx                                                       ; +0x53, 0x180131cff\ncall    __acrt_GetModuleFileNameA                                      ; +0x55, 0x180131d01\nmov     rsi, cs:qword_1801F5600                                        ; +0x5a, 0x180131d06\nmov     cs:qword_1801F55E0, rbx                                        ; +0x61, 0x180131d0d\ntest    rsi, rsi                                                       ; +0x68, 0x180131d14\njz      short loc_180131D1E                                            ; +0x6b, 0x180131d17\ncmp     [rsi], dil                                                     ; +0x6d, 0x180131d19\njnz     short loc_180131D21                                            ; +0x70, 0x180131d1c\nmov     rsi, rbx                                                       ; +0x72, 0x180131d1e\nlea     rax, [rbp+arg_18]                                              ; +0x75, 0x180131d21\nmov     [rbp+arg_10], rdi                                              ; +0x79, 0x180131d25\nlea     r9, [rbp+arg_10]                                               ; +0x7d, 0x180131d29\nmov     [rsp+30h+var_10], rax                                          ; +0x81, 0x180131d2d\nxor     r8d, r8d                                                       ; +0x86, 0x180131d32\nmov     [rbp+arg_18], rdi                                              ; +0x89, 0x180131d35\nxor     edx, edx                                                       ; +0x8d, 0x180131d39\nmov     rcx, rsi                                                       ; +0x8f, 0x180131d3b\ncall    ??$parse_command_line@D@@YAXPEADPEAPEAD0PEA_K2@Z               ; +0x92, 0x180131d3e\nmov     r15, [rbp+arg_10]                                              ; +0x97, 0x180131d43\nmov     r8d, 1                                                         ; +0x9b, 0x180131d47\nmov     rdx, [rbp+arg_18]                                              ; +0xa1, 0x180131d4d\nmov     rcx, r15                                                       ; +0xa5, 0x180131d51\ncall    __acrt_allocate_buffer_for_argv                                ; +0xa8, 0x180131d54\nmov     rbx, rax                                                       ; +0xad, 0x180131d59\ntest    rax, rax                                                       ; +0xb0, 0x180131d5c\njnz     short loc_180131D79                                            ; +0xb3, 0x180131d5f\ncall    _errno                                                         ; +0xb5, 0x180131d61\nmov     ebx, 0Ch                                                       ; +0xba, 0x180131d66\nxor     ecx, ecx; Block                                                ; +0xbf, 0x180131d6b\nmov     [rax], ebx                                                     ; +0xc1, 0x180131d6d\ncall    _free_base                                                     ; +0xc3, 0x180131d6f\njmp     loc_180131CE3                                                  ; +0xc8, 0x180131d74\nlea     r8, [rax+r15*8]                                                ; +0xcd, 0x180131d79\nmov     rdx, rbx                                                       ; +0xd1, 0x180131d7d\nlea     rax, [rbp+arg_18]                                              ; +0xd4, 0x180131d80\nmov     rcx, rsi                                                       ; +0xd8, 0x180131d84\nlea     r9, [rbp+arg_10]                                               ; +0xdb, 0x180131d87\nmov     [rsp+30h+var_10], rax                                          ; +0xdf, 0x180131d8b\ncall    ??$parse_command_line@D@@YAXPEADPEAPEAD0PEA_K2@Z               ; +0xe4, 0x180131d90\ncmp     r14d, 1                                                        ; +0xe9, 0x180131d95\njnz     short loc_180131DB1                                            ; +0xed, 0x180131d99\nmov     eax, dword ptr [rbp+arg_10]                                    ; +0xef, 0x180131d9b\ndec     eax                                                            ; +0xf2, 0x180131d9e\nmov     cs:qword_1801F55F0, rbx                                        ; +0xf4, 0x180131da0\nmov     cs:dword_1801F55E8, eax                                        ; +0xfb, 0x180131da7\nxor     ecx, ecx                                                       ; +0x101, 0x180131dad\njmp     short loc_180131E1A                                            ; +0x103, 0x180131daf\nlea     rdx, [rbp+Block]                                               ; +0x105, 0x180131db1\nmov     [rbp+Block], rdi                                               ; +0x109, 0x180131db5\nmov     rcx, rbx                                                       ; +0x10d, 0x180131db9\ncall    j_??$common_expand_argv_wildcards@D@@YAHQEAPEADQEAPEAPEAD@Z    ; +0x110, 0x180131dbc\nmov     esi, eax                                                       ; +0x115, 0x180131dc1\ntest    eax, eax                                                       ; +0x117, 0x180131dc3\njz      short loc_180131DE0                                            ; +0x119, 0x180131dc5\nmov     rcx, [rbp+Block]; Block                                        ; +0x11b, 0x180131dc7\ncall    _free_base                                                     ; +0x11f, 0x180131dcb\nmov     rcx, rbx; Block                                                ; +0x124, 0x180131dd0\nmov     [rbp+Block], rdi                                               ; +0x127, 0x180131dd3\ncall    _free_base                                                     ; +0x12b, 0x180131dd7\nmov     edi, esi                                                       ; +0x130, 0x180131ddc\njmp     short loc_180131E1F                                            ; +0x132, 0x180131dde\nmov     rdx, [rbp+Block]                                               ; +0x134, 0x180131de0\nmov     rcx, rdi                                                       ; +0x138, 0x180131de4\nmov     rax, rdx                                                       ; +0x13b, 0x180131de7\ncmp     [rdx], rdi                                                     ; +0x13e, 0x180131dea\njz      short loc_180131DFB                                            ; +0x141, 0x180131ded\nlea     rax, [rax+8]                                                   ; +0x143, 0x180131def\ninc     rcx                                                            ; +0x147, 0x180131df3\ncmp     [rax], rdi                                                     ; +0x14a, 0x180131df6\njnz     short loc_180131DEF                                            ; +0x14d, 0x180131df9\nmov     cs:dword_1801F55E8, ecx                                        ; +0x14f, 0x180131dfb\nxor     ecx, ecx; Block                                                ; +0x155, 0x180131e01\nmov     [rbp+Block], rdi                                               ; +0x157, 0x180131e03\nmov     cs:qword_1801F55F0, rdx                                        ; +0x15b, 0x180131e07\ncall    _free_base                                                     ; +0x162, 0x180131e0e\nmov     rcx, rbx; Block                                                ; +0x167, 0x180131e13\nmov     [rbp+Block], rdi                                               ; +0x16a, 0x180131e16\ncall    _free_base                                                     ; +0x16e, 0x180131e1a\nmov     rbx, [rsp+30h+arg_0]                                           ; +0x173, 0x180131e1f\nmov     eax, edi                                                       ; +0x178, 0x180131e24\nadd     rsp, 30h                                                       ; +0x17a, 0x180131e26\npop     r15                                                            ; +0x17e, 0x180131e2a\npop     r14                                                            ; +0x180, 0x180131e2c\npop     rdi                                                            ; +0x182, 0x180131e2e\npop     rsi                                                            ; +0x183, 0x180131e2f\npop     rbp                                                            ; +0x184, 0x180131e30\nretn                                                                   ; +0x185, 0x180131e31", "xrefs": ["__scrt_dllmain_after_initialize_c @ 0x1801204fb", "<???> @ 0x180202f54"], "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"}