/// <summary> /// Reads a single method definition row from an input stream. /// </summary> /// <param name="reader">The input stream.</param> /// <param name="layout">The layout of the method definition table.</param> /// <param name="referenceResolver">The resolver to use for resolving the virtual address of the method body.</param> /// <returns>The row.</returns> public static MethodDefinitionRow FromReader(IBinaryStreamReader reader, TableLayout layout, ISegmentReferenceResolver referenceResolver) { return(new MethodDefinitionRow( referenceResolver.GetReferenceToRva(reader.ReadUInt32()), (MethodImplAttributes)reader.ReadUInt16(), (MethodAttributes)reader.ReadUInt16(), reader.ReadIndex((IndexSize)layout.Columns[3].Size), reader.ReadIndex((IndexSize)layout.Columns[4].Size), reader.ReadIndex((IndexSize)layout.Columns[5].Size))); }
/// <inheritdoc /> public IDebugDataSegment ReadDebugData(DebugDataType type, uint rva, uint size) { var reference = _resolver.GetReferenceToRva(rva); if (reference is null || !reference.CanRead) { return(null); } var reader = reference.CreateReader(); reader.ChangeSize(size); return(new CustomDebugDataSegment(type, DataSegment.FromReader(reader))); }
/// <summary> /// Reads a single field RVA row from an input stream. /// </summary> /// <param name="reader">The input stream.</param> /// <param name="layout">The layout of the field RVA table.</param> /// <param name="referenceResolver"></param> /// <returns>The row.</returns> public static FieldRvaRow FromReader(IBinaryStreamReader reader, TableLayout layout, ISegmentReferenceResolver referenceResolver) { return(new FieldRvaRow( referenceResolver.GetReferenceToRva(reader.ReadUInt32()), reader.ReadIndex((IndexSize)layout.Columns[1].Size))); }