Esempio n. 1
0
 public FieldEntry(MetadataDirectory directory, FieldMetadataTableRow row)
 {
     this.FileOffset = string.Format("0x{0:x}", row.FileOffset);
     this.Name       = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.Flags      = row.Flags.ToString();
     this.Signiture  = string.Format("0x{0:x}", row.Signiture.Value);
 }
 public ConstantEntry(MetadataDirectory directory, ConstantMetadataTableRow row)
 {
     this.FileOffset = string.Format("0x{0:x}", row.FileOffset);
     this.Parent     = row.Parent.ToString();
     this.Type       = row.Type.ToString();
     this.Value      = string.Format("0x{0:x}", row.Value);
 }
Esempio n. 3
0
 public override void ReadDirectories(PeCoffFile containingFile)
 {
     _metadata = new MetadataDirectory(
         containingFile,
         containingFile.GetAddressFromRVA(this.Header.MetaData.VirtualAddress)
         );
 }
 public DeclSecurityEntry(MetadataDirectory directory, DeclSecurityMetadataTableRow row)
 {
     this.FileOffset    = string.Format("0x{0:x}", row.FileOffset);
     this.Action        = string.Format("0x:{0:x}", row.Action);
     this.Parent        = row.Parent.ToString();
     this.PermissionSet = string.Format("0x{0:x}", row.PermissionSet);
 }
        private void UpdateNetDirectory(EmitContext context)
        {
            var assembly = NetDirectory.Assembly;

            NetDirectory.MetadataDirectory.VirtualAddress = (uint)assembly.FileOffsetToRva(MetadataDirectory.StartOffset);
            NetDirectory.MetadataDirectory.Size           = MetadataDirectory.GetPhysicalLength();

            if (NetDirectory.ResourcesManifest != null)
            {
                NetDirectory.ResourcesDirectory.VirtualAddress = (uint)assembly.FileOffsetToRva(NetDirectory.ResourcesManifest.StartOffset);
                NetDirectory.ResourcesDirectory.Size           = NetDirectory.ResourcesManifest.GetPhysicalLength();
            }

            if (NetDirectory.StrongNameData != null)
            {
                NetDirectory.StrongNameSignatureDirectory.VirtualAddress =
                    (uint)assembly.FileOffsetToRva(NetDirectory.StrongNameData.StartOffset);
                NetDirectory.StrongNameSignatureDirectory.Size = NetDirectory.StrongNameData.GetPhysicalLength();
            }

            if (VTableFixups != null)
            {
                NetDirectory.VTableFixupsDirectory.VirtualAddress =
                    (uint)assembly.FileOffsetToRva(VTableFixups.Directory.StartOffset);
                NetDirectory.VTableFixupsDirectory.Size = VTableFixups.Directory.GetPhysicalLength();
            }
        }
 public ClassLayoutEntry(MetadataDirectory directory, ClassLayoutMetadataTableRow row)
 {
     this.FileOffset  = string.Format("0x{0:x}", row.FileOffset);
     this.ClassSize   = string.Format("0x{0:x}", row.ClassSize);
     this.PackingSize = string.Format("0x{0:x}", row.PackingSize);
     this.Parent      = string.Format("0x{0:x}", row.Parent.Value);
 }
Esempio n. 7
0
 public EventEntry(MetadataDirectory directory, EventMetadataTableRow row)
 {
     this.FileOffset = string.Format("0x{0:x}", row.FileOffset);
     this.Name       = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.EventFlags = string.Format("0x{0:x}", row.EventFlags);
     this.EventType  = row.EventType.ToString();
 }
Esempio n. 8
0
 public FileEntry(MetadataDirectory directory, FileMetadataTableRow row)
 {
     this.FileOffset = string.Format("0x{0:x}", row.FileOffset);
     this.Name       = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.Flags      = string.Format("0x{0:x}", row.Flags);
     this.HashValue  = string.Format("0x{0:x}", row.HashValue);
 }
Esempio n. 9
0
 public TypeRefEntry(MetadataDirectory directory, TypeRefMetadataTableRow row)
 {
     this.FileOffset      = string.Format("0x{0:x}", row.FileOffset);
     this.Name            = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.Namespace       = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Namespace.Value);
     this.ResolutionScope = row.ResolutionScope.ToString();
 }
 public PropertyEntry(MetadataDirectory directory, PropertyMetadataTableRow row)
 {
     FileOffset = string.Format("0x{0:x}", row.FileOffset);
     Name       = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.NameIndex.Value);
     Attributes = string.Format("0x{0:x}", row.Attributes);
     Type       = string.Format("0x{0:x}", row.TypeIndex);
 }
Esempio n. 11
0
 public MethodImplEntry(MetadataDirectory directory, MethodImplMetadataTableRow row)
 {
     this.FileOffset        = string.Format("0x{0:x}", row.FileOffset);
     this.Class             = row.Class.Value.ToString();
     this.MethodBody        = row.MethodBody.ToString();
     this.MethodDecleration = row.MethodDeclaration.ToString();
 }
