{"type": "func", "start": 6443240768, "end": 6443241135, "name": "FMOD_OS_File_Open", "pseudocode": "// \n// FMOD_OS_File_Open from 0x1800c0d40 to 0x1800c0eaf (367 bytes)\n// \n// 6 xrefs:\n// > sub_1800B41C0 @ 0x1800b41cf\n// > sub_1800BEF40 @ 0x1800bf09c\n// > sub_1800BF3B0 @ 0x1800bf4df\n// > sub_180114370 @ 0x1801143dd\n// > <???> @ 0x180194348\n// > <???> @ 0x1801fdb48\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\n__int64 __fastcall FMOD_OS_File_Open(LPCCH lpMultiByteStr, DWORD dwShareMode, DWORD *a3, _QWORD *a4)\n{\n  unsigned int v7; // ebx\n  DWORD LowPart; // eax\n  HANDLE FileW; // rbx\n  HANDLE v10; // rax\n  DWORD LastError; // eax\n  LARGE_INTEGER FileSize; // [rsp+40h] [rbp-258h] BYREF\n  WCHAR WideCharStr[256]; // [rsp+50h] [rbp-248h] BYREF\n  _DWORD *v15; // [rsp+250h] [rbp-48h]\n  LPCWSTR lpFileName; // [rsp+258h] [rbp-40h]\n\n  lpFileName = WideCharStr;\n  v15 = nullptr;\n  WideCharStr[0] = 0;\n  v7 = sub_1800C0900(WideCharStr, lpMultiByteStr);\n  if ( !v7 )\n  {\n    LowPart = 0;\n    FileW = nullptr;\n    FileSize.QuadPart = 0;\n    if ( dwShareMode )\n    {\n      if ( dwShareMode != 1 )\n      {\nLABEL_14:\n        *a4 = FileW;\n        v7 = 0;\n        *a3 = LowPart;\n        goto LABEL_15;\n      }\n      FileW = CreateFileW(lpFileName, 0x40000000u, 1u, nullptr, 2u, 0x80u, nullptr);\n      if ( FileW == (HANDLE)-1LL )\n      {\n        v7 = 13;\n        goto LABEL_15;\n      }\n    }\n    else\n    {\n      v10 = CreateFileW(lpFileName, 0x80000000, 1u, nullptr, 3u, 0x80u, nullptr);\n      FileW = v10;\n      if ( v10 == (HANDLE)-1LL )\n      {\n        LastError = GetLastError();\n        if ( LastError - 2 <= 1 || LastError == 123 )\n          v7 = 18;\n        else\n          v7 = 13;\n        goto LABEL_15;\n      }\n      if ( !GetFileSizeEx(v10, &FileSize) )\n      {\n        v7 = 13;\n        goto LABEL_15;\n      }\n    }\n    LowPart = FileSize.LowPart;\n    goto LABEL_14;\n  }\nLABEL_15:\n  if ( v15 )\n    sub_1800B6AA0(*((_QWORD *)off_1801AED20 + 52), v15);\n  return v7;\n}", "assembly": "; \n; FMOD_OS_File_Open from 0x1800c0d40 to 0x1800c0eaf (367 bytes)\n; \n; 6 xrefs:\n; > sub_1800B41C0 @ 0x1800b41cf\n; > sub_1800BEF40 @ 0x1800bf09c\n; > sub_1800BF3B0 @ 0x1800bf4df\n; > sub_180114370 @ 0x1801143dd\n; > <???> @ 0x180194348\n; > <???> @ 0x1801fdb48\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     r11, rsp                                                       ; +0x0, 0x1800c0d40\npush    rbx                                                            ; +0x3, 0x1800c0d43\npush    rbp                                                            ; +0x4, 0x1800c0d44\npush    rsi                                                            ; +0x5, 0x1800c0d45\npush    rdi                                                            ; +0x6, 0x1800c0d46\npush    r14                                                            ; +0x7, 0x1800c0d47\nsub     rsp, 270h                                                      ; +0x9, 0x1800c0d49\nmov     rax, cs:__security_cookie                                      ; +0x10, 0x1800c0d50\nxor     rax, rsp                                                       ; +0x17, 0x1800c0d57\nmov     [rsp+298h+var_38], rax                                         ; +0x1a, 0x1800c0d5a\nmov     edi, edx                                                       ; +0x22, 0x1800c0d62\nlea     rax, [rsp+298h+WideCharStr]                                    ; +0x24, 0x1800c0d64\nxor     ebp, ebp                                                       ; +0x29, 0x1800c0d69\nmov     [r11-40h], rax                                                 ; +0x2b, 0x1800c0d6b\nmov     rdx, rcx; lpMultiByteStr                                       ; +0x2f, 0x1800c0d6f\nmov     [r11-48h], rbp                                                 ; +0x32, 0x1800c0d72\nlea     rcx, [rsp+298h+WideCharStr]; lpWideCharStr                     ; +0x36, 0x1800c0d76\nmov     [rsp+298h+WideCharStr], bp                                     ; +0x3b, 0x1800c0d7b\nmov     r14, r9                                                        ; +0x40, 0x1800c0d80\nmov     rsi, r8                                                        ; +0x43, 0x1800c0d83\ncall    sub_1800C0900                                                  ; +0x46, 0x1800c0d86\nmov     ebx, eax                                                       ; +0x4b, 0x1800c0d8b\ntest    eax, eax                                                       ; +0x4d, 0x1800c0d8d\njnz     loc_1800C0E5D                                                  ; +0x4f, 0x1800c0d8f\nmov     eax, ebp                                                       ; +0x55, 0x1800c0d95\nmov     ebx, ebp                                                       ; +0x57, 0x1800c0d97\nmov     qword ptr [rsp+298h+FileSize], rax                             ; +0x59, 0x1800c0d99\ntest    edi, edi                                                       ; +0x5e, 0x1800c0d9e\njnz     short loc_1800C0E10                                            ; +0x60, 0x1800c0da0\nmov     rcx, [rsp+298h+lpFileName]; lpFileName                         ; +0x62, 0x1800c0da2\nlea     r8d, [rbp+1]; dwShareMode                                      ; +0x6a, 0x1800c0daa\nmov     [rsp+298h+hTemplateFile], rbp; hTemplateFile                   ; +0x6e, 0x1800c0dae\nxor     r9d, r9d; lpSecurityAttributes                                 ; +0x73, 0x1800c0db3\nmov     [rsp+298h+dwFlagsAndAttributes], 80h; dwFlagsAndAttributes     ; +0x76, 0x1800c0db6\nmov     edx, 80000000h; dwDesiredAccess                                ; +0x7e, 0x1800c0dbe\nmov     [rsp+298h+dwCreationDisposition], 3; dwCreationDisposition     ; +0x83, 0x1800c0dc3\ncall    cs:CreateFileW                                                 ; +0x8b, 0x1800c0dcb\nmov     rbx, rax                                                       ; +0x91, 0x1800c0dd1\ncmp     rax, 0FFFFFFFFFFFFFFFFh                                        ; +0x94, 0x1800c0dd4\njnz     short loc_1800C0DF9                                            ; +0x98, 0x1800c0dd8\ncall    cs:GetLastError                                                ; +0x9a, 0x1800c0dda\nlea     ecx, [rax-2]                                                   ; +0xa0, 0x1800c0de0\ncmp     ecx, 1                                                         ; +0xa3, 0x1800c0de3\njbe     short loc_1800C0DF2                                            ; +0xa6, 0x1800c0de6\ncmp     eax, 7Bh ; '{'                                                 ; +0xa8, 0x1800c0de8\njz      short loc_1800C0DF2                                            ; +0xab, 0x1800c0deb\nlea     ebx, [rbp+0Dh]                                                 ; +0xad, 0x1800c0ded\njmp     short loc_1800C0E5D                                            ; +0xb0, 0x1800c0df0\nmov     ebx, 12h                                                       ; +0xb2, 0x1800c0df2\njmp     short loc_1800C0E5D                                            ; +0xb7, 0x1800c0df7\nlea     rdx, [rsp+298h+FileSize]; lpFileSize                           ; +0xb9, 0x1800c0df9\nmov     rcx, rax; hFile                                                ; +0xbe, 0x1800c0dfe\ncall    cs:GetFileSizeEx                                               ; +0xc1, 0x1800c0e01\ntest    eax, eax                                                       ; +0xc7, 0x1800c0e07\njnz     short loc_1800C0E51                                            ; +0xc9, 0x1800c0e09\nlea     ebx, [rax+0Dh]                                                 ; +0xcb, 0x1800c0e0b\njmp     short loc_1800C0E5D                                            ; +0xce, 0x1800c0e0e\ncmp     edi, 1                                                         ; +0xd0, 0x1800c0e10\njnz     short loc_1800C0E56                                            ; +0xd3, 0x1800c0e13\nmov     rcx, [rsp+298h+lpFileName]; lpFileName                         ; +0xd5, 0x1800c0e15\nxor     r9d, r9d; lpSecurityAttributes                                 ; +0xdd, 0x1800c0e1d\nmov     [rsp+298h+hTemplateFile], rbp; hTemplateFile                   ; +0xe0, 0x1800c0e20\nmov     edx, 40000000h; dwDesiredAccess                                ; +0xe5, 0x1800c0e25\nmov     [rsp+298h+dwFlagsAndAttributes], 80h; dwFlagsAndAttributes     ; +0xea, 0x1800c0e2a\nmov     r8d, edi; dwShareMode                                          ; +0xf2, 0x1800c0e32\nmov     [rsp+298h+dwCreationDisposition], 2; dwCreationDisposition     ; +0xf5, 0x1800c0e35\ncall    cs:CreateFileW                                                 ; +0xfd, 0x1800c0e3d\nmov     rbx, rax                                                       ; +0x103, 0x1800c0e43\ncmp     rax, 0FFFFFFFFFFFFFFFFh                                        ; +0x106, 0x1800c0e46\njnz     short loc_1800C0E51                                            ; +0x10a, 0x1800c0e4a\nlea     ebx, [rdi+0Ch]                                                 ; +0x10c, 0x1800c0e4c\njmp     short loc_1800C0E5D                                            ; +0x10f, 0x1800c0e4f\nmov     rax, qword ptr [rsp+298h+FileSize]                             ; +0x111, 0x1800c0e51\nmov     [r14], rbx                                                     ; +0x116, 0x1800c0e56\nmov     ebx, ebp                                                       ; +0x119, 0x1800c0e59\nmov     [rsi], eax                                                     ; +0x11b, 0x1800c0e5b\nmov     rdx, [rsp+298h+var_48]                                         ; +0x11d, 0x1800c0e5d\ntest    rdx, rdx                                                       ; +0x125, 0x1800c0e65\njz      short loc_1800C0E8F                                            ; +0x128, 0x1800c0e68\nmov     rcx, cs:off_1801AED20                                          ; +0x12a, 0x1800c0e6a\nlea     r8, aCBuildagent1Wo_46; \"C:\\\\buildagent1\\\\work\\\\570ad728b1678096\"... ; +0x131, 0x1800c0e71\nmov     r9d, 0F1h                                                      ; +0x138, 0x1800c0e78\nmov     byte ptr [rsp+298h+dwCreationDisposition], 1                   ; +0x13e, 0x1800c0e7e\nmov     rcx, [rcx+1A0h]                                                ; +0x143, 0x1800c0e83\ncall    sub_1800B6AA0                                                  ; +0x14a, 0x1800c0e8a\nmov     eax, ebx                                                       ; +0x14f, 0x1800c0e8f\nmov     rcx, [rsp+298h+var_38]                                         ; +0x151, 0x1800c0e91\nxor     rcx, rsp; StackCookie                                          ; +0x159, 0x1800c0e99\ncall    __security_check_cookie                                        ; +0x15c, 0x1800c0e9c\nadd     rsp, 270h                                                      ; +0x161, 0x1800c0ea1\npop     r14                                                            ; +0x168, 0x1800c0ea8\npop     rdi                                                            ; +0x16a, 0x1800c0eaa\npop     rsi                                                            ; +0x16b, 0x1800c0eab\npop     rbp                                                            ; +0x16c, 0x1800c0eac\npop     rbx                                                            ; +0x16d, 0x1800c0ead\nretn                                                                   ; +0x16e, 0x1800c0eae", "xrefs": ["sub_1800B41C0 @ 0x1800b41cf", "sub_1800BEF40 @ 0x1800bf09c", "sub_1800BF3B0 @ 0x1800bf4df", "sub_180114370 @ 0x1801143dd", "<???> @ 0x180194348", "<???> @ 0x1801fdb48"], "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"}