{"type": "func", "start": 381048, "end": 381388, "name": "sub_5D078", "pseudocode": "// \n// sub_5D078 from 0x5d078 to 0x5d1cc (340 bytes)\n// \n// 1 xrefs:\n// > sub_54DB0 @ 0x54ed8\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 sub_5D078(__int64 a1, __int64 a2, __int64 a3)\n{\n  __int64 result; // x0\n  __int64 v7; // x8\n  __int64 v8; // x10\n  __int64 v9; // x9\n  __int64 v10; // x10\n  __int64 v11; // x9\n  __int64 v12; // x10\n  __int64 v13; // x8\n  bool v14; // zf\n  __int64 v15; // x9\n  _QWORD *v16; // x9\n  __int64 v17; // t1\n  __int64 v18; // [xsp+8h] [xbp-38h] BYREF\n  _BYTE v19[8]; // [xsp+10h] [xbp-30h] BYREF\n  char v20; // [xsp+18h] [xbp-28h]\n  __int64 v21; // [xsp+28h] [xbp-18h] BYREF\n\n  v21 = 0;\n  if ( (unsigned int)FMOD::ChannelI::validate(a2, &v21, 0) )\n  {\n    result = sub_579DC(a2, &v18, nullptr);\n    if ( (_DWORD)result )\n      return result;\n    sub_5D4C8();\n    v7 = v18;\n    v20 = 1;\n    if ( *(_DWORD *)(v18 + 544) != 1 )\n    {\n      *(_DWORD *)(v18 + 544) = 0;\n      *(_QWORD *)(v7 + 552) = a2;\n      v8 = *(_QWORD *)(v7 + 520);\n      *(_QWORD *)(v7 + 560) = *(_QWORD *)a3;\n      v9 = v7 + 520;\n      *(_DWORD *)(v7 + 568) = *(_DWORD *)(a3 + 8);\n      if ( v8 == v7 + 520 && *(_QWORD *)(v7 + 528) == v9 )\n      {\n        v10 = *(_QWORD *)(a1 + 352);\n        *(_QWORD *)(v7 + 520) = a1 + 344;\n        *(_QWORD *)(v7 + 528) = v10;\n        *(_QWORD *)(a1 + 352) = v9;\n        **(_QWORD **)(v7 + 528) = v9;\n      }\n    }\n  }\n  else\n  {\n    sub_5D4C8();\n    v20 = 1;\n    v11 = *(_QWORD *)(a1 + 336);\n    v12 = *(int *)((char *)&qword_1D0 + v21);\n    v13 = v11 + (v12 << 6);\n    if ( *(_DWORD *)(v13 + 24) != 1 )\n    {\n      *(_DWORD *)(v13 + 24) = 0;\n      *(_QWORD *)(v13 + 32) = a2;\n      *(_QWORD *)(v13 + 40) = *(_QWORD *)a3;\n      v14 = *(_QWORD *)v13 == v13;\n      *(_DWORD *)(v13 + 48) = *(_DWORD *)(a3 + 8);\n      if ( v14 )\n      {\n        v15 = v11 + (v12 << 6);\n        v17 = *(_QWORD *)(v15 + 8);\n        v16 = (_QWORD *)(v15 + 8);\n        if ( v17 == v13 )\n        {\n          *v16 = *(_QWORD *)(a1 + 352);\n          *(_QWORD *)v13 = a1 + 344;\n          *(_QWORD *)(a1 + 352) = v13;\n          *(_QWORD *)*v16 = v13;\n        }\n      }\n    }\n  }\n  return sub_52090((__int64)v19);\n}", "assembly": "; \n; sub_5D078 from 0x5d078 to 0x5d1cc (340 bytes)\n; \n; 1 xrefs:\n; > sub_54DB0 @ 0x54ed8\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, 0x5d078\nSTR             X21, [SP,#0x40+var_20]                                 ; +0x4, 0x5d07c\nSTP             X29, X30, [SP,#0x40+var_s0]                            ; +0x8, 0x5d080\nADD             X29, SP, #0x40                                         ; +0xc, 0x5d084\nMOV             X21, X1                                                ; +0x10, 0x5d088\nSTP             X20, X19, [SP,#0x40+var_10]                            ; +0x14, 0x5d08c\nMOV             X20, X2                                                ; +0x18, 0x5d090\nMOV             X19, X0                                                ; +0x1c, 0x5d094\nSUB             X1, X29, #-var_18                                      ; +0x20, 0x5d098\nMOV             X0, X21                                                ; +0x24, 0x5d09c\nMOV             X2, XZR                                                ; +0x28, 0x5d0a0\nSTUR            XZR, [X29,#var_18]                                     ; +0x2c, 0x5d0a4\nBL              ._ZN4FMOD8ChannelI8validateEPNS_7ChannelEPPS0_PNS_15SystemLockScopeE; FMOD::ChannelI::validate(FMOD::Channel *,FMOD::ChannelI**,FMOD::SystemLockScope *) ; +0x30, 0x5d0a8\nCBZ             W0, loc_5D134                                          ; +0x34, 0x5d0ac\nADD             X1, SP, #0x40+var_38                                   ; +0x38, 0x5d0b0\nMOV             X0, X21                                                ; +0x3c, 0x5d0b4\nMOV             X2, XZR                                                ; +0x40, 0x5d0b8\nBL              sub_579DC                                              ; +0x44, 0x5d0bc\nCBNZ            W0, loc_5D1B8                                          ; +0x48, 0x5d0c0\nBL              sub_5D4C8                                              ; +0x4c, 0x5d0c4\nLDR             X8, [SP,#0x40+var_38]                                  ; +0x50, 0x5d0c8\nMOV             W9, #1                                                 ; +0x54, 0x5d0cc\nSTRB            W9, [SP,#0x40+var_28]                                  ; +0x58, 0x5d0d0\nLDR             W9, [X8,#0x220]                                        ; +0x5c, 0x5d0d4\nCMP             W9, #1                                                 ; +0x60, 0x5d0d8\nB.EQ            loc_5D1B0                                              ; +0x64, 0x5d0dc\nSTR             WZR, [X8,#0x220]                                       ; +0x68, 0x5d0e0\nSTR             X21, [X8,#0x228]                                       ; +0x6c, 0x5d0e4\nLDR             X9, [X20]                                              ; +0x70, 0x5d0e8\nLDR             X10, [X8,#0x208]                                       ; +0x74, 0x5d0ec\nSTR             X9, [X8,#0x230]                                        ; +0x78, 0x5d0f0\nLDR             W11, [X20,#8]                                          ; +0x7c, 0x5d0f4\nADD             X9, X8, #0x208                                         ; +0x80, 0x5d0f8\nCMP             X10, X9                                                ; +0x84, 0x5d0fc\nSTR             W11, [X8,#0x238]                                       ; +0x88, 0x5d100\nB.NE            loc_5D1B0                                              ; +0x8c, 0x5d104\nLDR             X10, [X8,#0x210]                                       ; +0x90, 0x5d108\nCMP             X10, X9                                                ; +0x94, 0x5d10c\nB.NE            loc_5D1B0                                              ; +0x98, 0x5d110\nLDR             X10, [X19,#0x160]                                      ; +0x9c, 0x5d114\nADD             X11, X19, #0x158                                       ; +0xa0, 0x5d118\nSTR             X11, [X8,#0x208]                                       ; +0xa4, 0x5d11c\nSTR             X10, [X8,#0x210]                                       ; +0xa8, 0x5d120\nSTR             X9, [X19,#0x160]                                       ; +0xac, 0x5d124\nLDR             X8, [X8,#0x210]                                        ; +0xb0, 0x5d128\nSTR             X9, [X8]                                               ; +0xb4, 0x5d12c\nB               loc_5D1B0                                              ; +0xb8, 0x5d130\nBL              sub_5D4C8                                              ; +0xbc, 0x5d134\nLDUR            X8, [X29,#var_18]                                      ; +0xc0, 0x5d138\nMOV             W9, #1                                                 ; +0xc4, 0x5d13c\nSTRB            W9, [SP,#0x40+var_28]                                  ; +0xc8, 0x5d140\nLDR             X9, [X19,#0x150]                                       ; +0xcc, 0x5d144\nLDRSW           X10, [X8,#qword_1D0]                                   ; +0xd0, 0x5d148\nADD             X8, X9, X10,LSL#6                                      ; +0xd4, 0x5d14c\nMOV             X11, X8                                                ; +0xd8, 0x5d150\nLDR             W12, [X11,#0x18]!                                      ; +0xdc, 0x5d154\nCMP             W12, #1                                                ; +0xe0, 0x5d158\nB.EQ            loc_5D1B0                                              ; +0xe4, 0x5d15c\nSTR             WZR, [X11]                                             ; +0xe8, 0x5d160\nSTR             X21, [X8,#0x20]                                        ; +0xec, 0x5d164\nLDR             X11, [X20]                                             ; +0xf0, 0x5d168\nSTR             X11, [X8,#0x28]                                        ; +0xf4, 0x5d16c\nLDR             X11, [X8]                                              ; +0xf8, 0x5d170\nLDR             W12, [X20,#8]                                          ; +0xfc, 0x5d174\nCMP             X11, X8                                                ; +0x100, 0x5d178\nSTR             W12, [X8,#0x30]                                        ; +0x104, 0x5d17c\nB.NE            loc_5D1B0                                              ; +0x108, 0x5d180\nADD             X9, X9, X10,LSL#6                                      ; +0x10c, 0x5d184\nLDR             X10, [X9,#8]!                                          ; +0x110, 0x5d188\nCMP             X10, X8                                                ; +0x114, 0x5d18c\nB.NE            loc_5D1B0                                              ; +0x118, 0x5d190\nLDR             X10, [X19,#0x160]                                      ; +0x11c, 0x5d194\nADD             X11, X19, #0x158                                       ; +0x120, 0x5d198\nSTR             X10, [X9]                                              ; +0x124, 0x5d19c\nSTR             X11, [X8]                                              ; +0x128, 0x5d1a0\nSTR             X8, [X19,#0x160]                                       ; +0x12c, 0x5d1a4\nLDR             X9, [X9]                                               ; +0x130, 0x5d1a8\nSTR             X8, [X9]                                               ; +0x134, 0x5d1ac\nADD             X0, SP, #0x40+var_30                                   ; +0x138, 0x5d1b0\nBL              sub_52090                                              ; +0x13c, 0x5d1b4\nLDP             X29, X30, [SP,#0x40+var_s0]                            ; +0x140, 0x5d1b8\nLDP             X20, X19, [SP,#0x40+var_10]                            ; +0x144, 0x5d1bc\nLDR             X21, [SP,#0x40+var_20]                                 ; +0x148, 0x5d1c0\nADD             SP, SP, #0x50 ; 'P'                                    ; +0x14c, 0x5d1c4\nRET                                                                    ; +0x150, 0x5d1c8", "xrefs": ["sub_54DB0 @ 0x54ed8"], "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"}