Esempio n. 12
0
 public MethodSemanticsEntry(MetadataDirectory directory, MethodSemanticsMetadataTableRow row)
 {
     this.FileOffset  = string.Format("0x{0:x}", row.FileOffset);
     this.Association = row.Association.ToString();
     this.Method      = row.Method.Value.ToString();
     this.Semantics   = string.Format("0x{0:x}", row.Semantics);
 }
 public MemberRefEntry(MetadataDirectory directory, MemberRefMetadataTableRow row)
 {
     this.FileOffset = string.Format("0x{0:x}", row.FileOffset);
     this.Name       = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.Class      = row.Class.ToString();
     this.Signiture  = string.Format("0x{0:x}", row.Signiture.Value);
 }
 public ManifestResourceEntry(MetadataDirectory directory, ManifestResourceMetadataTableRow row)
 {
     this.FileOffset     = string.Format("0x{0:x}", row.FileOffset);
     this.Name           = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.Flags          = string.Format("0x{0:x}", row.Flags);
     this.Implementation = row.Implementation.ToString();
     this.Offset         = string.Format("0x{0:x}", row.Offset);
 }
 public ImplMapEntry(MetadataDirectory directory, ImplMapMetadataTableRow row)
 {
     this.FileOffset    = string.Format("0x{0:x}", row.FileOffset);
     this.ImportName    = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.ImportName.Value);
     this.ImportScope   = row.ImportScope.Value.ToString();
     this.MappingFlags  = string.Format("0x:{0:x}", row.MappingFlags);
     this.MemberForward = row.MemberForward.ToString();
 }
 public GenricParamEntry(MetadataDirectory directory, GenericParamMetadataTableRow row)
 {
     this.FileOffset = string.Format("0x{0:x}", row.FileOffset);
     this.Name       = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.Flags      = string.Format("0x{0:x}", row.Flags);
     this.Number     = row.Number.ToString();
     this.Owner      = row.Owner.ToString();
 }
Esempio n. 17
0
 public ParamEntry(int index, MetadataDirectory directory, ParamMetadataTableRow row)
 {
     this.Index      = index;
     this.FileOffset = string.Format("0x{0:x}", row.FileOffset);
     this.Name       = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.Sequence   = row.Sequence.ToString();
     this.Flags      = string.Format("0x{0:x}", row.Flags);
 }
 public ModuleEntry(MetadataDirectory directory, ModuleMetadataTableRow row)
 {
     this.FileOffset = string.Format("0x{0:x}", row.FileOffset);
     this.Name       = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.EncBaseId  = row.EncBaseId.ToString();
     this.EncId      = row.EncId.ToString();
     this.Generation = row.Generation.ToString();
     this.Mvid       = ((GuidStream)directory.Streams[Streams.GuidStream]).GetGuid(row.Mvid).ToString();
 }
Esempio n. 19
0
        public StringStreamBenchmark()
        {
            PeCoffFile file = new PeCoffFile(TestFile, new TheBoxSoftware.FileSystem());

            file.Initialise();
            MetadataDirectory directory = file.GetMetadataDirectory();

            _stream = directory.Streams[Streams.StringStream] as StringStream;
        }
Esempio n. 20
0
        public override uint GetPhysicalLength()
        {
            var dirLength = MetadataDirectory.GetPhysicalLength();

            return(1 * sizeof(uint) +
                   2 * sizeof(ushort) +
                   1 * dirLength +
                   2 * sizeof(uint) +
                   6 * dirLength);
        }
Esempio n. 21
0
        public void WhenLoaded_GetMetadataDirectory_ReturnsMetadata()
        {
            PeCoffFile coffFile = new PeCoffFile(TestLibrary, new FileSystem());

            coffFile.Initialise();

            MetadataDirectory directory = coffFile.GetMetadataDirectory();

            Assert.IsNotNull(directory);
        }
Esempio n. 22
0
            public TypeDefBuilder(BuildReferences references, TypeDefMetadataTableRow fromRow)
            {
                _references = references;

                _assembly       = references.Assembly;
                _fromRow        = fromRow;
                _metadata       = references.Metadata;
                _map            = references.Map;
                _metadataStream = _metadata.GetMetadataStream();
            }
Esempio n. 23
0
 public TypeDefEntry(MetadataDirectory directory, TypeDefMetadataTableRow row)
 {
     this.Extends    = row.Extends.ToString();
     this.FieldsList = row.FieldList.ToString();
     this.FileOffset = string.Format("0x{0:x}", row.FileOffset);
     this.Flags      = string.Format("0x{0:x}", row.Flags);
     this.MethodList = row.MethodList.ToString();
     this.Name       = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.Namespace  = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Namespace.Value);
 }
