// // FindHandlerForForeignException<__FrameHandler3> from 0x1801261e0 to 0x1801263f5 (533 bytes) // // 2 xrefs: // > FindHandler<__FrameHandler3> @ 0x18012615f // > @ 0x1802028dc // // 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 // void __fastcall FindHandlerForForeignException<__FrameHandler3>( struct EHExceptionRecord *a1, unsigned __int64 *a2, struct _CONTEXT *a3, struct _xDISPATCHER_CONTEXT *a4, struct _s_FuncInfo *a5, int a6, int a7, int a8) { PVOID v11; // rbx __int64 v12; // rcx int v13; // r13d __int64 v14; // r9 unsigned int v15; // r15d __int64 v16; // rax __int64 v17; // r8 __m128i v18; // xmm0 __int64 v19; // rcx __int64 v20; // rcx struct _s_HandlerType *v21; // rbx __int64 dispType; // r13 __int64 v23; // rcx __int64 v24; // rax int v25; // [rsp+58h] [rbp-69h] _QWORD v26[2]; // [rsp+68h] [rbp-59h] BYREF __int128 v27; // [rsp+78h] [rbp-49h] __int64 v28[2]; // [rsp+88h] [rbp-39h] BYREF int v29; // [rsp+98h] [rbp-29h] __int128 v30; // [rsp+A0h] [rbp-21h] BYREF unsigned int v31; // [rsp+B8h] [rbp-9h] __int64 v32; // [rsp+108h] [rbp+47h] if ( a1->ExceptionCode != -2147483645 ) { if ( !*(_QWORD *)(_vcrt_getptd((__int64)a1) + 16) || (v11 = EncodePointer(nullptr), *(PVOID *)(_vcrt_getptd(v12) + 16) == v11) || a1->ExceptionCode == -532459699 ) { v13 = a7; } else { v13 = a7; if ( a1->ExceptionCode != -532462766 && (unsigned int)unknown_libname_15(&a1->ExceptionCode, (__int64)a2, (__int64)a3) ) { return; } } v26[1] = a4->ImageBase; v26[0] = a5; if ( !a5->nTryBlocks ) abort(); __FrameHandler3::GetRangeOfTrysToCheck(&v30, (__int64)v26, a6, a4, a5); v27 = v30; if ( DWORD2(v30) < v31 ) { v14 = v30; v15 = DWORD2(v27); v32 = v30; do { v16 = *(_QWORD *)(v14 + 8); v17 = *(int *)(*(_QWORD *)v27 + 16LL) + 20LL * v15; v18 = *(__m128i *)(v17 + v16); v19 = *(int *)(v17 + v16 + 16); v29 = *(_DWORD *)(v17 + v16 + 16); *(__m128i *)v28 = v18; if ( _mm_cvtsi128_si32(v18) <= a6 && a6 <= SHIDWORD(v28[0]) ) { v20 = a4->ImageBase + v19; v21 = (struct _s_HandlerType *)(v20 + 20 * (HIDWORD(v28[1]) - 1)); if ( v21->dispType ) { dispType = v21->dispType; if ( dispType + GetImageBase(v20) ) { v24 = (_DWORD)dispType ? v21->dispType + GetImageBase(v23) : 0LL; if ( *(_BYTE *)(v24 + 16) ) goto LABEL_23; } v13 = a7; } if ( (v21->adjectives & 0x40) == 0 ) { LOBYTE(v25) = 1; CatchIt<__FrameHandler3>(a1, a2, a3, a4, a5, v21, 0, (int *)v28, v13, a8, v25, 0); } } LABEL_23: v13 = a7; ++v15; v14 = v32; } while ( v15 < v31 ); } } }