コード例 #1
0
        public AssemblyReference ImportAssembly(IAssemblyDescriptor assemblyInfo)
        {
            var table     = _tableStreamBuffer.GetTable <AssemblyReference>();
            var reference = table.FirstOrDefault(x => _signatureComparer.MatchAssemblies(x, assemblyInfo));

            if (reference == null)
            {
                table.Add(reference = new AssemblyReference(assemblyInfo));
            }
            return(reference);
        }
コード例 #2
0
        private static void VerifyImportedReference(TableStream tableStream, MemberReference reference, MemberReference newReference)
        {
            Assert.AreNotSame(reference, newReference,
                              "Imported reference is the same as original.");

            Assert.IsTrue(_comparer.MatchMembers(reference, newReference),
                          "Imported reference does not match original.");

            Assert.IsTrue(tableStream.GetTable <MemberReference>().Contains(newReference),
                          "Imported reference not added to table.");

            Assert.IsTrue(tableStream.GetTable <TypeReference>().Contains(newReference.DeclaringType),
                          "Imported reference's declaring type not added to table.");
        }
コード例 #3
0
 protected override PropertyPtr ReadMember(MetadataToken token, ReadingContext context)
 {
     return(new PropertyPtr(Header, token, new MetadataRow <uint>()
     {
         Column1 = context.Reader.ReadIndex(TableStream.GetTable <PropertyDefinition>().IndexSize)
     }));
 }
コード例 #4
0
        public override uint GetElementByteCount()
        {
            var definitionTable = TableStream.GetTable <TypeDefinition>();

            return((uint)definitionTable.IndexSize +
                   (uint)definitionTable.IndexSize);
        }
コード例 #5
0
 public override uint GetElementByteCount()
 {
     return(sizeof(ushort) +
            (uint)TableStream.GetIndexEncoder(CodedIndex.MemberForwarded).IndexSize +
            (uint)TableStream.StringIndexSize +
            (uint)TableStream.GetTable <ModuleReference>().IndexSize);
 }
コード例 #6
0
 protected override MetadataRow <uint> ReadRow(ReadingContext context, MetadataToken token)
 {
     return(new MetadataRow <uint>(token)
     {
         Column1 = context.Reader.ReadIndex(TableStream.GetTable(MetadataTokenType.Field).IndexSize)
     });
 }
コード例 #7
0
        protected override void WriteRow(WritingContext context, MetadataRow <uint, uint> row)
        {
            var writer = context.Writer;

            writer.WriteIndex(TableStream.GetTable(MetadataTokenType.TypeDef).IndexSize, row.Column1);
            writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).IndexSize, row.Column2);
        }
コード例 #8
0
ファイル: AssemblyRefOs.cs プロジェクト: micax/AsmResolver
 public override uint GetElementByteCount()
 {
     return(sizeof(uint) +
            sizeof(uint) +
            sizeof(uint) +
            (uint)TableStream.GetTable <AssemblyReference>().IndexSize);
 }
コード例 #9
0
ファイル: FieldRvaTable.cs プロジェクト: zsr2531/AsmResolver
        protected override void WriteRow(WritingContext context, MetadataRow <DataSegment, uint> row)
        {
            var writer = context.Writer;

            writer.WriteUInt32((uint)row.Column1.GetRva(context.Assembly));
            writer.WriteIndex(TableStream.GetTable(MetadataTokenType.Field).IndexSize, row.Column2);
        }
コード例 #10
0
        protected override void WriteRow(WritingContext context, MetadataRow <uint, uint> row)
        {
            var writer = context.Writer;

            writer.WriteIndex(TableStream.GetTable(MetadataTokenType.Method).IndexSize, row.Column1);
            writer.WriteIndex(TableStream.BlobIndexSize, row.Column2);
        }
コード例 #11
0
ファイル: MethodSemanticsTable.cs プロジェクト: xuhaoa/WinPIT
        protected override void WriteRow(WritingContext context, MetadataRow <MethodSemanticsAttributes, uint, uint> row)
        {
            var writer = context.Writer;

            writer.WriteUInt16((ushort)row.Column1);
            writer.WriteIndex(TableStream.GetTable(MetadataTokenType.Method).IndexSize, row.Column2);
            writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.HasSemantics).IndexSize, row.Column3);
        }
コード例 #12
0
        protected override void WriteMember(WritingContext context, AssemblyRefProcessor member)
        {
            var writer = context.Writer;
            var row    = member.MetadataRow;

            writer.WriteUInt32(row.Column1);
            writer.WriteIndex(TableStream.GetTable <AssemblyReference>().IndexSize, row.Column2);
        }
