RtlValidateRetpolineRelocation
__int64 __fastcall RtlValidateRetpolineRelocation(_QWORD *a1, unsigned int a2, _DWORD *a3){
unsigned int v6;
unsigned int v7;
unsigned int v8;
unsigned int v9;
unsigned __int64 v10;
unsigned __int64 v11;
int v12;
unsigned __int64 v13;
__int64 v14;
unsigned int v15;
unsigned __int64 v16;
v6 = RtlSizeOfRetpolineRelocationEntry(*a1);
v9 = 0;
v10 = v6;
v11 = 0i64;
v12 = 0;
if( v8 <= v7 )
{
LABEL_12:
*a3 = v12;
}
else
{
while( 1 )
{
v13 = v7 + 8i64;
if( v13 < v7 )
break;
if( v13 > v8 )
break;
v14 = *(unsigned int *)((char *)a1 + v7 + 4);
if( (unsigned int)v14 < 8 )
break;
v15 = v14 + v7;
if( (unsigned int)v14 + v7 < v7 )
break;
if( v15 > v8 )
break;
v16 = *(unsigned int *)((char *)a1 + v7);
if( (unsigned int)v16 >= a2 || (v16 & 0xFFF) != 0 || v16 <= v11 || (v14 - 8) % v10 )
break;
v11 = (unsigned int)v16;
v7 += v14;
v12 += (v14 - 8) / v10;
if( v15 >= v8 )
goto LABEL_12;
}
return(unsigned int)-1073741701;
}
return v9;
}Referenced by:
MiCaptureRetpolineRelocationTables