{"type": "func", "start": 944676, "end": 944940, "name": "FMOD_OS_File_Open", "pseudocode": "// \n// FMOD_OS_File_Open from 0xe6a24 to 0xe6b2c (264 bytes)\n// \n// 4 xrefs:\n// > .FMOD_OS_File_Open @ 0x109a0c\n// > <???> @ 0x3598\n// > .FMOD_OS_File_Open @ 0x109a04\n// > <???> @ 0x1115c8\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(__int64 a1, unsigned int a2, __int64 a3, __int64 *a4)\n{\n  _BOOL8 v8; // x0\n  __int64 v9; // x0\n  __int64 v10; // x23\n  char *v11; // x8\n  _BOOL8 v12; // x0\n  unsigned int v13; // w20\n\n  v8 = sub_E599C(a1);\n  if ( v8 )\n  {\n    v9 = sub_E7360(v8);\n    v10 = sub_E7390(v9);\n    if ( !v10 )\n      goto LABEL_10;\n    v11 = (char *)&unk_10F318;\n  }\n  else\n  {\n    v12 = sub_E5E68(a1);\n    if ( (sub_E7360(v12) & 1) != 0 )\n    {\n      v10 = sub_E737C();\n      if ( !v10 )\n        goto LABEL_10;\n      v11 = (char *)&unk_10F360;\n    }\n    else\n    {\n      v10 = sub_E737C();\n      if ( !v10 )\n        goto LABEL_10;\n      v11 = (char *)&unk_10F3A8;\n    }\n  }\n  *(_QWORD *)v10 = v11 + 16;\nLABEL_10:\n  if ( v10 )\n  {\n    v13 = (*(__int64 (__fastcall **)(__int64, __int64, __int64, _QWORD))(*(_QWORD *)v10 + 16LL))(v10, a1, a3, a2);\n    if ( v13 )\n    {\n      sub_E6B2C(v10, \"../android/src/fmod_os_misc.cpp\", 169);\n      *a4 = 0;\n    }\n    else\n    {\n      *a4 = v10;\n    }\n  }\n  else\n  {\n    *a4 = 0;\n    return 38;\n  }\n  return v13;\n}", "assembly": "; \n; FMOD_OS_File_Open from 0xe6a24 to 0xe6b2c (264 bytes)\n; \n; 4 xrefs:\n; > .FMOD_OS_File_Open @ 0x109a0c\n; > <???> @ 0x3598\n; > .FMOD_OS_File_Open @ 0x109a04\n; > <???> @ 0x1115c8\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\nSTR             X23, [SP,#-0x10+var_30]!                               ; +0x0, 0xe6a24\nSTP             X22, X21, [SP,#0x30+var_20]                            ; +0x4, 0xe6a28\nSTP             X20, X19, [SP,#0x30+var_10]                            ; +0x8, 0xe6a2c\nSTP             X29, X30, [SP,#0x30+var_s0]                            ; +0xc, 0xe6a30\nADD             X29, SP, #0x30                                         ; +0x10, 0xe6a34\nMOV             X19, X3                                                ; +0x14, 0xe6a38\nMOV             X21, X2                                                ; +0x18, 0xe6a3c\nMOV             W20, W1                                                ; +0x1c, 0xe6a40\nMOV             X22, X0                                                ; +0x20, 0xe6a44\nBL              sub_E599C                                              ; +0x24, 0xe6a48\nTBZ             W0, #0, loc_E6A70                                      ; +0x28, 0xe6a4c\nBL              sub_E7360                                              ; +0x2c, 0xe6a50\nMOV             W3, #0x91                                              ; +0x30, 0xe6a54\nBL              sub_E7390                                              ; +0x34, 0xe6a58\nMOV             X23, X0                                                ; +0x38, 0xe6a5c\nCBZ             X0, loc_E6AC0                                          ; +0x3c, 0xe6a60\nADRP            X8, #off_10F9B8@PAGE                                   ; +0x40, 0xe6a64\nLDR             X8, [X8,#off_10F9B8@PAGEOFF]; unk_10F318               ; +0x44, 0xe6a68\nB               loc_E6AB8                                              ; +0x48, 0xe6a6c\nMOV             X0, X22                                                ; +0x4c, 0xe6a70\nBL              sub_E5E68                                              ; +0x50, 0xe6a74\nBL              sub_E7360                                              ; +0x54, 0xe6a78\nLDR             X8, [X8,#0x1B0]                                        ; +0x58, 0xe6a7c\nTBZ             W0, #0, loc_E6AA0                                      ; +0x5c, 0xe6a80\nMOV             W3, #0x98                                              ; +0x60, 0xe6a84\nBL              sub_E737C                                              ; +0x64, 0xe6a88\nMOV             X23, X0                                                ; +0x68, 0xe6a8c\nCBZ             X0, loc_E6AC0                                          ; +0x6c, 0xe6a90\nADRP            X8, #off_10F9C0@PAGE                                   ; +0x70, 0xe6a94\nLDR             X8, [X8,#off_10F9C0@PAGEOFF]; unk_10F360               ; +0x74, 0xe6a98\nB               loc_E6AB8                                              ; +0x78, 0xe6a9c\nMOV             W3, #0x9D                                              ; +0x7c, 0xe6aa0\nBL              sub_E737C                                              ; +0x80, 0xe6aa4\nMOV             X23, X0                                                ; +0x84, 0xe6aa8\nCBZ             X0, loc_E6AC0                                          ; +0x88, 0xe6aac\nADRP            X8, #off_10F9C8@PAGE                                   ; +0x8c, 0xe6ab0\nLDR             X8, [X8,#off_10F9C8@PAGEOFF]; unk_10F3A8               ; +0x90, 0xe6ab4\nADD             X8, X8, #0x10                                          ; +0x94, 0xe6ab8\nSTR             X8, [X23]                                              ; +0x98, 0xe6abc\nCBZ             X23, loc_E6B04                                         ; +0x9c, 0xe6ac0\nLDR             X8, [X23]                                              ; +0xa0, 0xe6ac4\nMOV             X0, X23                                                ; +0xa4, 0xe6ac8\nMOV             X1, X22                                                ; +0xa8, 0xe6acc\nMOV             X2, X21                                                ; +0xac, 0xe6ad0\nLDR             X8, [X8,#0x10]                                         ; +0xb0, 0xe6ad4\nMOV             W3, W20                                                ; +0xb4, 0xe6ad8\nBLR             X8                                                     ; +0xb8, 0xe6adc\nMOV             W20, W0                                                ; +0xbc, 0xe6ae0\nCBZ             W0, loc_E6B10                                          ; +0xc0, 0xe6ae4\nADRL            X1, aAndroidSrcFmod; \"../android/src/fmod_os_misc.cpp\" ; +0xc4, 0xe6ae8\nMOV             W2, #0xA9                                              ; +0xcc, 0xe6af0\nMOV             X0, X23                                                ; +0xd0, 0xe6af4\nBL              sub_E6B2C                                              ; +0xd4, 0xe6af8\nSTR             XZR, [X19]                                             ; +0xd8, 0xe6afc\nB               loc_E6B14                                              ; +0xdc, 0xe6b00\nSTR             XZR, [X19]                                             ; +0xe0, 0xe6b04\nMOV             W20, #0x26 ; '&'                                       ; +0xe4, 0xe6b08\nB               loc_E6B14                                              ; +0xe8, 0xe6b0c\nSTR             X23, [X19]                                             ; +0xec, 0xe6b10\nMOV             W0, W20                                                ; +0xf0, 0xe6b14\nLDP             X29, X30, [SP,#0x30+var_s0]                            ; +0xf4, 0xe6b18\nLDP             X20, X19, [SP,#0x30+var_10]                            ; +0xf8, 0xe6b1c\nLDP             X22, X21, [SP,#0x30+var_20]                            ; +0xfc, 0xe6b20\nLDR             X23, [SP+0x30+var_30],#0x40                            ; +0x100, 0xe6b24\nRET                                                                    ; +0x104, 0xe6b28", "xrefs": [".FMOD_OS_File_Open @ 0x109a0c", "<???> @ 0x3598", ".FMOD_OS_File_Open @ 0x109a04", "<???> @ 0x1115c8"], "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"}