コード例 #13
0
        protected override void WriteMember(WritingContext context, MethodSpecification member)
        {
            var writer = context.Writer;
            var row    = member.MetadataRow;

            writer.WriteIndex(TableStream.GetTable <MethodDefinition>().IndexSize, row.Column1);
            writer.WriteIndex(TableStream.BlobIndexSize, row.Column2);
        }
コード例 #14
0
        protected override void WriteMember(WritingContext context, InterfaceImplementation member)
        {
            var writer = context.Writer;
            var row    = member.MetadataRow;

            writer.WriteIndex(TableStream.GetTable <TypeDefinition>().IndexSize, row.Column1);
            writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).IndexSize, row.Column2);
        }
コード例 #15
0
        protected override void WriteMember(WritingContext context, PropertyMap member)
        {
            var writer = context.Writer;
            var row    = member.MetadataRow;

            writer.WriteIndex(TableStream.GetTable <TypeDefinition>().IndexSize, row.Column1);
            writer.WriteIndex(TableStream.GetTable <PropertyDefinition>().IndexSize, row.Column2);
        }
コード例 #16
0
        public override uint GetElementByteCount()
        {
            var encoder = TableStream.GetIndexEncoder(CodedIndex.MethodDefOrRef);

            return((uint)TableStream.GetTable <TypeDefinition>().IndexSize +
                   (uint)encoder.IndexSize +
                   (uint)encoder.IndexSize);
        }
コード例 #17
0
ファイル: NestedClassTable.cs プロジェクト: xuhaoa/WinPIT
        protected override void WriteRow(WritingContext context, MetadataRow <uint, uint> row)
        {
            var writer          = context.Writer;
            var definitionTable = TableStream.GetTable(MetadataTokenType.TypeDef);

            writer.WriteIndex(definitionTable.IndexSize, row.Column1);
            writer.WriteIndex(definitionTable.IndexSize, row.Column2);
        }
コード例 #18
0
        protected override void WriteRow(WritingContext context, MetadataRow <ushort, uint, uint> row)
        {
            var writer = context.Writer;

            writer.WriteUInt16(row.Column1);
            writer.WriteUInt32(row.Column2);
            writer.WriteIndex(TableStream.GetTable(MetadataTokenType.TypeDef).IndexSize, row.Column3);
        }
コード例 #19
0
ファイル: FieldRva.cs プロジェクト: micax/AsmResolver
        protected override void WriteMember(WritingContext context, FieldRva member)
        {
            var writer = context.Writer;
            var row    = member.MetadataRow;

            writer.WriteUInt32(row.Column1);
            writer.WriteIndex(TableStream.GetTable <FieldDefinition>().IndexSize, row.Column2);
        }
コード例 #20
0
        protected override void WriteMember(WritingContext context, GenericParameterConstraint member)
        {
            var writer = context.Writer;
            var row    = member.MetadataRow;

            writer.WriteIndex(TableStream.GetTable <GenericParameter>().IndexSize, row.Column1);
            writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).IndexSize, row.Column2);
        }
コード例 #21
0
ファイル: MethodDefinition.cs プロジェクト: micax/AsmResolver
 public override uint GetElementByteCount()
 {
     return(sizeof(uint) +                                                 // Rva
            sizeof(ushort) +                                               // ImplAttrbibutes
            sizeof(ushort) +                                               // Attributes
            (uint)TableStream.StringIndexSize +                            // Name
            (uint)TableStream.BlobIndexSize +                              // Signature
            (uint)TableStream.GetTable <ParameterDefinition>().IndexSize); // ParamList
 }
コード例 #22
0
ファイル: TypeDefinition.cs プロジェクト: micax/AsmResolver
 public override uint GetElementByteCount()
 {
     return(sizeof(uint) +                                                         // Attributes
            (uint)TableStream.StringIndexSize +                                    // Name
            (uint)TableStream.StringIndexSize +                                    // Namespace
            (uint)TableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).IndexSize + // BaseType
            (uint)TableStream.GetTable <FieldDefinition>().IndexSize +             // FieldList
            (uint)TableStream.GetTable <MethodDefinition>().IndexSize);            // MethodList
 }
コード例 #23
0
        protected override void WriteMember(WritingContext context, NestedClass member)
        {
            var writer          = context.Writer;
            var row             = member.MetadataRow;
            var definitionTable = TableStream.GetTable <TypeDefinition>();

            writer.WriteIndex(definitionTable.IndexSize, row.Column1);
            writer.WriteIndex(definitionTable.IndexSize, row.Column2);
        }
