RtlGetImageBaseAndLoadConfig
NTSTATUS __stdcall RtlGetImageBaseAndLoadConfig(VOID *EndingAddress, VOID **a2, INT64 *a3){
INT64 v3;
INT64 v7;
UINT64 v9;
unsigned __int64 v10;
UINT64 v11;
_INVERTED_FUNCTION_TABLE_ENTRY a7;
int v13;
*(_QWORD *)&a7.SizeOfImage = 0i64;
v7 = 0i64;
v13 = 0;
if( !RtlpLookupUserFunctionTableInverted(EndingAddress, &a7, (INT64)a3, v3, 0i64, v11, 0i64, 0i64) )
{
if( (int)MmGetImageInformation(EndingAddress, &a7.ImageBase, &v10, &v13) < 0 )
{
a7.ImageBase = 0i64;
}
else if( v10 >= 0xFFFFFFFF )
{
return -1073741675;
}
}
v11 = 0i64;
if( a7.ImageBase )
{
if( (unsigned __int64)a7.ImageBase + 64 > 0x7FFFFFFF0000i64
|| (void *)((unsigned __int64)a7.ImageBase + 64) < a7.ImageBase )
{
MEMORY[0x7FFFFFFF0000] = 0;
}
LODWORD(v9) = LdrImageDirectoryEntryToLoadConfig(a7.ImageBase);
v7 = v9;
v11 = v9;
}
*a2 = a7.ImageBase;
*a3 = v7;
return 0;
}Referenced by:
KiVerifyContextIpForUserCet
RtlVerifyUserUnwindTarget