// // __C_specific_handler from 0x180124928 to 0x180124b33 (523 bytes) // // 51 xrefs: // > @ 0x180190430 // > @ 0x18019046c // > @ 0x1801904a0 // > @ 0x180191cfc // > @ 0x180191dd0 // > @ 0x180191e0c // > @ 0x180191e7c // > @ 0x1801920a4 // > @ 0x180192234 // > @ 0x180192290 // > @ 0x180192300 // > @ 0x1801923e4 // > @ 0x180192420 // > @ 0x18019256c // > @ 0x1801925a4 // > @ 0x180192ae8 // > @ 0x180192b40 // > @ 0x180192c10 // > @ 0x180192d0c // > @ 0x180192d38 // > @ 0x180192e84 // > @ 0x180192eb0 // > @ 0x180192f40 // > @ 0x180193038 // > @ 0x180193274 // > @ 0x1801932a0 // > @ 0x1801932cc // > @ 0x1801932f8 // > @ 0x180193484 // > @ 0x1801934dc // > @ 0x180193504 // > @ 0x180193724 // > @ 0x180193778 // > @ 0x1801937a8 // > @ 0x1801937d4 // > @ 0x18019381c // > @ 0x180193900 // > @ 0x18019393c // > @ 0x180193978 // > @ 0x180193a64 // > @ 0x180193abc // > @ 0x180193bc8 // > @ 0x180193cbc // > @ 0x180193d20 // > @ 0x180193d48 // > @ 0x180193f8c // > @ 0x180193fc4 // > @ 0x1801941a4 // > @ 0x180194204 // > @ 0x180194254 // > @ 0x180202690 // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // EXCEPTION_DISPOSITION __cdecl _C_specific_handler( struct _EXCEPTION_RECORD *ExceptionRecord, void *EstablisherFrame, struct _CONTEXT *ContextRecord, struct _DISPATCHER_CONTEXT *DispatcherContext) { DWORD64 ImageBase; // r12 DWORD *HandlerData; // rbx unsigned __int64 v10; // r14 DWORD ScopeIndex; // esi int v12; // eax DWORD v14; // r9d unsigned __int64 v15; // rdi DWORD v16; // r8d __int64 v17; // rcx DWORD i; // r10d __int64 v19; // rax _QWORD v20[2]; // [rsp+30h] [rbp-38h] BYREF _except_validate_context_record(ContextRecord); ImageBase = DispatcherContext->ImageBase; HandlerData = (DWORD *)DispatcherContext->HandlerData; v10 = DispatcherContext->ControlPc - ImageBase; ScopeIndex = DispatcherContext->ScopeIndex; if ( (ExceptionRecord->ExceptionFlags & 0x66) != 0 ) { v14 = *HandlerData; v15 = DispatcherContext->TargetIp - ImageBase; if ( ScopeIndex < *HandlerData ) { v16 = *HandlerData; do { v17 = v16; if ( v10 >= HandlerData[4 * ScopeIndex + 1] && v10 < HandlerData[4 * ScopeIndex + 2] ) { if ( (ExceptionRecord->ExceptionFlags & 0x20) != 0 ) { for ( i = 0; i < v16; ++i ) { if ( v15 >= HandlerData[4 * i + 1] && v15 < HandlerData[4 * i + 2] && HandlerData[4 * i + 4] == HandlerData[4 * ScopeIndex + 4] && HandlerData[4 * i + 3] == HandlerData[4 * ScopeIndex + 3] ) { break; } } v17 = v14; if ( i != v14 ) return ExceptionContinueSearch; } v19 = HandlerData[4 * ScopeIndex + 4]; if ( (_DWORD)v19 ) { if ( v15 == v19 && (ExceptionRecord->ExceptionFlags & 0x20) != 0 ) return ExceptionContinueSearch; } else { LOBYTE(v17) = 1; DispatcherContext->ScopeIndex = ScopeIndex + 1; ((void (__fastcall *)(__int64, void *))(ImageBase + HandlerData[4 * ScopeIndex + 3]))(v17, EstablisherFrame); v14 = *HandlerData; LODWORD(v17) = *HandlerData; } } ++ScopeIndex; v16 = v17; } while ( ScopeIndex < (unsigned int)v17 ); } } else { v20[0] = ExceptionRecord; v20[1] = ContextRecord; while ( ScopeIndex < *HandlerData ) { if ( v10 >= HandlerData[4 * ScopeIndex + 1] && v10 < HandlerData[4 * ScopeIndex + 2] && HandlerData[4 * ScopeIndex + 4] ) { if ( HandlerData[4 * ScopeIndex + 3] == 1 ) goto LABEL_11; v12 = ((__int64 (__fastcall *)(_QWORD *, void *))(ImageBase + HandlerData[4 * ScopeIndex + 3]))( v20, EstablisherFrame); if ( v12 < 0 ) return ExceptionContinueExecution; if ( v12 > 0 ) { LABEL_11: if ( ExceptionRecord->ExceptionCode == -529697949 && _DestructExceptionObject ) { if ( (unsigned int)IsNonwritableInCurrentImage(&off_18016FC30) ) _DestructExceptionObject(ExceptionRecord, 1); } NLG_Notify(ImageBase + HandlerData[4 * ScopeIndex + 4], EstablisherFrame, 1); RtlUnwindEx( EstablisherFrame, (PVOID)(ImageBase + HandlerData[4 * ScopeIndex + 4]), ExceptionRecord, (PVOID)ExceptionRecord->ExceptionCode, DispatcherContext->ContextRecord, DispatcherContext->HistoryTable); nullsub_4(); } } ++ScopeIndex; } } return ExceptionContinueSearch; }