blob: 40c8bda09113b91c7047a5ea4fd1cad48f205dfb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
/*
* Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>
*/
using System;
using System.IO;
using System.Runtime.InteropServices;
namespace Mono.PEToolkit {
/// <summary>
/// IMAGE_DATA_DIRECTORY.
/// </summary>
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);
}
/// <summary>
/// </summary>
/// <returns></returns>
public override string ToString()
{
if (this.IsNull) return "NULL";
return String.Format("RVA = {0}, size = 0x{1}", virtAddr, size.ToString("X"));
}
}
}
|