{"type": "func", "start": 6443091968, "end": 6443092107, "name": "FMOD::DSPI::validate", "pseudocode": "// \n// FMOD::DSPI::validate from 0x18009c800 to 0x18009c88b (139 bytes)\n// \n// 46 xrefs:\n// > FMOD::DSP::addInput @ 0x1800a12af\n// > FMOD::DSP::disconnectAll @ 0x1800a1416\n// > FMOD::DSP::disconnectFrom @ 0x1800a1555\n// > FMOD::DSP::getActive @ 0x1800a168d\n// > FMOD::DSP::getBypass @ 0x1800a176d\n// > FMOD::DSP::getCPUUsage @ 0x1800a1855\n// > FMOD::DSP::getChannelFormat @ 0x1800a199c\n// > FMOD::DSP::getDataParameterIndex @ 0x1800a1aff\n// > FMOD::DSP::getIdle @ 0x1800a1c0d\n// > FMOD::DSP::getInfo @ 0x1800a1ce9\n// > FMOD::DSP::getInput @ 0x1800a1ebb\n// > FMOD::DSP::getMeteringEnabled @ 0x1800a2045\n// > FMOD::DSP::getMeteringInfo @ 0x1800a2185\n// > FMOD::DSP::getNumInputs @ 0x1800a22bd\n// > FMOD::DSP::getNumOutputs @ 0x1800a239d\n// > FMOD::DSP::getNumParameters @ 0x1800a2472\n// > FMOD::DSP::getOutput @ 0x1800a254b\n// > FMOD::DSP::getOutputChannelFormat @ 0x1800a26fd\n// > FMOD::DSP::getParameterBool @ 0x1800a2926\n// > FMOD::DSP::getParameterData @ 0x1800a2ac0\n// > FMOD::DSP::getParameterFloat @ 0x1800a2c86\n// > FMOD::DSP::getParameterInfo @ 0x1800a2e0f\n// > FMOD::DSP::getParameterInt @ 0x1800a2f16\n// > FMOD::DSP::getSystemObject @ 0x1800a30a2\n// > FMOD::DSP::getType @ 0x1800a316d\n// > FMOD::DSP::getUserData @ 0x1800a3232\n// > FMOD::DSP::getWetDryMix @ 0x1800a330c\n// > FMOD::DSP::release @ 0x1800a3475\n// > FMOD::DSP::reset @ 0x1800a3535\n// > FMOD::DSP::setActive @ 0x1800a35fd\n// > FMOD::DSP::setBypass @ 0x1800a36dd\n// > FMOD::DSP::setCallback @ 0x1800a37bd\n// > FMOD::DSP::setChannelFormat @ 0x1800a389b\n// > FMOD::DSP::setMeteringEnabled @ 0x1800a3a16\n// > FMOD::DSP::setParameterBool @ 0x1800a3b40\n// > FMOD::DSP::setParameterData @ 0x1800a3c44\n// > FMOD::DSP::setParameterFloat @ 0x1800a3d85\n// > FMOD::DSP::setParameterInt @ 0x1800a3e8f\n// > FMOD::DSP::setUserData @ 0x1800a3f92\n// > FMOD::DSP::setWetDryMix @ 0x1800a4070\n// > FMOD::DSP::showConfigDialog @ 0x1800a4206\n// > <???> @ 0x1801852ac\n// > <???> @ 0x1801852c0\n// > <???> @ 0x1801852d0\n// > <???> @ 0x180194348\n// > <???> @ 0x1801faca4\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::DSPI::validate(__int64 a1, _QWORD *a2, _QWORD *a3)\n{\n  __int64 result; // rax\n  __int64 v5; // rbx\n\n  if ( !a2 )\n    return 31;\n  *a2 = a1;\n  if ( !a1 || (a1 & 3) != 0 || (*(_DWORD *)(a1 + 100) & 0x400) != 0 || *(_DWORD *)(a1 + 92) != -1395763731 )\n    return 30;\n  if ( !a3 )\n    return 0;\n  if ( *a3 )\n    return 28;\n  v5 = *(_QWORD *)(a1 + 168);\n  if ( !v5 )\n    return 28;\n  result = sub_1801021E0(*(_QWORD *)(a1 + 168));\n  if ( !(_DWORD)result )\n  {\n    *a3 = v5;\n    return 0;\n  }\n  return result;\n}", "assembly": "; \n; FMOD::DSPI::validate from 0x18009c800 to 0x18009c88b (139 bytes)\n; \n; 46 xrefs:\n; > FMOD::DSP::addInput @ 0x1800a12af\n; > FMOD::DSP::disconnectAll @ 0x1800a1416\n; > FMOD::DSP::disconnectFrom @ 0x1800a1555\n; > FMOD::DSP::getActive @ 0x1800a168d\n; > FMOD::DSP::getBypass @ 0x1800a176d\n; > FMOD::DSP::getCPUUsage @ 0x1800a1855\n; > FMOD::DSP::getChannelFormat @ 0x1800a199c\n; > FMOD::DSP::getDataParameterIndex @ 0x1800a1aff\n; > FMOD::DSP::getIdle @ 0x1800a1c0d\n; > FMOD::DSP::getInfo @ 0x1800a1ce9\n; > FMOD::DSP::getInput @ 0x1800a1ebb\n; > FMOD::DSP::getMeteringEnabled @ 0x1800a2045\n; > FMOD::DSP::getMeteringInfo @ 0x1800a2185\n; > FMOD::DSP::getNumInputs @ 0x1800a22bd\n; > FMOD::DSP::getNumOutputs @ 0x1800a239d\n; > FMOD::DSP::getNumParameters @ 0x1800a2472\n; > FMOD::DSP::getOutput @ 0x1800a254b\n; > FMOD::DSP::getOutputChannelFormat @ 0x1800a26fd\n; > FMOD::DSP::getParameterBool @ 0x1800a2926\n; > FMOD::DSP::getParameterData @ 0x1800a2ac0\n; > FMOD::DSP::getParameterFloat @ 0x1800a2c86\n; > FMOD::DSP::getParameterInfo @ 0x1800a2e0f\n; > FMOD::DSP::getParameterInt @ 0x1800a2f16\n; > FMOD::DSP::getSystemObject @ 0x1800a30a2\n; > FMOD::DSP::getType @ 0x1800a316d\n; > FMOD::DSP::getUserData @ 0x1800a3232\n; > FMOD::DSP::getWetDryMix @ 0x1800a330c\n; > FMOD::DSP::release @ 0x1800a3475\n; > FMOD::DSP::reset @ 0x1800a3535\n; > FMOD::DSP::setActive @ 0x1800a35fd\n; > FMOD::DSP::setBypass @ 0x1800a36dd\n; > FMOD::DSP::setCallback @ 0x1800a37bd\n; > FMOD::DSP::setChannelFormat @ 0x1800a389b\n; > FMOD::DSP::setMeteringEnabled @ 0x1800a3a16\n; > FMOD::DSP::setParameterBool @ 0x1800a3b40\n; > FMOD::DSP::setParameterData @ 0x1800a3c44\n; > FMOD::DSP::setParameterFloat @ 0x1800a3d85\n; > FMOD::DSP::setParameterInt @ 0x1800a3e8f\n; > FMOD::DSP::setUserData @ 0x1800a3f92\n; > FMOD::DSP::setWetDryMix @ 0x1800a4070\n; > FMOD::DSP::showConfigDialog @ 0x1800a4206\n; > <???> @ 0x1801852ac\n; > <???> @ 0x1801852c0\n; > <???> @ 0x1801852d0\n; > <???> @ 0x180194348\n; > <???> @ 0x1801faca4\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\npush    rdi                                                            ; +0x0, 0x18009c800\nsub     rsp, 20h                                                       ; +0x2, 0x18009c802\nmov     rdi, r8                                                        ; +0x6, 0x18009c806\ntest    rdx, rdx                                                       ; +0x9, 0x18009c809\njnz     short loc_18009C817                                            ; +0xc, 0x18009c80c\nlea     eax, [rdx+1Fh]                                                 ; +0xe, 0x18009c80e\nadd     rsp, 20h                                                       ; +0x11, 0x18009c811\npop     rdi                                                            ; +0x15, 0x18009c815\nretn                                                                   ; +0x16, 0x18009c816\nmov     [rdx], rcx                                                     ; +0x17, 0x18009c817\ntest    rcx, rcx                                                       ; +0x1a, 0x18009c81a\njz      short loc_18009C880                                            ; +0x1d, 0x18009c81d\ntest    cl, 3                                                          ; +0x1f, 0x18009c81f\njnz     short loc_18009C880                                            ; +0x22, 0x18009c822\nmov     eax, [rcx+64h]                                                 ; +0x24, 0x18009c824\nnop                                                                    ; +0x27, 0x18009c827\nshr     eax, 0Ah                                                       ; +0x28, 0x18009c828\ntest    al, 1                                                          ; +0x2b, 0x18009c82b\njnz     short loc_18009C880                                            ; +0x2d, 0x18009c82d\ncmp     dword ptr [rcx+5Ch], 0ACCE55EDh                                ; +0x2f, 0x18009c82f\njnz     short loc_18009C880                                            ; +0x36, 0x18009c836\nmov     [rsp+28h+arg_0], rbx                                           ; +0x38, 0x18009c838\ntest    rdi, rdi                                                       ; +0x3d, 0x18009c83d\njz      short loc_18009C863                                            ; +0x40, 0x18009c840\ncmp     qword ptr [r8], 0                                              ; +0x42, 0x18009c842\njnz     short loc_18009C870                                            ; +0x46, 0x18009c846\nmov     rbx, [rcx+0A8h]                                                ; +0x48, 0x18009c848\ntest    rbx, rbx                                                       ; +0x4f, 0x18009c84f\njz      short loc_18009C870                                            ; +0x52, 0x18009c852\nmov     rcx, rbx                                                       ; +0x54, 0x18009c854\ncall    sub_1801021E0                                                  ; +0x57, 0x18009c857\ntest    eax, eax                                                       ; +0x5c, 0x18009c85c\njnz     short loc_18009C865                                            ; +0x5e, 0x18009c85e\nmov     [rdi], rbx                                                     ; +0x60, 0x18009c860\nxor     eax, eax                                                       ; +0x63, 0x18009c863\nmov     rbx, [rsp+28h+arg_0]                                           ; +0x65, 0x18009c865\nadd     rsp, 20h                                                       ; +0x6a, 0x18009c86a\npop     rdi                                                            ; +0x6e, 0x18009c86e\nretn                                                                   ; +0x6f, 0x18009c86f\nmov     rbx, [rsp+28h+arg_0]                                           ; +0x70, 0x18009c870\nmov     eax, 1Ch                                                       ; +0x75, 0x18009c875\nadd     rsp, 20h                                                       ; +0x7a, 0x18009c87a\npop     rdi                                                            ; +0x7e, 0x18009c87e\nretn                                                                   ; +0x7f, 0x18009c87f\nmov     eax, 1Eh                                                       ; +0x80, 0x18009c880\nadd     rsp, 20h                                                       ; +0x85, 0x18009c885\npop     rdi                                                            ; +0x89, 0x18009c889\nretn                                                                   ; +0x8a, 0x18009c88a", "xrefs": ["FMOD::DSP::addInput @ 0x1800a12af", "FMOD::DSP::disconnectAll @ 0x1800a1416", "FMOD::DSP::disconnectFrom @ 0x1800a1555", "FMOD::DSP::getActive @ 0x1800a168d", "FMOD::DSP::getBypass @ 0x1800a176d", "FMOD::DSP::getCPUUsage @ 0x1800a1855", "FMOD::DSP::getChannelFormat @ 0x1800a199c", "FMOD::DSP::getDataParameterIndex @ 0x1800a1aff", "FMOD::DSP::getIdle @ 0x1800a1c0d", "FMOD::DSP::getInfo @ 0x1800a1ce9", "FMOD::DSP::getInput @ 0x1800a1ebb", "FMOD::DSP::getMeteringEnabled @ 0x1800a2045", "FMOD::DSP::getMeteringInfo @ 0x1800a2185", "FMOD::DSP::getNumInputs @ 0x1800a22bd", "FMOD::DSP::getNumOutputs @ 0x1800a239d", "FMOD::DSP::getNumParameters @ 0x1800a2472", "FMOD::DSP::getOutput @ 0x1800a254b", "FMOD::DSP::getOutputChannelFormat @ 0x1800a26fd", "FMOD::DSP::getParameterBool @ 0x1800a2926", "FMOD::DSP::getParameterData @ 0x1800a2ac0", "FMOD::DSP::getParameterFloat @ 0x1800a2c86", "FMOD::DSP::getParameterInfo @ 0x1800a2e0f", "FMOD::DSP::getParameterInt @ 0x1800a2f16", "FMOD::DSP::getSystemObject @ 0x1800a30a2", "FMOD::DSP::getType @ 0x1800a316d", "FMOD::DSP::getUserData @ 0x1800a3232", "FMOD::DSP::getWetDryMix @ 0x1800a330c", "FMOD::DSP::release @ 0x1800a3475", "FMOD::DSP::reset @ 0x1800a3535", "FMOD::DSP::setActive @ 0x1800a35fd", "FMOD::DSP::setBypass @ 0x1800a36dd", "FMOD::DSP::setCallback @ 0x1800a37bd", "FMOD::DSP::setChannelFormat @ 0x1800a389b", "FMOD::DSP::setMeteringEnabled @ 0x1800a3a16", "FMOD::DSP::setParameterBool @ 0x1800a3b40", "FMOD::DSP::setParameterData @ 0x1800a3c44", "FMOD::DSP::setParameterFloat @ 0x1800a3d85", "FMOD::DSP::setParameterInt @ 0x1800a3e8f", "FMOD::DSP::setUserData @ 0x1800a3f92", "FMOD::DSP::setWetDryMix @ 0x1800a4070", "FMOD::DSP::showConfigDialog @ 0x1800a4206", "<???> @ 0x1801852ac", "<???> @ 0x1801852c0", "<???> @ 0x1801852d0", "<???> @ 0x180194348", "<???> @ 0x1801faca4"], "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"}