{"type": "func", "start": 6443715592, "end": 6443715769, "name": "_wfullpath", "pseudocode": "// \n// _wfullpath from 0x180134c08 to 0x180134cb9 (177 bytes)\n// \n// 3 xrefs:\n// > is_usable_drive_or_unc_root @ 0x1801297aa\n// > is_usable_drive_or_unc_root @ 0x1801297d9\n// > <???> @ 0x1802032cc\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\nwchar_t *__cdecl wfullpath(wchar_t *Buffer, const wchar_t *Path, size_t BufferCount)\n{\n  wchar_t *v3; // rbx\n  wchar_t *v5; // rdi\n  unsigned int v6; // eax\n  wchar_t *v8; // [rsp+20h] [rbp-30h] BYREF\n  size_t v9; // [rsp+28h] [rbp-28h]\n  void *Block; // [rsp+30h] [rbp-20h]\n  size_t v11; // [rsp+38h] [rbp-18h]\n  __int64 v12; // [rsp+40h] [rbp-10h]\n  char v13; // [rsp+48h] [rbp-8h]\n\n  v3 = nullptr;\n  if ( Path && *Path )\n  {\n    v12 = 0;\n    v13 = 0;\n    if ( Buffer )\n    {\n      v8 = Buffer;\n      v9 = BufferCount;\n      Block = Buffer;\n      v11 = BufferCount;\n      if ( !(unsigned int)unknown_libname_66(Path, (__int64)&v8) )\n        return Buffer;\n    }\n    else\n    {\n      v8 = nullptr;\n      v9 = 0;\n      Block = nullptr;\n      v11 = 0;\n      __acrt_get_full_path_name_wide<__crt_win32_buffer_public_dynamic_resizing>(Path, (__int64)&v8);\n      v5 = (wchar_t *)__crt_win32_buffer<wchar_t,__crt_win32_buffer_public_dynamic_resizing>::detach((__int64 *)&v8);\n      if ( v13 )\n        free(Block);\n      return v5;\n    }\n  }\n  else\n  {\n    v6 = 0x7FFFFFFF;\n    if ( BufferCount < 0x7FFFFFFF )\n      v6 = BufferCount;\n    return (wchar_t *)sub_18013C0B4(Buffer, v6);\n  }\n  return v3;\n}", "assembly": "; \n; _wfullpath from 0x180134c08 to 0x180134cb9 (177 bytes)\n; \n; 3 xrefs:\n; > is_usable_drive_or_unc_root @ 0x1801297aa\n; > is_usable_drive_or_unc_root @ 0x1801297d9\n; > <???> @ 0x1802032cc\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-8+arg_0], rbx                                             ; +0x0, 0x180134c08\nmov     [rsp-8+arg_8], rdi                                             ; +0x5, 0x180134c0d\npush    rbp                                                            ; +0xa, 0x180134c12\nmov     rbp, rsp                                                       ; +0xb, 0x180134c13\nsub     rsp, 50h                                                       ; +0xe, 0x180134c16\nxor     ebx, ebx                                                       ; +0x12, 0x180134c1a\nmov     rax, rdx                                                       ; +0x14, 0x180134c1c\nmov     rdi, rcx                                                       ; +0x17, 0x180134c1f\ntest    rdx, rdx                                                       ; +0x1a, 0x180134c22\njz      short loc_180134C90                                            ; +0x1d, 0x180134c25\ncmp     [rdx], bx                                                      ; +0x1f, 0x180134c27\njz      short loc_180134C90                                            ; +0x22, 0x180134c2a\nmov     [rbp+var_10], rbx                                              ; +0x24, 0x180134c2c\nlea     rdx, [rbp+var_30]                                              ; +0x28, 0x180134c30\nmov     [rbp+var_8], bl                                                ; +0x2c, 0x180134c34\nmov     rcx, rax; lpFileName                                           ; +0x2f, 0x180134c37\ntest    rdi, rdi                                                       ; +0x32, 0x180134c3a\njz      short loc_180134C5C                                            ; +0x35, 0x180134c3d\nmov     [rbp+var_30], rdi                                              ; +0x37, 0x180134c3f\nmov     [rbp+var_28], r8                                               ; +0x3b, 0x180134c43\nmov     [rbp+Block], rdi                                               ; +0x3f, 0x180134c47\nmov     [rbp+var_18], r8                                               ; +0x43, 0x180134c4b\ncall    unknown_libname_66; Microsoft VisualC 64bit universal runtime  ; +0x47, 0x180134c4f\ntest    eax, eax                                                       ; +0x4c, 0x180134c54\ncmovz   rbx, rdi                                                       ; +0x4e, 0x180134c56\njmp     short loc_180134CA6                                            ; +0x52, 0x180134c5a\nmov     [rbp+var_30], rbx                                              ; +0x54, 0x180134c5c\nmov     [rbp+var_28], rbx                                              ; +0x58, 0x180134c60\nmov     [rbp+Block], rbx                                               ; +0x5c, 0x180134c64\nmov     [rbp+var_18], rbx                                              ; +0x60, 0x180134c68\ncall    ??$__acrt_get_full_path_name_wide@U__crt_win32_buffer_public_dynamic_resizing@@@@YAHQEB_WAEAV?$__crt_win32_buffer@_WU__crt_win32_buffer_public_dynamic_resizing@@@@@Z ; +0x64, 0x180134c6c\nlea     rcx, [rbp+var_30]                                              ; +0x69, 0x180134c71\ncall    ?detach@?$__crt_win32_buffer@_WU__crt_win32_buffer_public_dynamic_resizing@@@@QEAAPEA_WXZ ; +0x6d, 0x180134c75\nmov     rdi, rax                                                       ; +0x72, 0x180134c7a\ncmp     [rbp+var_8], bl                                                ; +0x75, 0x180134c7d\njz      short loc_180134C8B                                            ; +0x78, 0x180134c80\nmov     rcx, [rbp+Block]; Block                                        ; +0x7a, 0x180134c82\ncall    free                                                           ; +0x7e, 0x180134c86\nmov     rbx, rdi                                                       ; +0x83, 0x180134c8b\njmp     short loc_180134CA6                                            ; +0x86, 0x180134c8e\nmov     eax, 7FFFFFFFh                                                 ; +0x88, 0x180134c90\ncmp     r8, rax                                                        ; +0x8d, 0x180134c95\ncmovb   eax, r8d                                                       ; +0x90, 0x180134c98\nmov     edx, eax                                                       ; +0x94, 0x180134c9c\ncall    sub_18013C0B4                                                  ; +0x96, 0x180134c9e\nmov     rbx, rax                                                       ; +0x9b, 0x180134ca3\nmov     rdi, [rsp+50h+arg_8]                                           ; +0x9e, 0x180134ca6\nmov     rax, rbx                                                       ; +0xa3, 0x180134cab\nmov     rbx, [rsp+50h+arg_0]                                           ; +0xa6, 0x180134cae\nadd     rsp, 50h                                                       ; +0xab, 0x180134cb3\npop     rbp                                                            ; +0xaf, 0x180134cb7\nretn                                                                   ; +0xb0, 0x180134cb8", "xrefs": ["is_usable_drive_or_unc_root @ 0x1801297aa", "is_usable_drive_or_unc_root @ 0x1801297d9", "<???> @ 0x1802032cc"], "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"}