コード例 #24
0
        protected override void WriteRow(WritingContext context, MetadataRow <ImplementationMapAttributes, uint, uint, uint> row)
        {
            var writer = context.Writer;

            writer.WriteUInt16((ushort)row.Column1);
            writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.MemberForwarded).IndexSize, row.Column2);
            writer.WriteIndex(TableStream.StringIndexSize, row.Column3);
            writer.WriteIndex(TableStream.GetTable(MetadataTokenType.ModuleRef).IndexSize, row.Column4);
        }
コード例 #25
0
        protected override void WriteMember(WritingContext context, MethodSemantics member)
        {
            var writer = context.Writer;
            var row    = member.MetadataRow;

            writer.WriteUInt16(row.Column1);
            writer.WriteIndex(TableStream.GetTable <MethodDefinition>().IndexSize, row.Column2);
            writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.HasSemantics).IndexSize, row.Column3);
        }
コード例 #26
0
ファイル: ClassLayout.cs プロジェクト: micax/AsmResolver
        protected override void WriteMember(WritingContext context, ClassLayout member)
        {
            var writer = context.Writer;
            var row    = member.MetadataRow;

            writer.WriteUInt16(row.Column1);
            writer.WriteUInt32(row.Column2);
            writer.WriteIndex(TableStream.GetTable <TypeDefinition>().IndexSize, row.Column3);
        }
コード例 #27
0
ファイル: FieldRvaTable.cs プロジェクト: xuhaoa/WinPIT
        private int GetDataSize(uint fieldRid)
        {
            var fieldTable = (FieldDefinitionTable)TableStream.GetTable(MetadataTokenType.Field);
            var blobReader = TableStream.MetadataHeader.GetStream <BlobStream>().CreateBlobReader(fieldTable[(int)(fieldRid - 1)].Column3);

            blobReader.ReadByte();
            var elementType = (ElementType)blobReader.ReadByte();

            switch (elementType)
            {
            case ElementType.Boolean:
            case ElementType.I1:
            case ElementType.U1:
                return(sizeof(byte));

            case ElementType.I2:
            case ElementType.U2:
                return(sizeof(ushort));

            case ElementType.I4:
            case ElementType.U4:
            case ElementType.R4:
                return(sizeof(uint));

            case ElementType.I8:
            case ElementType.U8:
            case ElementType.R8:
                return(sizeof(ulong));

            case ElementType.Class:
            case ElementType.ValueType:
                uint codedIndex;
                if (!blobReader.TryReadCompressedUInt32(out codedIndex))
                {
                    return(0);
                }
                var typeToken = TableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).DecodeIndex(codedIndex);
                if (typeToken.TokenType == MetadataTokenType.TypeDef)
                {
                    var classLayoutTable = (ClassLayoutTable)TableStream.GetTable(MetadataTokenType.ClassLayout);
                    var row = classLayoutTable.GetRowByKey(2, typeToken.Rid);
                    if (row != null)
                    {
                        return((int)row.Column2);
                    }
                }

                return(0);

            case ElementType.I:
            case ElementType.U:
            // TODO;
            default:
                return(0);
            }
        }
コード例 #28
0
        protected override GenericParameterConstraint ReadMember(MetadataToken token, ReadingContext context)
        {
            var reader = context.Reader;

            return(new GenericParameterConstraint(Header, token, new MetadataRow <uint, uint>()
            {
                Column1 = reader.ReadIndex(TableStream.GetTable <GenericParameter>().IndexSize),
                Column2 = reader.ReadIndex(TableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).IndexSize)
            }));
        }
コード例 #29
0
        protected override void WriteMember(WritingContext context, PInvokeImplementation member)
        {
            var writer = context.Writer;
            var row    = member.MetadataRow;

            writer.WriteUInt16(row.Column1);
            writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.MemberForwarded).IndexSize, row.Column2);
            writer.WriteIndex(TableStream.StringIndexSize, row.Column3);
            writer.WriteIndex(TableStream.GetTable <ModuleReference>().IndexSize, row.Column4);
        }
コード例 #30
0
ファイル: FieldRva.cs プロジェクト: micax/AsmResolver
        protected override FieldRva ReadMember(MetadataToken token, ReadingContext context)
        {
            var reader = context.Reader;

            return(new FieldRva(Header, token, new MetadataRow <uint, uint>()
            {
                Column1 = reader.ReadUInt32(),
                Column2 = reader.ReadIndex(TableStream.GetTable <FieldDefinition>().IndexSize)
            }));
        }