// SPDX-License-Identifier: Apache-2.0
///|
pub fn PEImage::clr_header(self : Self) -> ClrHeaderInfo? raise PeError {
let directory = match self.directory(14) {
Some(directory) if directory.virtual_address != 0UL && directory.size > 0 =>
directory
_ => return None
}
let offset = self.rva_to_offset(directory.virtual_address)
ensure_range(self.data, offset, 72)
Some({
header_size: checked_int(
read_u32(self.data, offset),
offset,
"CLR header size",
),
major_runtime_version: read_u16(self.data, offset + 4),
minor_runtime_version: read_u16(self.data, offset + 6),
metadata_rva: read_u32(self.data, offset + 8),
metadata_size: checked_int(
read_u32(self.data, offset + 12),
offset + 12,
"CLR metadata size",
),
flags: checked_int(
read_u32(self.data, offset + 16),
offset + 16,
"CLR flags",
),
entry_point_token: checked_int(
read_u32(self.data, offset + 20),
offset + 20,
"CLR entry-point token",
),
resources_rva: read_u32(self.data, offset + 24),
resources_size: checked_int(
read_u32(self.data, offset + 28),
offset + 28,
"CLR resource size",
),
strong_name_rva: read_u32(self.data, offset + 32),
strong_name_size: checked_int(
read_u32(self.data, offset + 36),
offset + 36,
"CLR strong-name size",
),
})
}