Ejemplo n.º 1
0
        public InstructionReaderDump(System.IO.Stream dump)
        {
            // header(type, name.Length, il.Length)
            byte[] header = new byte[sizeof(byte) + sizeof(int) * 2];
            dump.Read(header, 0, header.Length);
            IBinaryReader headerReader = new BinaryReader(header);

            Type = (Context.OperandReaderContextType)headerReader.ReadByte();
            byte[] nameBytes = new byte[headerReader.ReadInt()];
            ilBytes = new byte[headerReader.ReadInt()];
            // data
            dump.Read(nameBytes, 0, nameBytes.Length);
            dump.Read(ilBytes, 0, ilBytes.Length);
            //
            Name     = DumpHelper.GetString(nameBytes);
            metadata = DumpHelper.ReadMedatataItems(dump).ToArray();
            DumpHelper.Read(ref @this, dump);
            DumpHelper.Read(ref arguments, dump);
            DumpHelper.Read(ref variables, dump);
            DumpHelper.Read(methods.tokens, dump);
            DumpHelper.Read(fields.tokens, dump);
            DumpHelper.Read(types.tokens, dump);
            DumpHelper.Read(members.tokens, dump);
            DumpHelper.Read(strings.tokens, dump);
            DumpHelper.Read(signatures.tokens, dump);
        }
Ejemplo n.º 2
0
        //
        internal static IEnumerable <Readers.IMetadataItem> ReadMedatataItems(System.IO.Stream stream)
        {
            int count = DumpHelper.ReadInt(stream);

            for (int i = 0; i < count; i++)
            {
                yield return(ReadMedatataItem(stream));
            }
        }
Ejemplo n.º 3
0
        //
        internal static void WriteMedatataItems(System.IO.Stream stream, IEnumerable <Readers.IMetadataItem> metadata)
        {
            var items = metadata.ToArray();

            DumpHelper.Write(items.Length, stream); // count
            for (int i = 0; i < items.Length; i++)
            {
                WriteMedatataItem(stream, items[i]);
            }
        }
Ejemplo n.º 4
0
 static void WriteMetadataItemValue(System.IO.Stream stream, Readers.IMetadataItem item)
 {
     DumpHelper.Write(item.Value is int? 1 : 0, stream);
     if (item.Value is int)
     {
         DumpHelper.Write((int)item.Value, stream);
     }
     else
     {
         DumpHelper.Write((item.Value ?? string.Empty).ToString(), stream);
     }
 }
Ejemplo n.º 5
0
 static void WriteMedatataItem(System.IO.Stream stream, Readers.IMetadataItem item)
 {
     DumpHelper.Write(item.HasChildren ? 1 : 0, stream); // hasChildren
     DumpHelper.Write(item.Name, stream);                // name
     if (!item.HasChildren)
     {
         WriteMetadataItemValue(stream, item);
     }
     else
     {
         WriteMedatataItems(stream, item.Children);
     }
 }
Ejemplo n.º 6
0
 //
 public static void Write(System.IO.Stream stream, Context.IOperandReaderContext context)
 {
     // type
     stream.Write(new byte[] { (byte)context.Type }, 0, 1);
     // name
     byte[] nameBytes = null;
     DumpHelper.GetBytes(ref nameBytes, context.Name);
     DumpHelper.Write(nameBytes.Length, stream);
     // IL
     byte[] ILBytes = context.GetIL();
     DumpHelper.Write(ILBytes.Length, stream);
     // context data
     stream.Write(nameBytes, 0, nameBytes.Length);
     stream.Write(ILBytes, 0, ILBytes.Length);
     // meta
     DumpHelper.WriteMedatataItems(stream, context.GetMetadata());
     // body
     context.Dump(stream);
 }