namespace X86Disassembler.Analysers; public abstract class Address(ulong value, ulong imageBase) { /// /// The actual value of the address, not specifically typed. /// protected readonly ulong Value = value; /// /// PE.ImageBase from which this address is constructed /// protected readonly ulong ImageBase = imageBase; } /// /// Absolute address in the PE file /// public class FileAbsoluteAddress(ulong value, ulong imageBase) : Address(value, imageBase) { public ulong GetValue() { return Value; } public virtual VirtualAddress AsImageBaseAddress() { return new VirtualAddress(Value + ImageBase, ImageBase); } public virtual FileAbsoluteAddress AsFileAbsolute() { return this; } } /// /// Address from PE.ImageBase /// public class VirtualAddress : FileAbsoluteAddress { public VirtualAddress(ulong value, ulong imageBase) : base(value, imageBase) { } public override VirtualAddress AsImageBaseAddress() { return this; } public override FileAbsoluteAddress AsFileAbsolute() { return new FileAbsoluteAddress(Value - ImageBase, ImageBase); } }