// dnlib: See LICENSE.txt for more info using dnlib.IO; using dnlib.PE; namespace dnlib.DotNet.Writer { /// /// Import address table chunk /// public sealed class ImportAddressTable : IChunk { readonly bool is64bit; FileOffset offset; RVA rva; /// /// Gets/sets the /// public ImportDirectory ImportDirectory { get; set; } /// public FileOffset FileOffset => offset; /// public RVA RVA => rva; internal bool Enable { get; set; } /// /// Constructor /// /// true if it's a 64-bit PE file, false if it's a 32-bit PE file public ImportAddressTable(bool is64bit) => this.is64bit = is64bit; /// public void SetOffset(FileOffset offset, RVA rva) { this.offset = offset; this.rva = rva; } /// public uint GetFileLength() { if (!Enable) return 0; return is64bit ? 16U : 8; } /// public uint GetVirtualSize() => GetFileLength(); /// public uint CalculateAlignment() => 0; /// public void WriteTo(DataWriter writer) { if (!Enable) return; if (is64bit) { writer.WriteUInt64((ulong)(uint)ImportDirectory.CorXxxMainRVA); writer.WriteUInt64(0); } else { writer.WriteUInt32((uint)ImportDirectory.CorXxxMainRVA); writer.WriteInt32(0); } } } }