MiUpdateThunks
VOID __stdcall MiUpdateThunks(
_LOADER_PARAMETER_BLOCK *LoaderBlock,
VOID *OldAddress,
VOID *NewAddress,
UINT64 NumberOfBytes){
char *v4;
_LIST_ENTRY *p_LoadOrderListHead;
_LIST_ENTRY *Flink;
signed __int64 v7;
unsigned __int64 *v9;
__int64 v10;
unsigned __int64 v11;
UINT64 Size;
LODWORD(Size) = 0;
v4 = (char *)OldAddress + (unsigned int)(NumberOfBytes - 1);
p_LoadOrderListHead = &LoaderBlock->LoadOrderListHead;
Flink = LoaderBlock->LoadOrderListHead.Flink;
v7 = (_BYTE *)NewAddress - (_BYTE *)OldAddress;
while( Flink != p_LoadOrderListHead )
{
v9 = (unsigned __int64 *)RtlImageDirectoryEntryToData(Flink[3].Flink, 1u, 0xCu, &Size);
if( v9 )
{
LODWORD(Size) = (unsigned int)Size >> 3;
v10 = (unsigned int)Size;
if( (_DWORD)Size )
{
do
{
v11 = *v9;
if( *v9 >= (unsigned __int64)OldAddress && v11 <= (unsigned __int64)v4 )
*v9 = v7 + v11;
++v9;
--v10;
}
while( v10 );
}
}
Flink = Flink->Flink;
}
}Referenced by:
MiBootImageRelocated