RtlCreateRetpolineStubsFunctionTable
__int64 __fastcall RtlCreateRetpolineStubsFunctionTable(__int64 a1, _DWORD *a2, unsigned int a3){
__int64 v3;
_DWORD *v5;
_DWORD *v6;
__int64 result;
int v8;
int v9;
_DWORD *v10;
__int64 v11;
int v12;
int v13;
int v14;
INT64 v15;
HIDWORD(v15) = HIDWORD(a1);
v3 = PsNtosImageBase;
LODWORD(v15) = 0;
LODWORD(v5) = RtlpGetRetpolineStubsFunctionTable((VOID *)PsNtosImageBase, PsNtosImageBase, (INT64)a2, a3, &v15);
v6 = v5;
if( !v5 )
return 3221226021i64;
v8 = v15;
if( (unsigned int)v15 > 0x32 )
return 2147483653i64;
v9 = (_DWORD)a2 + *a2;
if( (_DWORD)v15 )
{
v10 = &unk_140E01A74;
v11 = (unsigned int)v15;
do
{
v12 = v3 + v6[1];
*(v10 - 1) = v3 + *v6 - (_DWORD)a2;
*v10 = v12 - (_DWORD)a2;
v10[1] = v9 - (_DWORD)a2;
v13 = RtlCalculateUnwindInfoSizeForRetpoline(v3, (__int64)v6, 0i64);
v10 += 3;
v9 = v13 + v14;
v6 += 3;
--v11;
}
while( v11 );
}
RtlRetpolineStubsFunctionTableSize = 12 * v8;
dword_140C00E90 = 12 * v8;
result = 0i64;
qword_140C00E88 = (__int64)&RtlRetpolineStubsFunctionTable;
return result;
}Referenced by:
MiInitializeRetpoline