public static uint AlignUpByFile(this IPEImage peImage, uint value) { if (peImage is null) { throw new ArgumentNullException(nameof(peImage)); } return(MdlibUtils.AlignUp(value, !peImage.Is64Bit ? peImage.NtHeader.OptionalHeader.RawValue32->FileAlignment : peImage.NtHeader.OptionalHeader.RawValue64->FileAlignment)); }
public static FileHeader Create(NtHeader ntHeader) { if (ntHeader is null) { throw new ArgumentNullException(nameof(ntHeader)); } byte * p; FileHeader fileHeader; p = (byte *)ntHeader.RawData + 4; if (!MdlibUtils.IsValidPointer(p, IMAGE_FILE_HEADER.UnmanagedSize)) { return(null); } fileHeader = new FileHeader { _rawData = p, _offset = (uint)ntHeader.FileOffset + 4 }; return(fileHeader); }
public static SectionHeader Create(IPEImage peImage, uint index) { if (peImage is null) { throw new ArgumentNullException(nameof(peImage)); } FileHeader fileHeader; uint offset; SectionHeader sectionHeader; fileHeader = peImage.NtHeader.FileHeader; offset = (uint)fileHeader.FileOffset + IMAGE_FILE_HEADER.UnmanagedSize + fileHeader.RawValue->SizeOfOptionalHeader + (index * IMAGE_SECTION_HEADER.UnmanagedSize); if (!MdlibUtils.IsValidPointer((byte *)peImage.RawData + offset, IMAGE_SECTION_HEADER.UnmanagedSize)) { return(null); } sectionHeader = new SectionHeader { _offset = offset, _rawData = (byte *)peImage.RawData + offset }; return(sectionHeader); }