{"type": "func", "start": 943236, "end": 943740, "name": "FMOD_Android_JNI_Init", "pseudocode": "// \n// FMOD_Android_JNI_Init from 0xe6484 to 0xe667c (504 bytes)\n// \n// 1 xrefs:\n// > <???> @ 0x60a0\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 FMOD_Android_JNI_Init()\n{\n  __int64 v0; // x0\n  __int64 v1; // x1\n  __int64 *v2; // x8\n  __int64 v3; // x9\n  __int64 result; // x0\n  __int64 v5; // x8\n  __int64 v6; // x19\n  __int64 v7; // x0\n  __int64 v8; // x20\n  __int64 v9; // x0\n  __int64 v10; // x21\n  __int64 v11; // x0\n  __int64 v12; // x22\n  __int64 v13; // x0\n  _QWORD *v14; // x23\n  __int64 v15; // x0\n  _QWORD *v16; // [xsp+8h] [xbp-48h] BYREF\n\n  v0 = sub_E6934();\n  v3 = *v2;\n  if ( *(_QWORD *)(*v2 + 456) )\n    return 0;\n  v5 = v0;\n  result = 31;\n  if ( v5 )\n  {\n    v6 = v1;\n    if ( v1 )\n    {\n      *(_QWORD *)(v3 + 456) = v5;\n      result = sub_E667C(&v16, v1);\n      if ( !(_DWORD)result )\n      {\n        v7 = sub_E6928(v16, \"android/app/NativeActivity\");\n        if ( !v7 )\n          return 28;\n        v8 = v7;\n        v9 = sub_E6928(v16, \"java/lang/ClassLoader\");\n        if ( !v9 )\n          return 28;\n        v10 = v9;\n        v11 = (*(__int64 (__fastcall **)(_QWORD *, __int64, const char *, const char *))(*v16 + 264LL))(\n                v16,\n                v8,\n                \"getClassLoader\",\n                \"()Ljava/lang/ClassLoader;\");\n        if ( !v11 )\n          return 28;\n        v12 = sub_E675C(v16, v6, v11);\n        if ( (unsigned __int8)(*(_QWORD *(__fastcall **)(_QWORD *__return_ptr, _QWORD *))(*v16 + 1824LL))(v16, v16) )\n          return 28;\n        v13 = (*(__int64 (__fastcall **)(_QWORD *, __int64, const char *, const char *))(*v16 + 264LL))(\n                v16,\n                v10,\n                \"loadClass\",\n                \"(Ljava/lang/String;)Ljava/lang/Class;\");\n        if ( !v13 )\n          return 28;\n        result = sub_E638C((__int64)v16, v13, v12);\n        if ( !(_DWORD)result )\n        {\n          v14 = v16;\n          if ( !(*(unsigned int (__fastcall **)(_QWORD *, __int64, char **, __int64))(*v16 + 1720LL))(\n                  v16,\n                  gFMODClass,\n                  off_11AA40,\n                  3)\n            && !(*(unsigned int (__fastcall **)(_QWORD *, __int64, char **, __int64))(*v14 + 1720LL))(\n                  v14,\n                  gMediaCodecClass,\n                  off_11AA10,\n                  2) )\n          {\n            v15 = (*(__int64 (__fastcall **)(_QWORD *, __int64, const char *, const char *))(*v16 + 904LL))(\n                    v16,\n                    gFMODClass,\n                    \"init\",\n                    \"(Landroid/content/Context;)V\");\n            if ( v15 )\n            {\n              sub_E67CC(v16, gFMODClass, v15, v6);\n              sub_E68FC(v16, v12);\n              sub_E68FC(v16, v10);\n              sub_E68FC(v16, v8);\n              return 0;\n            }\n          }\n          return 28;\n        }\n      }\n    }\n  }\n  return result;\n}", "assembly": "; \n; FMOD_Android_JNI_Init from 0xe6484 to 0xe667c (504 bytes)\n; \n; 1 xrefs:\n; > <???> @ 0x60a0\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\nSUB             SP, SP, #0x50                                          ; +0x0, 0xe6484\nSTP             X24, X23, [SP,#0x50+var_40]                            ; +0x4, 0xe6488\nSTP             X22, X21, [SP,#0x50+var_30]                            ; +0x8, 0xe648c\nSTP             X20, X19, [SP,#0x50+var_20]                            ; +0xc, 0xe6490\nSTP             X29, X30, [SP,#0x50+var_10]                            ; +0x10, 0xe6494\nBL              sub_E6934                                              ; +0x14, 0xe6498\nADD             X29, SP, #0x50+var_10                                  ; +0x18, 0xe649c\nLDR             X9, [X8]                                               ; +0x1c, 0xe64a0\nLDR             X10, [X9,#0x1C8]                                       ; +0x20, 0xe64a4\nCBZ             X10, loc_E64C8                                         ; +0x24, 0xe64a8\nMOV             W0, WZR                                                ; +0x28, 0xe64ac\nLDP             X29, X30, [SP,#0x50+var_10]                            ; +0x2c, 0xe64b0\nLDP             X20, X19, [SP,#0x50+var_20]                            ; +0x30, 0xe64b4\nLDP             X22, X21, [SP,#0x50+var_30]                            ; +0x34, 0xe64b8\nLDP             X24, X23, [SP,#0x50+var_40]                            ; +0x38, 0xe64bc\nADD             SP, SP, #0x50 ; 'P'                                    ; +0x3c, 0xe64c0\nRET                                                                    ; +0x40, 0xe64c4\nMOV             X8, X0                                                 ; +0x44, 0xe64c8\nMOV             W0, #0x1F                                              ; +0x48, 0xe64cc\nCBZ             X8, loc_E64B0                                          ; +0x4c, 0xe64d0\nMOV             X19, X1                                                ; +0x50, 0xe64d4\nCBZ             X1, loc_E64B0                                          ; +0x54, 0xe64d8\nADD             X0, SP, #0x50+var_48                                   ; +0x58, 0xe64dc\nSTR             X8, [X9,#0x1C8]                                        ; +0x5c, 0xe64e0\nBL              sub_E667C                                              ; +0x60, 0xe64e4\nCBNZ            W0, loc_E64B0                                          ; +0x64, 0xe64e8\nLDR             X0, [SP,#0x50+var_48]                                  ; +0x68, 0xe64ec\nADRL            X1, aAndroidAppNati; \"android/app/NativeActivity\"      ; +0x6c, 0xe64f0\nBL              sub_E6928                                              ; +0x74, 0xe64f8\nCBZ             X0, loc_E6574                                          ; +0x78, 0xe64fc\nMOV             X20, X0                                                ; +0x7c, 0xe6500\nLDR             X0, [SP,#0x50+var_48]                                  ; +0x80, 0xe6504\nADRL            X1, aJavaLangClassl; \"java/lang/ClassLoader\"           ; +0x84, 0xe6508\nBL              sub_E6928                                              ; +0x8c, 0xe6510\nCBZ             X0, loc_E6574                                          ; +0x90, 0xe6514\nMOV             X21, X0                                                ; +0x94, 0xe6518\nLDR             X0, [SP,#0x50+var_48]                                  ; +0x98, 0xe651c\nADRP            X2, #aGetclassloader@PAGE; \"getClassLoader\"            ; +0x9c, 0xe6520\nADRP            X3, #aLjavaLangClass@PAGE; \"()Ljava/lang/ClassLoader;\" ; +0xa0, 0xe6524\nADD             X2, X2, #aGetclassloader@PAGEOFF; \"getClassLoader\"     ; +0xa4, 0xe6528\nLDR             X8, [X0]                                               ; +0xa8, 0xe652c\nADD             X3, X3, #aLjavaLangClass@PAGEOFF; \"()Ljava/lang/ClassLoader;\" ; +0xac, 0xe6530\nMOV             X1, X20                                                ; +0xb0, 0xe6534\nLDR             X8, [X8,#0x108]                                        ; +0xb4, 0xe6538\nBLR             X8                                                     ; +0xb8, 0xe653c\nCBZ             X0, loc_E6574                                          ; +0xbc, 0xe6540\nMOV             X2, X0                                                 ; +0xc0, 0xe6544\nLDR             X0, [SP,#0x50+var_48]                                  ; +0xc4, 0xe6548\nMOV             X1, X19                                                ; +0xc8, 0xe654c\nBL              sub_E675C                                              ; +0xcc, 0xe6550\nLDR             X8, [SP,#0x50+var_48]                                  ; +0xd0, 0xe6554\nMOV             X22, X0                                                ; +0xd4, 0xe6558\nLDR             X9, [X8]                                               ; +0xd8, 0xe655c\nMOV             X0, X8                                                 ; +0xdc, 0xe6560\nLDR             X9, [X9,#0x720]                                        ; +0xe0, 0xe6564\nBLR             X9                                                     ; +0xe4, 0xe6568\nTST             W0, #0xFF                                              ; +0xe8, 0xe656c\nB.EQ            loc_E657C                                              ; +0xec, 0xe6570\nMOV             W0, #0x1C                                              ; +0xf0, 0xe6574\nB               loc_E64B0                                              ; +0xf4, 0xe6578\nLDR             X0, [SP,#0x50+var_48]                                  ; +0xf8, 0xe657c\nADRP            X2, #aLoadclass@PAGE; \"loadClass\"                      ; +0xfc, 0xe6580\nADRP            X3, #aLjavaLangStrin@PAGE; \"(Ljava/lang/String;)Ljava/lang/Class;\" ; +0x100, 0xe6584\nADD             X2, X2, #aLoadclass@PAGEOFF; \"loadClass\"               ; +0x104, 0xe6588\nLDR             X8, [X0]                                               ; +0x108, 0xe658c\nADD             X3, X3, #aLjavaLangStrin@PAGEOFF; \"(Ljava/lang/String;)Ljava/lang/Class;\" ; +0x10c, 0xe6590\nMOV             X1, X21                                                ; +0x110, 0xe6594\nLDR             X8, [X8,#0x108]                                        ; +0x114, 0xe6598\nBLR             X8                                                     ; +0x118, 0xe659c\nCBZ             X0, loc_E6574                                          ; +0x11c, 0xe65a0\nMOV             X1, X0                                                 ; +0x120, 0xe65a4\nLDR             X0, [SP,#0x50+var_48]                                  ; +0x124, 0xe65a8\nMOV             X2, X22                                                ; +0x128, 0xe65ac\nBL              sub_E638C                                              ; +0x12c, 0xe65b0\nCBNZ            W0, loc_E64B0                                          ; +0x130, 0xe65b4\nLDR             X23, [SP,#0x50+var_48]                                 ; +0x134, 0xe65b8\nADRP            X24, #gFMODClass@PAGE                                  ; +0x138, 0xe65bc\nLDR             X1, [X24,#gFMODClass@PAGEOFF]                          ; +0x13c, 0xe65c0\nADRP            X2, #off_11AA40@PAGE; \"OutputAAudioHeadphonesChanged\"  ; +0x140, 0xe65c4\nLDR             X8, [X23]                                              ; +0x144, 0xe65c8\nADD             X2, X2, #off_11AA40@PAGEOFF; \"OutputAAudioHeadphonesChanged\" ; +0x148, 0xe65cc\nMOV             W3, #3                                                 ; +0x14c, 0xe65d0\nMOV             X0, X23                                                ; +0x150, 0xe65d4\nLDR             X8, [X8,#0x6B8]                                        ; +0x154, 0xe65d8\nBLR             X8                                                     ; +0x158, 0xe65dc\nCBNZ            W0, loc_E6574                                          ; +0x15c, 0xe65e0\nLDR             X8, [X23]                                              ; +0x160, 0xe65e4\nADRP            X9, #gMediaCodecClass@PAGE                             ; +0x164, 0xe65e8\nLDR             X1, [X9,#gMediaCodecClass@PAGEOFF]                     ; +0x168, 0xe65ec\nADRP            X2, #off_11AA10@PAGE; \"fmodReadAt\"                     ; +0x16c, 0xe65f0\nLDR             X8, [X8,#0x6B8]                                        ; +0x170, 0xe65f4\nADD             X2, X2, #off_11AA10@PAGEOFF; \"fmodReadAt\"              ; +0x174, 0xe65f8\nMOV             W3, #2                                                 ; +0x178, 0xe65fc\nMOV             X0, X23                                                ; +0x17c, 0xe6600\nBLR             X8                                                     ; +0x180, 0xe6604\nCBNZ            W0, loc_E6574                                          ; +0x184, 0xe6608\nLDR             X0, [SP,#0x50+var_48]                                  ; +0x188, 0xe660c\nLDR             X1, [X24,#gFMODClass@PAGEOFF]                          ; +0x18c, 0xe6610\nADRP            X2, #aInit@PAGE; \"init\"                                ; +0x190, 0xe6614\nADRP            X3, #aLandroidConten_0@PAGE; \"(Landroid/content/Context;)V\" ; +0x194, 0xe6618\nLDR             X8, [X0]                                               ; +0x198, 0xe661c\nADD             X2, X2, #aInit@PAGEOFF; \"init\"                         ; +0x19c, 0xe6620\nADD             X3, X3, #aLandroidConten_0@PAGEOFF; \"(Landroid/content/Context;)V\" ; +0x1a0, 0xe6624\nLDR             X8, [X8,#0x388]                                        ; +0x1a4, 0xe6628\nBLR             X8                                                     ; +0x1a8, 0xe662c\nCBZ             X0, loc_E6574                                          ; +0x1ac, 0xe6630\nMOV             X2, X0                                                 ; +0x1b0, 0xe6634\nLDR             X0, [SP,#0x50+var_48]                                  ; +0x1b4, 0xe6638\nLDR             X1, [X24,#gFMODClass@PAGEOFF]                          ; +0x1b8, 0xe663c\nMOV             X3, X19                                                ; +0x1bc, 0xe6640\nBL              sub_E67CC                                              ; +0x1c0, 0xe6644\nLDR             X0, [SP,#0x50+var_48]                                  ; +0x1c4, 0xe6648\nMOV             X1, X22                                                ; +0x1c8, 0xe664c\nLDR             X8, [X0]                                               ; +0x1cc, 0xe6650\nBL              sub_E68FC                                              ; +0x1d0, 0xe6654\nLDR             X0, [SP,#0x50+var_48]                                  ; +0x1d4, 0xe6658\nMOV             X1, X21                                                ; +0x1d8, 0xe665c\nLDR             X8, [X0]                                               ; +0x1dc, 0xe6660\nBL              sub_E68FC                                              ; +0x1e0, 0xe6664\nLDR             X0, [SP,#0x50+var_48]                                  ; +0x1e4, 0xe6668\nMOV             X1, X20                                                ; +0x1e8, 0xe666c\nLDR             X8, [X0]                                               ; +0x1ec, 0xe6670\nBL              sub_E68FC                                              ; +0x1f0, 0xe6674\nB               loc_E64AC                                              ; +0x1f4, 0xe6678", "xrefs": ["<???> @ 0x60a0"], "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"}