Esempio n. 24
0
 public AssemblyRefEntry(MetadataDirectory directory, AssemblyRefMetadataTableRow row)
 {
     this.FileOffset       = string.Format("0x{0:x}", row.FileOffset);
     this.Name             = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.Version          = row.GetVersion().ToString();
     this.Culture          = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Culture.Value);
     this.HashValue        = row.HashValue.ToString();
     this.Flags            = row.Flags.ToString();
     this.PublicKeyOrToken = row.PublicKeyOrToken.ToString();
 }
        public SignatureBenchmark()
        {
            _file = new PeCoffFile(TestFile, new FileSystem());
            _file.Initialise();

            _metadata = _file.GetMetadataDirectory();

            BlobStream blob = (BlobStream)_metadata.Streams[Streams.BlobStream];

            _source = blob.GetRange(0, (uint)blob.GetLength()); // copy full length of stream
        }
 public MethodDefEntry(int index, MetadataDirectory directory, MethodMetadataTableRow row)
 {
     this.Index      = index;
     this.FileOffset = string.Format("0x{0:x}", row.FileOffset);
     this.Flags      = string.Format("0x{0:x}", row.Flags);
     this.ImplFlags  = string.Format("0x{0:x}", row.ImplFlags);
     this.Name       = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.ParamList  = string.Format("0x{0:x}", row.ParamList.Value);
     this.RVA        = string.Format("0x{0:x}", row.RVA);
     this.Signiture  = string.Format("0x{0:x}", row.Signiture.Value);
 }
Esempio n. 27
0
            public MethodDefBuilder(BuildReferences references, TypeDef container, MethodMetadataTableRow fromRow)
            {
                _metadata       = references.Metadata;
                _map            = references.Map;
                _assembly       = references.Assembly;
                _container      = container;
                _fromRow        = fromRow;
                _metadataStream = _metadata.Streams[Streams.MetadataStream] as MetadataStream;
                _blobStream     = _metadata.Streams[Streams.BlobStream] as BlobStream;

                _references = references;
            }
Esempio n. 28
0
        public override void Write(WritingContext context)
        {
            var writer = context.Writer;

            writer.WriteUInt32(Cb);
            writer.WriteUInt16(MajorRuntimeVersion);
            writer.WriteUInt16(MinorRuntimeVersion);
            MetadataDirectory.Write(context);
            writer.WriteUInt32((uint)Flags);
            writer.WriteUInt32(EntryPointToken);
            ResourcesDirectory.Write(context);
            StrongNameSignatureDirectory.Write(context);
            CodeManagerTableDirectory.Write(context);
            VTableFixupsDirectory.Write(context);
            ExportAddressTableJumpsDirectory.Write(context);
            ManagedNativeHeaderDirectory.Write(context);
        }
Esempio n. 29
0
        /// <summary>
        /// Prints all the type spec Signatures to the Trace stream
        /// </summary>
        public void PrintTypeSpecSignatures()
        {
            // Read the metadata from the file and populate the entries
            MetadataDirectory metadata       = this.File.GetMetadataDirectory();
            MetadataStream    metadataStream = (MetadataStream)metadata.Streams[Streams.MetadataStream];
            int count = 0;

            //
            StringStream stringStream = (StringStream)metadata.Streams[Streams.StringStream];

            if (metadataStream.Tables.ContainsKey(MetadataTables.TypeSpec))
            {
                foreach (TypeSpecMetadataTableRow typeSpecRow in metadataStream.Tables[MetadataTables.TypeSpec])
                {
                    TypeSpec type = TypeSpec.CreateFromMetadata(this, metadata, typeSpecRow);
                    type.Signiture.PrintTokens();
                }
            }
        }
Esempio n. 30
0
        /// <summary>
        /// Factor method for instantiating and populating MemberRef instances from
        /// Metadata.
        /// </summary>
        /// <param name="assembly">The assembly the reference is defined in.</param>
        /// <param name="metadata">The metadata the reference is detailed in.</param>
        /// <param name="row">The actual metadata row with the details of the member.</param>
        /// <returns>An instantiated MemberRef instance.</returns>
        internal static MemberRef CreateFromMetadata(
            AssemblyDef assembly,
            MetadataDirectory metadata,
            MemberRefMetadataTableRow row)
        {
            MemberRef memberRef = new MemberRef();

            memberRef.UniqueId      = assembly.CreateUniqueId();
            memberRef.Name          = assembly.StringStream.GetString(row.Name.Value);
            memberRef.SignitureBlob = row.Signiture;
            memberRef.Assembly      = assembly;
            memberRef._class        = row.Class;

            // These methods of detecting different method types are not
            // infalable. A user can create a method for example that starts iwth
            // get_, set_ or op_. This best detail is stored in the MethodSemantics
            // table AND we will need to load that at some point :/
            memberRef.IsConstructor = memberRef.Name.StartsWith(".");
            memberRef.IsOperator    = memberRef.Name.StartsWith("op_");

            return(memberRef);
        }