RtlpConstructSwitchJumpRelocationFixup
__int64 __fastcall RtlpConstructSwitchJumpRelocationFixup(
int a1,
_DWORD *a2,
__int64 a3,
_WORD *a4,
int a5,
__int64 a6){
__int64 v6;
unsigned __int64 v7;
unsigned int v8;
__int64 result;
__int64 v10;
v6 = 0i64;
*(_WORD *)a6 = 0;
*(_QWORD *)(a6 + 2) = 0xCCCCCCCCCCCCCCCCui64;
*(_DWORD *)(a6 + 10) = -858993460;
v7 = (unsigned __int16)*a4;
if( a5 )
{
v8 = *a2 + *(_DWORD *)(a3 + 4 * (v7 >> 12) + 4) - (a1 + 5);
*(_WORD *)a6 = 63;
*(_BYTE *)(a6 + 4) = BYTE1(v8);
result = HIWORD(v8);
*(_BYTE *)(a6 + 3) = v8;
*(_BYTE *)(a6 + 6) = HIBYTE(v8);
*(_BYTE *)(a6 + 2) = -24;
*(_BYTE *)(a6 + 5) = BYTE2(v8);
*(_BYTE *)(a6 + 7) = -52;
}
else
{
v10 = 0i64;
if( (v7 & 0xF000) >= 0x8000 )
{
v6 = 1i64;
*(_BYTE *)(a6 + 2) = 65;
v10 = 1i64;
}
*(_BYTE *)(v10 + a6 + 2) = -1;
*(_BYTE *)(v6 + a6 + 3) = (*a4 >> 12) & 7 | 0xE0;
result = 63i64;
*(_WORD *)a6 = 63;
}
return result;
}Referenced by:
RtlApplySwitchJumpRelocationToPage
RtlPerformRetpolineRelocationsOnImageEx