LdrProcessRelocationBlockLongLong
_IMAGE_BASE_RELOCATION *__stdcall LdrProcessRelocationBlockLongLong(
ULONG_PTR ImageMachine,
UINT64 Va,
PUSHORT SizeOfBlock,
_LONGLONG RelocationPtr,
INT64 Diff){
_IMAGE_BASE_RELOCATION *v5;
int v7;
unsigned __int64 v8;
unsigned int v9;
v5 = *(_IMAGE_BASE_RELOCATION **)&RelocationPtr;
v7 = (unsigned __int16)ImageMachine;
v8 = *(_QWORD *)&RelocationPtr + 2i64 * (unsigned int)SizeOfBlock;
if( *(_QWORD *)&RelocationPtr >= v8 )
return v5;
while( 1 )
{
if( ((1 << (LOWORD(v5->VirtualAddress) >> 12)) & 0x3A0) == 0 )
{
v9 = LdrpGenericProcessRelocation((UINT16 *)v5, Va, Diff);
goto LABEL_9;
}
if( v7 != 448 )
break;
v9 = LdrpArmProcessRelocation((UINT16 *)v5, Va, Diff);
LABEL_9:
if( !v9 )
return 0i64;
v5 = (_IMAGE_BASE_RELOCATION *)((char *)v5 + 2 * v9);
if( (unsigned __int64)v5 >= v8 )
return v5;
}
if( v7 == 450 || v7 == 452 )
{
v9 = LdrpThumbProcessRelocation((UINT16 *)v5, Va, Diff);
goto LABEL_9;
}
return 0i64;
}Referenced by:
LdrRelocateImageWithBias