// // __FrameHandler3::GetRangeOfTrysToCheck from 0x1801254c4 to 0x180125603 (319 bytes) // // 3 xrefs: // > FindHandler<__FrameHandler3> @ 0x180125ec0 // > FindHandlerForForeignException<__FrameHandler3> @ 0x1801262d1 // > @ 0x180202810 // // 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 // _OWORD *__fastcall __FrameHandler3::GetRangeOfTrysToCheck( _OWORD *a1, __int64 a2, int a3, struct _xDISPATCHER_CONTEXT *a4, struct _s_FuncInfo *a5) { unsigned int nTryBlocks; // r14d int v10; // eax int v11; // r10d int v12; // esi __int64 ImageBase; // r8 __int64 dispTryBlockMap; // r11 int v15; // r9d int v16; // r13d unsigned int v17; // edx __int64 v18; // rbx __int64 v19; // rax __int64 v20; // rdx _DWORD *v21; // rcx unsigned int i; // r8d int v23; // eax int v24; // eax __int128 v26; // [rsp+20h] [rbp-48h] __int128 v27; // [rsp+30h] [rbp-38h] nTryBlocks = a5->nTryBlocks; v10 = __FrameHandler3::StateFromControlPc(a5, a4); v11 = 0; v12 = v10; if ( !nTryBlocks ) abort(); ImageBase = a4->ImageBase; dispTryBlockMap = a5->dispTryBlockMap; v15 = -1; v16 = -1; v17 = nTryBlocks; while ( 1 ) { v18 = v17 - 1; v19 = ImageBase + 20 * v18; if ( v12 > *(_DWORD *)(v19 + dispTryBlockMap + 4) && v12 <= *(_DWORD *)(v19 + dispTryBlockMap + 8) ) break; --v17; if ( !(_DWORD)v18 ) { v20 = 0; goto LABEL_8; } } v20 = ImageBase + dispTryBlockMap + 20LL * (v17 - 1); LABEL_8: v21 = (_DWORD *)(ImageBase + dispTryBlockMap); for ( i = 0; i < nTryBlocks; ++i ) { if ( (!v20 || *v21 > *(_DWORD *)(v20 + 4) && v21[1] <= *(_DWORD *)(v20 + 8)) && a3 >= *v21 && a3 <= v21[1] ) { v23 = i; v16 = i; if ( v15 != -1 ) v23 = v15; v15 = v23; } v21 += 5; } *(_QWORD *)&v26 = a2; v24 = 0; *(_QWORD *)&v27 = a2; if ( v15 != -1 ) v24 = v15; DWORD2(v26) = v24; if ( v15 != -1 ) v11 = v16 + 1; DWORD2(v27) = v11; *a1 = v26; a1[1] = v27; return a1; }