MiCaptureImageExceptionValues
void __fastcall MiCaptureImageExceptionValues(__int64 a1){
char *v1;
IMAGE_NT_HEADERS *v3;
_RTL_BITMAP *v4;
IMAGE_NT_HEADERS *v5;
unsigned int v6;
UINT64 v7;
_IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY *v8;
UINT64 Size;
PRTL_BITMAP BitMapHeader;
v1 = *(char **)(a1 + 48);
v3 = RtlImageNtHeader(v1);
v4 = *(_RTL_BITMAP **)(a1 + 272);
v5 = v3;
v6 = *(_DWORD *)(a1 + 64) >> 12;
v4->SizeOfBitMap = v6;
v4->Buffer = &v4[1].SizeOfBitMap;
RtlClearAllBits(v4);
if( v5->OptionalHeader.NumberOfRvaAndSizes > 3 )
{
v7 = *(unsigned int *)(a1 + 152);
v8 = (_IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY *)&v1[v5->OptionalHeader.DataDirectory[3].VirtualAddress];
*(_QWORD *)(a1 + 16) = v8;
Size = v5->OptionalHeader.DataDirectory[3].Size;
*(_DWORD *)(a1 + 24) = Size;
if( (int)RtlMarkExceptionHandlingPages((UINT64)v1, v7, v8, Size, v4) < 0 )
{
LODWORD(BitMapHeader) = v6;
DbgPrintEx(
0x66u,
0,
"Image %wZ has unrecognized unwind information causing a charge of %u pages\n",
a1 + 88,
BitMapHeader);
RtlSetAllBits(v4);
}
}
}Referenced by:
MiConstructLoaderEntry