/// <summary> /// Creates a hot heap instance /// </summary> /// <param name="version">Hot heap version</param> public static HotHeap Create(HotHeapVersion version) { switch (version) { case HotHeapVersion.CLR20: return new HotHeap20(); case HotHeapVersion.CLR40: return new HotHeap40(); default: throw new ArgumentException("Invalid version"); } }
/// <summary> /// Creates a <see cref="HotStream"/> instance /// </summary> /// <param name="version">Hot heap version</param> /// <param name="imageStream">Heap stream</param> /// <param name="streamHeader">Stream header info</param> /// <param name="fullStream">Stream for the full PE file</param> /// <param name="baseOffset">Offset in <paramref name="fullStream"/> where the data starts</param> /// <returns>A <see cref="HotStream"/> instance or <c>null</c> if <paramref name="version"/> /// is invalid</returns> public static HotStream Create(HotHeapVersion version, IImageStream imageStream, StreamHeader streamHeader, IImageStream fullStream, FileOffset baseOffset) { switch (version) { case HotHeapVersion.CLR20: return new HotStreamCLR20(imageStream, streamHeader, fullStream, baseOffset); case HotHeapVersion.CLR40: return new HotStreamCLR40(imageStream, streamHeader, fullStream, baseOffset); default: return null; } }
/// <summary> /// Creates a <see cref="HotStream" /> instance /// </summary> /// <param name="version">Hot heap version</param> /// <param name="imageStream">Heap stream</param> /// <param name="streamHeader">Stream header info</param> /// <param name="fullStream">Stream for the full PE file</param> /// <param name="baseOffset">Offset in <paramref name="fullStream" /> where the data starts</param> /// <returns> /// A <see cref="HotStream" /> instance or <c>null</c> if <paramref name="version" /> /// is invalid /// </returns> public static HotStream Create(HotHeapVersion version, IImageStream imageStream, StreamHeader streamHeader, IImageStream fullStream, FileOffset baseOffset) { switch (version) { case HotHeapVersion.CLR20: return(new HotStreamCLR20(imageStream, streamHeader, fullStream, baseOffset)); case HotHeapVersion.CLR40: return(new HotStreamCLR40(imageStream, streamHeader, fullStream, baseOffset)); default: return(null); } }
/// <summary> /// Creates a hot heap instance /// </summary> /// <param name="metadata">Metadata owner</param> /// <param name="version">Hot heap version</param> public static HotHeap Create(MetaData metadata, HotHeapVersion version) { switch (version) { case HotHeapVersion.CLR20: return(new HotHeap20(metadata)); case HotHeapVersion.CLR40: return(new HotHeap40(metadata)); default: throw new ArgumentException("Invalid version"); } }
/// <summary> /// Constructor /// </summary> /// <param name="version">Hot heap version</param> /// <param name="mdTable">The MD table</param> internal HotTable(HotHeapVersion version, IMDTable mdTable) { this.mdTable = mdTable; this.version = version; switch (version) { case HotHeapVersion.CLR20: hotTableHeaderSize = 0x12; break; case HotHeapVersion.CLR40: hotTableHeaderSize = 0x16; break; default: throw new ArgumentException("Invalid hot heap version"); } this.alignedHotTableHeaderSize = Utils.AlignUp(this.hotTableHeaderSize, HT_ALIGNMENT); }