public AssemblyBytes(Stream s) { node = s.ReadClass(ref FileFormat); // Widen any nodes to the width of their children node.CallBack(n => { if (n.Children.Any()) { n.Start = Math.Min(n.Start, n.Children.Min(c => c.Start)); n.End = Math.Max(n.End, n.Children.Max(c => c.End)); } }); // Order child nodes by index, expected for Heaps and sections node.CallBack(n => { n.Children = n.Children.OrderBy(c => c.Start).ToList(); }); FindOverLength(s, node); node.CallBack(n => n.UseDelayedValueNode()); node.AssignPath(); node.CallBack(CodeNode.AssignLink); }
public CodeNode Read(Stream stream) { CodeNode rva; Node = new CodeNode { (rva = stream.ReadStruct(out RVA, nameof(RVA))), stream.ReadClass(ref ImplFlags, nameof(ImplFlags)), stream.ReadClass(ref Flags, nameof(Flags)), stream.ReadClass(ref Name, nameof(Name)), stream.ReadClass(ref Signature, nameof(Signature)), stream.ReadClass(ref ParamList, nameof(ParamList)), }; rva.DelayedValueNode = () => new DefaultValueNode( rva.Value, RVA > 0 ? Singletons.Instance.MethodsByRVA[RVA].Node : null); return Node; }
public CodeNode Read(Stream stream) { Node = new CodeNode { stream.ReadStruct(out Offset, nameof(Offset)), stream.ReadStruct(out Flags, nameof(Flags)), stream.ReadClass(ref Name, nameof(Name)), stream.ReadClass(ref Implementation, nameof(Implementation)), }; Section section = Singletons.Instance.TildeStream.Section; section.ReadNode(strm => { section.Reposition(strm, section.CLIHeader.Resources.RVA + Offset); ResourceEntry entry = null; return stream.ReadClass(ref entry); }); return Node; }