internal DataDirectories(PortableExecutableImage image, OptionalHeader optHeader, IMAGE_DATA_DIRECTORY[] dataDirs) { _image = image; var size = (Utils.SizeOf <IMAGE_DATA_DIRECTORY>() * dataDirs.Length).ToUInt32(); var fileSize = optHeader.Location.FileSize; var fileOffset = optHeader.Location.FileOffset + fileSize; var rva = optHeader.Location.RelativeVirtualAddress + optHeader.Location.VirtualSize.ToUInt32(); var va = optHeader.Location.VirtualAddress + optHeader.Location.VirtualSize; Location = new Location(image, fileOffset, rva, va, size, size); _directories = new Dictionary <DataDirectoryType, DataDirectory>(); for (var i = 0; i < dataDirs.Length; i++) { var type = DataDirectoryType.Unknown; if (i >= 0 && i <= 14) { type = (DataDirectoryType)i; } var dir = new DataDirectory(image, this, type, dataDirs[i], optHeader.ImageBase); _directories.Add(type, dir); } }
internal NTHeaders(ExeReader exeReader, StreamLocation streamLoc, FileHeader fileHeader, OptionalHeader optHeader) { reader = exeReader; location = streamLoc; file_header = fileHeader; opt_header = optHeader; }
internal NTHeaders(ExecutableImage exeImage, ulong headerOffset, ulong imageBase, FileHeader fileHeader, OptionalHeader optHeader, DataDirectoryCollection dataDirs) { uint size = (4U + fileHeader.Location.FileSize + optHeader.Location.FileSize + dataDirs.Location.FileSize).ToUInt32(); image = exeImage; location = new Location(headerOffset,Convert.ToUInt32(headerOffset),imageBase + headerOffset,size,size); file_header = fileHeader; opt_header = optHeader; data_dirs = dataDirs; }
internal NTHeaders(PortableExecutableImage image, ulong headerOffset, ulong imageBase, FileHeader fileHeader, OptionalHeader optHeader, DataDirectories dataDirs) { _image = image; var size = (4U + fileHeader.Location.FileSize + optHeader.Location.FileSize + dataDirs.Location.FileSize).ToUInt32(); Location = new Location(image, headerOffset, headerOffset.ToUInt32(), imageBase + headerOffset, size, size); FileHeader = fileHeader; OptionalHeader = optHeader; DataDirectories = dataDirs; }