MiCaptureImageExceptionValues
VOID __stdcall MiCaptureImageExceptionValues(_KLDR_DATA_TABLE_ENTRY *DataTableEntry){
char *DllBase;
_DWORD *v3;
_RTL_BITMAP *SectionPointer;
_DWORD *v5;
unsigned int v6;
UINT64 SizeOfImageNotRounded;
_IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY *v8;
UINT64 v9;
_RTL_BITMAP *ImagePages;
DllBase = (char *)DataTableEntry->DllBase;
LODWORD(v3) = RtlImageNtHeader((UINT64)DllBase);
SectionPointer = (_RTL_BITMAP *)DataTableEntry[1].SectionPointer;
v5 = v3;
v6 = DataTableEntry->SizeOfImage >> 12;
SectionPointer->SizeOfBitMap = v6;
SectionPointer->Buffer = &SectionPointer[1].SizeOfBitMap;
RtlClearAllBits(SectionPointer);
if( v5[33] > 3u )
{
SizeOfImageNotRounded = DataTableEntry->SizeOfImageNotRounded;
v8 = (_IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY *)&DllBase[v5[40]];
DataTableEntry->ExceptionTable = v8;
v9 = (unsigned int)v5[41];
DataTableEntry->ExceptionTableSize = v9;
if( RtlMarkExceptionHandlingPages((UINT64)DllBase, SizeOfImageNotRounded, v8, v9, SectionPointer) < 0 )
{
LODWORD(ImagePages) = v6;
DbgPrintEx(
0x66u,
0,
"Image %wZ has unrecognized unwind information causing a charge of %u pages\n",
&DataTableEntry->BaseDllName,
ImagePages);
RtlSetAllBits(SectionPointer);
}
}
}Referenced by:
MiConstructLoaderEntry