RtlCopyRetpolineStubsUnwindInfo
INT64 __fastcall RtlCopyRetpolineStubsUnwindInfo(VOID *a1, INT64 a2, UINT64 *a3, INT64 a4){
int v5;
INT64 RetpolineStubsFunctionTable;
unsigned int v9;
UINT8 *v10;
int v11;
unsigned int v12;
__int64 v13;
int v14[4];
int v15;
INT64 v16;
v15 = a2;
v14[0] = 0;
LODWORD(v16) = 0;
v5 = a4;
RetpolineStubsFunctionTable = RtlpGetRetpolineStubsFunctionTable(a1, a2, a4, *(unsigned int *)a3, &v16);
if( !RetpolineStubsFunctionTable )
return 3221226021i64;
v9 = 0;
v10 = (UINT8 *)a3 + *(unsigned int *)a3;
v11 = 0;
if( !(_DWORD)v16 )
return 0i64;
while( 1 )
{
v12 = RtlCalculateUnwindInfoSizeForRetpoline((INT64)a1, RetpolineStubsFunctionTable, v14);
v9 += v12;
if( v9 > 0x1F4 )
break;
v13 = v12;
memmove(v10, (UINT8 *)a1 + *(unsigned int *)(RetpolineStubsFunctionTable + 8), v12);
if( v14[0] )
*(_DWORD *)&v10[v14[0]] += v15 - v5;
v10 += v13;
RetpolineStubsFunctionTable += 12i64;
if( ++v11 >= (unsigned int)v16 )
return 0i64;
}
return 2147483653i64;
}Referenced by:
MiApplyRetpolineFixupsToKernelAndHal