/* * Copyright (c) 2002 Sergey Chaban */ using System; using System.IO; using System.Runtime.InteropServices; namespace Mono.PEToolkit { /// /// IMAGE_DATA_DIRECTORY. /// public class DataDir { public static readonly DataDir Null; public RVA virtAddr; public uint size; static DataDir () { Null = new DataDir (); Null.virtAddr = 0; Null.size = 0; } public DataDir () { } public DataDir (BinaryReader reader) { Read (reader); } public void Read (BinaryReader reader) { virtAddr = new RVA (reader.ReadUInt32 ()); size = reader.ReadUInt32 (); } public void Write (BinaryWriter writer) { virtAddr.Write (writer); writer.Write (size); } public RVA VirtualAddress { get { return virtAddr; } set { virtAddr = value; } } public uint Size { get { return size; } set { size = value; } } public bool IsNull { get { return (this == Null); } } public override int GetHashCode() { return (virtAddr.GetHashCode() ^ (int)(size << 1)); } public override bool Equals(object obj) { bool res = (obj is DataDir); if (res) { DataDir that = (DataDir) obj; res = (this.virtAddr == that.virtAddr) && (this.size == that.size); } return res; } public static bool operator == (DataDir d1, DataDir d2) { return d1.Equals(d2); } public static bool operator != (DataDir d1, DataDir d2) { return !d1.Equals(d2); } /// /// /// public override string ToString() { if (this.IsNull) return "NULL"; return String.Format("RVA = {0}, size = 0x{1}", virtAddr, size.ToString("X")); } } }