2 * Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>
\r
7 using System.Runtime.InteropServices;
\r
9 using Mono.PEToolkit.Metadata;
\r
11 namespace Mono.PEToolkit {
\r
14 public enum CorFlags : uint {
\r
16 /// COMIMAGE_FLAGS_ILONLY
\r
18 ILONLY = 0x00000001,
\r
21 /// COMIMAGE_FLAGS_32BITREQUIRED
\r
23 REQUIRED_32BIT = 0x00000002,
\r
26 /// COMIMAGE_FLAGS_IL_LIBRARY
\r
28 IL_LIBRARY = 0x00000004,
\r
31 /// COMIMAGE_FLAGS_TRACKDEBUGDATA
\r
33 TRACKDEBUGDATA = 0x00010000,
\r
38 /// CLR 2.0 header structure.
\r
39 /// IMAGE_COR20_HEADER
\r
41 public class CorHeader {
\r
42 // Header versioning
\r
44 internal short runtimeMaj;
\r
45 internal short runtimeMin;
\r
47 // Symbol table and startup information.
\r
48 internal DataDir meta;
\r
49 internal CorFlags flags;
\r
50 internal uint entryTok;
\r
52 // Binding information.
\r
53 internal DataDir rsrc;
\r
54 internal DataDir strongSig;
\r
56 // Regular fixup and binding information.
\r
57 internal DataDir codeManTab;
\r
58 internal DataDir vtab;
\r
59 internal DataDir jumps;
\r
61 // Managed Native Code.
\r
62 internal DataDir eeInfo;
\r
63 internal DataDir helper;
\r
64 internal DataDir dynInfo;
\r
65 internal DataDir delayInfo;
\r
66 internal DataDir modImg;
\r
67 internal DataDir extFixups;
\r
68 internal DataDir ridMap;
\r
69 internal DataDir dbgMap;
\r
72 internal DataDir ipMap;
\r
88 public short MajorRuntimeVersion {
\r
97 public short MinorRuntimeVersion {
\r
102 runtimeMin = value;
\r
106 public string RuntimeVersion {
\r
108 return String.Format("{0}.{1}", runtimeMaj, runtimeMin);
\r
112 public DataDir MetaData {
\r
121 public CorFlags Flags {
\r
130 public MDToken EntryPointToken {
\r
139 public DataDir Resources {
\r
148 public DataDir StrongNameSignature {
\r
157 public DataDir CodeManagerTable {
\r
162 codeManTab = value;
\r
166 public DataDir VTableFixups {
\r
175 public DataDir ExportAddressTableJumps {
\r
185 public DataDir EEInfoTable {
\r
194 public DataDir HelperTable {
\r
203 public DataDir DynamicInfo {
\r
212 public DataDir DelayLoadInfo {
\r
221 public DataDir ModuleImage {
\r
230 public DataDir ExternalFixups {
\r
239 public DataDir RidMap {
\r
248 public DataDir DebugMap {
\r
258 public DataDir IPMap {
\r
268 public void Read(BinaryReader reader)
\r
270 // Header versioning
\r
271 cb = reader.ReadUInt32 ();
\r
273 runtimeMaj = reader.ReadInt16 ();
\r
274 runtimeMin = reader.ReadInt16 ();
\r
277 // Symbol table and startup information.
\r
278 meta = new DataDir (reader);
\r
279 flags = (CorFlags) reader.ReadUInt32 ();
\r
280 entryTok = reader.ReadUInt32 ();
\r
282 // Binding information.
\r
283 rsrc = new DataDir (reader);
\r
284 strongSig = new DataDir (reader);
\r
286 // Regular fixup and binding information.
\r
287 codeManTab = new DataDir (reader);
\r
288 vtab = new DataDir (reader);
\r
289 jumps = new DataDir (reader);
\r
291 // Managed Native Code.
\r
292 eeInfo = new DataDir (reader);
\r
293 helper = new DataDir (reader);
\r
294 dynInfo = new DataDir (reader);
\r
295 delayInfo = new DataDir (reader);
\r
296 modImg = new DataDir (reader);
\r
297 extFixups = new DataDir (reader);
\r
298 ridMap = new DataDir (reader);
\r
299 dbgMap = new DataDir (reader);
\r
302 ipMap = new DataDir (reader);
\r
305 public void Write (BinaryWriter writer)
\r
307 // Header versioning
\r
310 writer.Write (runtimeMaj);
\r
311 writer.Write (runtimeMin);
\r
313 // Symbol table and startup information.
\r
314 meta.Write (writer);
\r
315 writer.Write ((uint)flags);
\r
316 writer.Write (entryTok);
\r
318 // Binding information.
\r
319 rsrc.Write (writer);
\r
320 strongSig.Write (writer);
\r
322 // Regular fixup and binding information.
\r
323 codeManTab.Write (writer);
\r
324 vtab.Write (writer);
\r
325 jumps.Write (writer);
\r
327 // Managed Native Code.
\r
328 eeInfo.Write (writer);
\r
329 helper.Write (writer);
\r
330 dynInfo.Write (writer);
\r
331 delayInfo.Write (writer);
\r
332 modImg.Write (writer);
\r
333 extFixups.Write (writer);
\r
334 ridMap.Write (writer);
\r
335 dbgMap.Write (writer);
\r
338 ipMap.Write (writer);
\r
342 public void Dump(TextWriter writer)
\r
344 writer.WriteLine(String.Format (
\r
345 "Header Size : {0}" + Environment.NewLine +
\r
346 "Runtime Version : {1}" + Environment.NewLine +
\r
347 "MetaData Root : {2}" + Environment.NewLine +
\r
348 "Flags : {3}" + Environment.NewLine +
\r
349 "Entry Point Token : {4}" + Environment.NewLine +
\r
350 "Resources : {5}" + Environment.NewLine +
\r
351 "Strong Name Signature : {6}" + Environment.NewLine +
\r
352 "Code Manager Table : {7}" + Environment.NewLine +
\r
353 "VTable Fixups : {8}" + Environment.NewLine +
\r
354 "Export Address Table Jumps : {9}" + Environment.NewLine +
\r
355 "EE Info Table : {10}" + Environment.NewLine +
\r
356 "Helper Table : {11}" + Environment.NewLine +
\r
357 "Dynamic Info : {12}" + Environment.NewLine +
\r
358 "Delay Load Info : {13}" + Environment.NewLine +
\r
359 "Module Image : {14}" + Environment.NewLine +
\r
360 "External Fixups : {15}" + Environment.NewLine +
\r
361 "Rid Map : {16}" + Environment.NewLine +
\r
362 "Debug Map : {17}" + Environment.NewLine +
\r
363 "IP Map : {18}" + Environment.NewLine +
\r
364 "Runtime Major : {19}" + Environment.NewLine +
\r
365 "Runtime Minor : {20}" + Environment.NewLine,
\r
368 meta, null, EntryPointToken,
\r
370 codeManTab, vtab, jumps,
\r
371 eeInfo, helper, dynInfo, delayInfo, modImg, extFixups,
\r
372 ridMap, dbgMap, ipMap, MajorRuntimeVersion, MinorRuntimeVersion
\r
379 /// <returns></returns>
\r
380 public override string ToString() {
\r
381 StringWriter sw = new StringWriter();
\r
383 return sw.ToString();
\r