{"type": "func", "start": 6443403696, "end": 6443403839, "name": "FMOD::SystemI::validate", "pseudocode": "// \n// FMOD::SystemI::validate from 0x1800e89b0 to 0x1800e8a3f (143 bytes)\n// \n// 94 xrefs:\n// > FMOD::System::attachChannelGroupToPort @ 0x1800ab8eb\n// > FMOD::System::attachFileSystem @ 0x1800aba88\n// > FMOD::System::close @ 0x1800abc35\n// > FMOD::System::createChannelGroup @ 0x1800abd15\n// > FMOD::System::createDSP @ 0x1800abe55\n// > FMOD::System::createDSPByPlugin @ 0x1800abf94\n// > FMOD::System::createDSPByType @ 0x1800ac0c4\n// > FMOD::System::createGeometry @ 0x1800ac1fb\n// > FMOD::System::createReverb3D @ 0x1800ac36d\n// > FMOD::System::createSound @ 0x1800ac43e\n// > FMOD::System::createSoundGroup @ 0x1800ac525\n// > FMOD::System::createStream @ 0x1800ac65e\n// > FMOD::System::detachChannelGroupFromPort @ 0x1800ac73d\n// > FMOD::System::get3DListenerAttributes @ 0x1800ac833\n// > FMOD::System::get3DNumListeners @ 0x1800aca2d\n// > FMOD::System::get3DSettings @ 0x1800acb0c\n// > FMOD::System::getAdvancedSettings @ 0x1800acc7d\n// > FMOD::System::getCPUUsage @ 0x1800acd42\n// > FMOD::System::getChannel @ 0x1800ace14\n// > FMOD::System::getChannelsPlaying @ 0x1800acf30\n// > FMOD::System::getDSPBufferSize @ 0x1800ad045\n// > FMOD::System::getDSPInfoByPlugin @ 0x1800ad184\n// > FMOD::System::getDSPInfoByType @ 0x1800ad2b4\n// > FMOD::System::getDefaultMixMatrix @ 0x1800ad3de\n// > FMOD::System::getDriver @ 0x1800ad4ad\n// > FMOD::System::getDriverInfo @ 0x1800ad5a6\n// > FMOD::System::getFileUsage @ 0x1800ad6a5\n// > FMOD::System::getGeometryOcclusion @ 0x1800ad808\n// > FMOD::System::getGeometrySettings @ 0x1800ad9bd\n// > FMOD::System::getMasterChannelGroup @ 0x1800ada82\n// > FMOD::System::getMasterSoundGroup @ 0x1800adb4d\n// > FMOD::System::getNestedPlugin @ 0x1800adc2b\n// > FMOD::System::getNetworkProxy @ 0x1800adda5\n// > FMOD::System::getNetworkTimeout @ 0x1800adedd\n// > FMOD::System::getNumDrivers @ 0x1800adfad\n// > FMOD::System::getNumNestedPlugins @ 0x1800ae084\n// > FMOD::System::getNumPlugins @ 0x1800ae1b4\n// > FMOD::System::getOutput @ 0x1800ae2dd\n// > FMOD::System::getOutputByPlugin @ 0x1800ae3ad\n// > FMOD::System::getOutputHandle @ 0x1800ae47d\n// > FMOD::System::getPluginHandle @ 0x1800ae55b\n// > FMOD::System::getPluginInfo @ 0x1800ae6eb\n// > FMOD::System::getRecordDriverInfo @ 0x1800ae923\n// > FMOD::System::getRecordNumDrivers @ 0x1800aea45\n// > FMOD::System::getRecordPosition @ 0x1800aeb84\n// > FMOD::System::getReverbProperties @ 0x1800aecb4\n// > FMOD::System::getSoftwareChannels @ 0x1800aeddd\n// > FMOD::System::getSoftwareFormat @ 0x1800aeebc\n// > FMOD::System::getSpeakerModeChannels @ 0x1800af04c\n// > FMOD::System::getSpeakerPosition @ 0x1800af137\n// > FMOD::System::getStreamBufferSize @ 0x1800af2f5\n// > FMOD::System::getUserData @ 0x1800af422\n// > FMOD::System::getVersion @ 0x1800af4ed\n// > FMOD::System::init @ 0x1800af5b4\n// > FMOD::System::isRecording @ 0x1800af704\n// > FMOD::System::loadGeometry @ 0x1800af83c\n// > FMOD::System::loadPlugin @ 0x1800af9bc\n// > FMOD::System::lockDSP @ 0x1800afb1a\n// > FMOD::System::mixerResume @ 0x1800afbc5\n// > FMOD::System::mixerSuspend @ 0x1800afc85\n// > FMOD::System::playDSP @ 0x1800afd69\n// > FMOD::System::playSound @ 0x1800aff39\n// > FMOD::System::recordStart @ 0x1800b00fc\n// > FMOD::System::recordStop @ 0x1800b026c\n// > FMOD::System::registerCodec @ 0x1800b034c\n// > FMOD::System::registerDSP @ 0x1800b04c5\n// > FMOD::System::registerOutput @ 0x1800b0605\n// > FMOD::System::release @ 0x1800b0735\n// > FMOD::System::set3DListenerAttributes @ 0x1800b0833\n// > FMOD::System::set3DNumListeners @ 0x1800b0a2c\n// > FMOD::System::set3DRolloffCallback @ 0x1800b0afd\n// > FMOD::System::set3DSettings @ 0x1800b0be0\n// > FMOD::System::setAdvancedSettings @ 0x1800b0d6d\n// > FMOD::System::setCallback @ 0x1800b0e45\n// > FMOD::System::setDSPBufferSize @ 0x1800b0f84\n// > FMOD::System::setDriver @ 0x1800b10ac\n// > FMOD::System::setFileSystem @ 0x1800b119f\n// > FMOD::System::setGeometrySettings @ 0x1800b12c0\n// > FMOD::System::setNetworkProxy @ 0x1800b139d\n// > FMOD::System::setNetworkTimeout @ 0x1800b146c\n// > FMOD::System::setOutput @ 0x1800b153c\n// > FMOD::System::setOutputByPlugin @ 0x1800b160c\n// > FMOD::System::setPluginPath @ 0x1800b16dd\n// > FMOD::System::setReverbProperties @ 0x1800b17b4\n// > FMOD::System::setSoftwareChannels @ 0x1800b18dc\n// > FMOD::System::setSoftwareFormat @ 0x1800b19bb\n// > FMOD::System::setSpeakerPosition @ 0x1800b1b41\n// > FMOD::System::setStreamBufferSize @ 0x1800b1d04\n// > FMOD::System::setUserData @ 0x1800b1e22\n// > FMOD::System::unloadPlugin @ 0x1800b1eec\n// > FMOD::System::unlockDSP @ 0x1800b1faa\n// > FMOD::System::update @ 0x1800b2055\n// > <???> @ 0x180194348\n// > <???> @ 0x1801fffa8\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::SystemI::validate(__int64 a1, _QWORD *a2, _QWORD *a3)\n{\n  __int64 v3; // r9\n  _QWORD *i; // rax\n  __int64 result; // rax\n\n  v3 = 0;\n  *a2 = 0;\n  for ( i = (_QWORD *)((char *)off_1801AED20 + 352); a1 != *i; ++i )\n  {\n    if ( ++v3 >= 8 )\n      return 30;\n  }\n  *a2 = a1;\n  if ( !a1 )\n    return 30;\n  if ( !a3 )\n    return 0;\n  if ( *a3 )\n    return 28;\n  result = sub_1801021E0(a1);\n  if ( !(_DWORD)result )\n  {\n    *a3 = a1;\n    return 0;\n  }\n  return result;\n}", "assembly": "; \n; FMOD::SystemI::validate from 0x1800e89b0 to 0x1800e8a3f (143 bytes)\n; \n; 94 xrefs:\n; > FMOD::System::attachChannelGroupToPort @ 0x1800ab8eb\n; > FMOD::System::attachFileSystem @ 0x1800aba88\n; > FMOD::System::close @ 0x1800abc35\n; > FMOD::System::createChannelGroup @ 0x1800abd15\n; > FMOD::System::createDSP @ 0x1800abe55\n; > FMOD::System::createDSPByPlugin @ 0x1800abf94\n; > FMOD::System::createDSPByType @ 0x1800ac0c4\n; > FMOD::System::createGeometry @ 0x1800ac1fb\n; > FMOD::System::createReverb3D @ 0x1800ac36d\n; > FMOD::System::createSound @ 0x1800ac43e\n; > FMOD::System::createSoundGroup @ 0x1800ac525\n; > FMOD::System::createStream @ 0x1800ac65e\n; > FMOD::System::detachChannelGroupFromPort @ 0x1800ac73d\n; > FMOD::System::get3DListenerAttributes @ 0x1800ac833\n; > FMOD::System::get3DNumListeners @ 0x1800aca2d\n; > FMOD::System::get3DSettings @ 0x1800acb0c\n; > FMOD::System::getAdvancedSettings @ 0x1800acc7d\n; > FMOD::System::getCPUUsage @ 0x1800acd42\n; > FMOD::System::getChannel @ 0x1800ace14\n; > FMOD::System::getChannelsPlaying @ 0x1800acf30\n; > FMOD::System::getDSPBufferSize @ 0x1800ad045\n; > FMOD::System::getDSPInfoByPlugin @ 0x1800ad184\n; > FMOD::System::getDSPInfoByType @ 0x1800ad2b4\n; > FMOD::System::getDefaultMixMatrix @ 0x1800ad3de\n; > FMOD::System::getDriver @ 0x1800ad4ad\n; > FMOD::System::getDriverInfo @ 0x1800ad5a6\n; > FMOD::System::getFileUsage @ 0x1800ad6a5\n; > FMOD::System::getGeometryOcclusion @ 0x1800ad808\n; > FMOD::System::getGeometrySettings @ 0x1800ad9bd\n; > FMOD::System::getMasterChannelGroup @ 0x1800ada82\n; > FMOD::System::getMasterSoundGroup @ 0x1800adb4d\n; > FMOD::System::getNestedPlugin @ 0x1800adc2b\n; > FMOD::System::getNetworkProxy @ 0x1800adda5\n; > FMOD::System::getNetworkTimeout @ 0x1800adedd\n; > FMOD::System::getNumDrivers @ 0x1800adfad\n; > FMOD::System::getNumNestedPlugins @ 0x1800ae084\n; > FMOD::System::getNumPlugins @ 0x1800ae1b4\n; > FMOD::System::getOutput @ 0x1800ae2dd\n; > FMOD::System::getOutputByPlugin @ 0x1800ae3ad\n; > FMOD::System::getOutputHandle @ 0x1800ae47d\n; > FMOD::System::getPluginHandle @ 0x1800ae55b\n; > FMOD::System::getPluginInfo @ 0x1800ae6eb\n; > FMOD::System::getRecordDriverInfo @ 0x1800ae923\n; > FMOD::System::getRecordNumDrivers @ 0x1800aea45\n; > FMOD::System::getRecordPosition @ 0x1800aeb84\n; > FMOD::System::getReverbProperties @ 0x1800aecb4\n; > FMOD::System::getSoftwareChannels @ 0x1800aeddd\n; > FMOD::System::getSoftwareFormat @ 0x1800aeebc\n; > FMOD::System::getSpeakerModeChannels @ 0x1800af04c\n; > FMOD::System::getSpeakerPosition @ 0x1800af137\n; > FMOD::System::getStreamBufferSize @ 0x1800af2f5\n; > FMOD::System::getUserData @ 0x1800af422\n; > FMOD::System::getVersion @ 0x1800af4ed\n; > FMOD::System::init @ 0x1800af5b4\n; > FMOD::System::isRecording @ 0x1800af704\n; > FMOD::System::loadGeometry @ 0x1800af83c\n; > FMOD::System::loadPlugin @ 0x1800af9bc\n; > FMOD::System::lockDSP @ 0x1800afb1a\n; > FMOD::System::mixerResume @ 0x1800afbc5\n; > FMOD::System::mixerSuspend @ 0x1800afc85\n; > FMOD::System::playDSP @ 0x1800afd69\n; > FMOD::System::playSound @ 0x1800aff39\n; > FMOD::System::recordStart @ 0x1800b00fc\n; > FMOD::System::recordStop @ 0x1800b026c\n; > FMOD::System::registerCodec @ 0x1800b034c\n; > FMOD::System::registerDSP @ 0x1800b04c5\n; > FMOD::System::registerOutput @ 0x1800b0605\n; > FMOD::System::release @ 0x1800b0735\n; > FMOD::System::set3DListenerAttributes @ 0x1800b0833\n; > FMOD::System::set3DNumListeners @ 0x1800b0a2c\n; > FMOD::System::set3DRolloffCallback @ 0x1800b0afd\n; > FMOD::System::set3DSettings @ 0x1800b0be0\n; > FMOD::System::setAdvancedSettings @ 0x1800b0d6d\n; > FMOD::System::setCallback @ 0x1800b0e45\n; > FMOD::System::setDSPBufferSize @ 0x1800b0f84\n; > FMOD::System::setDriver @ 0x1800b10ac\n; > FMOD::System::setFileSystem @ 0x1800b119f\n; > FMOD::System::setGeometrySettings @ 0x1800b12c0\n; > FMOD::System::setNetworkProxy @ 0x1800b139d\n; > FMOD::System::setNetworkTimeout @ 0x1800b146c\n; > FMOD::System::setOutput @ 0x1800b153c\n; > FMOD::System::setOutputByPlugin @ 0x1800b160c\n; > FMOD::System::setPluginPath @ 0x1800b16dd\n; > FMOD::System::setReverbProperties @ 0x1800b17b4\n; > FMOD::System::setSoftwareChannels @ 0x1800b18dc\n; > FMOD::System::setSoftwareFormat @ 0x1800b19bb\n; > FMOD::System::setSpeakerPosition @ 0x1800b1b41\n; > FMOD::System::setStreamBufferSize @ 0x1800b1d04\n; > FMOD::System::setUserData @ 0x1800b1e22\n; > FMOD::System::unloadPlugin @ 0x1800b1eec\n; > FMOD::System::unlockDSP @ 0x1800b1faa\n; > FMOD::System::update @ 0x1800b2055\n; > <???> @ 0x180194348\n; > <???> @ 0x1801fffa8\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+arg_0], rbx                                               ; +0x0, 0x1800e89b0\npush    rdi                                                            ; +0x5, 0x1800e89b5\nsub     rsp, 20h                                                       ; +0x6, 0x1800e89b6\nxor     r9d, r9d                                                       ; +0xa, 0x1800e89ba\nmov     rdi, r8                                                        ; +0xd, 0x1800e89bd\nmov     [rdx], r9                                                      ; +0x10, 0x1800e89c0\nmov     rbx, rcx                                                       ; +0x13, 0x1800e89c3\nmov     rax, cs:off_1801AED20                                          ; +0x16, 0x1800e89c6\nadd     rax, 160h                                                      ; +0x1d, 0x1800e89cd\ncmp     rbx, [rax]                                                     ; +0x23, 0x1800e89d3\njz      short loc_1800E89F5                                            ; +0x26, 0x1800e89d6\ninc     r9                                                             ; +0x28, 0x1800e89d8\nadd     rax, 8                                                         ; +0x2b, 0x1800e89db\ncmp     r9, 8                                                          ; +0x2f, 0x1800e89df\njl      short loc_1800E89D3                                            ; +0x33, 0x1800e89e3\nmov     eax, 1Eh                                                       ; +0x35, 0x1800e89e5\nmov     rbx, [rsp+28h+arg_0]                                           ; +0x3a, 0x1800e89ea\nadd     rsp, 20h                                                       ; +0x3f, 0x1800e89ef\npop     rdi                                                            ; +0x43, 0x1800e89f3\nretn                                                                   ; +0x44, 0x1800e89f4\nmov     [rdx], rbx                                                     ; +0x45, 0x1800e89f5\ntest    rbx, rbx                                                       ; +0x48, 0x1800e89f8\njnz     short loc_1800E8A0B                                            ; +0x4b, 0x1800e89fb\nlea     eax, [rbx+1Eh]                                                 ; +0x4d, 0x1800e89fd\nmov     rbx, [rsp+28h+arg_0]                                           ; +0x50, 0x1800e8a00\nadd     rsp, 20h                                                       ; +0x55, 0x1800e8a05\npop     rdi                                                            ; +0x59, 0x1800e8a09\nretn                                                                   ; +0x5a, 0x1800e8a0a\ntest    rdi, rdi                                                       ; +0x5b, 0x1800e8a0b\njz      short loc_1800E8A22                                            ; +0x5e, 0x1800e8a0e\ncmp     qword ptr [r8], 0                                              ; +0x60, 0x1800e8a10\njnz     short loc_1800E8A2F                                            ; +0x64, 0x1800e8a14\ncall    sub_1801021E0                                                  ; +0x66, 0x1800e8a16\ntest    eax, eax                                                       ; +0x6b, 0x1800e8a1b\njnz     short loc_1800E8A24                                            ; +0x6d, 0x1800e8a1d\nmov     [rdi], rbx                                                     ; +0x6f, 0x1800e8a1f\nxor     eax, eax                                                       ; +0x72, 0x1800e8a22\nmov     rbx, [rsp+28h+arg_0]                                           ; +0x74, 0x1800e8a24\nadd     rsp, 20h                                                       ; +0x79, 0x1800e8a29\npop     rdi                                                            ; +0x7d, 0x1800e8a2d\nretn                                                                   ; +0x7e, 0x1800e8a2e\nmov     rbx, [rsp+28h+arg_0]                                           ; +0x7f, 0x1800e8a2f\nmov     eax, 1Ch                                                       ; +0x84, 0x1800e8a34\nadd     rsp, 20h                                                       ; +0x89, 0x1800e8a39\npop     rdi                                                            ; +0x8d, 0x1800e8a3d\nretn                                                                   ; +0x8e, 0x1800e8a3e", "xrefs": ["FMOD::System::attachChannelGroupToPort @ 0x1800ab8eb", "FMOD::System::attachFileSystem @ 0x1800aba88", "FMOD::System::close @ 0x1800abc35", "FMOD::System::createChannelGroup @ 0x1800abd15", "FMOD::System::createDSP @ 0x1800abe55", "FMOD::System::createDSPByPlugin @ 0x1800abf94", "FMOD::System::createDSPByType @ 0x1800ac0c4", "FMOD::System::createGeometry @ 0x1800ac1fb", "FMOD::System::createReverb3D @ 0x1800ac36d", "FMOD::System::createSound @ 0x1800ac43e", "FMOD::System::createSoundGroup @ 0x1800ac525", "FMOD::System::createStream @ 0x1800ac65e", "FMOD::System::detachChannelGroupFromPort @ 0x1800ac73d", "FMOD::System::get3DListenerAttributes @ 0x1800ac833", "FMOD::System::get3DNumListeners @ 0x1800aca2d", "FMOD::System::get3DSettings @ 0x1800acb0c", "FMOD::System::getAdvancedSettings @ 0x1800acc7d", "FMOD::System::getCPUUsage @ 0x1800acd42", "FMOD::System::getChannel @ 0x1800ace14", "FMOD::System::getChannelsPlaying @ 0x1800acf30", "FMOD::System::getDSPBufferSize @ 0x1800ad045", "FMOD::System::getDSPInfoByPlugin @ 0x1800ad184", "FMOD::System::getDSPInfoByType @ 0x1800ad2b4", "FMOD::System::getDefaultMixMatrix @ 0x1800ad3de", "FMOD::System::getDriver @ 0x1800ad4ad", "FMOD::System::getDriverInfo @ 0x1800ad5a6", "FMOD::System::getFileUsage @ 0x1800ad6a5", "FMOD::System::getGeometryOcclusion @ 0x1800ad808", "FMOD::System::getGeometrySettings @ 0x1800ad9bd", "FMOD::System::getMasterChannelGroup @ 0x1800ada82", "FMOD::System::getMasterSoundGroup @ 0x1800adb4d", "FMOD::System::getNestedPlugin @ 0x1800adc2b", "FMOD::System::getNetworkProxy @ 0x1800adda5", "FMOD::System::getNetworkTimeout @ 0x1800adedd", "FMOD::System::getNumDrivers @ 0x1800adfad", "FMOD::System::getNumNestedPlugins @ 0x1800ae084", "FMOD::System::getNumPlugins @ 0x1800ae1b4", "FMOD::System::getOutput @ 0x1800ae2dd", "FMOD::System::getOutputByPlugin @ 0x1800ae3ad", "FMOD::System::getOutputHandle @ 0x1800ae47d", "FMOD::System::getPluginHandle @ 0x1800ae55b", "FMOD::System::getPluginInfo @ 0x1800ae6eb", "FMOD::System::getRecordDriverInfo @ 0x1800ae923", "FMOD::System::getRecordNumDrivers @ 0x1800aea45", "FMOD::System::getRecordPosition @ 0x1800aeb84", "FMOD::System::getReverbProperties @ 0x1800aecb4", "FMOD::System::getSoftwareChannels @ 0x1800aeddd", "FMOD::System::getSoftwareFormat @ 0x1800aeebc", "FMOD::System::getSpeakerModeChannels @ 0x1800af04c", "FMOD::System::getSpeakerPosition @ 0x1800af137", "FMOD::System::getStreamBufferSize @ 0x1800af2f5", "FMOD::System::getUserData @ 0x1800af422", "FMOD::System::getVersion @ 0x1800af4ed", "FMOD::System::init @ 0x1800af5b4", "FMOD::System::isRecording @ 0x1800af704", "FMOD::System::loadGeometry @ 0x1800af83c", "FMOD::System::loadPlugin @ 0x1800af9bc", "FMOD::System::lockDSP @ 0x1800afb1a", "FMOD::System::mixerResume @ 0x1800afbc5", "FMOD::System::mixerSuspend @ 0x1800afc85", "FMOD::System::playDSP @ 0x1800afd69", "FMOD::System::playSound @ 0x1800aff39", "FMOD::System::recordStart @ 0x1800b00fc", "FMOD::System::recordStop @ 0x1800b026c", "FMOD::System::registerCodec @ 0x1800b034c", "FMOD::System::registerDSP @ 0x1800b04c5", "FMOD::System::registerOutput @ 0x1800b0605", "FMOD::System::release @ 0x1800b0735", "FMOD::System::set3DListenerAttributes @ 0x1800b0833", "FMOD::System::set3DNumListeners @ 0x1800b0a2c", "FMOD::System::set3DRolloffCallback @ 0x1800b0afd", "FMOD::System::set3DSettings @ 0x1800b0be0", "FMOD::System::setAdvancedSettings @ 0x1800b0d6d", "FMOD::System::setCallback @ 0x1800b0e45", "FMOD::System::setDSPBufferSize @ 0x1800b0f84", "FMOD::System::setDriver @ 0x1800b10ac", "FMOD::System::setFileSystem @ 0x1800b119f", "FMOD::System::setGeometrySettings @ 0x1800b12c0", "FMOD::System::setNetworkProxy @ 0x1800b139d", "FMOD::System::setNetworkTimeout @ 0x1800b146c", "FMOD::System::setOutput @ 0x1800b153c", "FMOD::System::setOutputByPlugin @ 0x1800b160c", "FMOD::System::setPluginPath @ 0x1800b16dd", "FMOD::System::setReverbProperties @ 0x1800b17b4", "FMOD::System::setSoftwareChannels @ 0x1800b18dc", "FMOD::System::setSoftwareFormat @ 0x1800b19bb", "FMOD::System::setSpeakerPosition @ 0x1800b1b41", "FMOD::System::setStreamBufferSize @ 0x1800b1d04", "FMOD::System::setUserData @ 0x1800b1e22", "FMOD::System::unloadPlugin @ 0x1800b1eec", "FMOD::System::unlockDSP @ 0x1800b1faa", "FMOD::System::update @ 0x1800b2055", "<???> @ 0x180194348", "<???> @ 0x1801fffa8"], "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"}