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