当前位置: 首页>>代码示例>>C#>>正文


C# MemoryBlock.GetMemoryBlockAt方法代码示例

本文整理汇总了C#中System.Reflection.Internal.MemoryBlock.GetMemoryBlockAt方法的典型用法代码示例。如果您正苦于以下问题:C# MemoryBlock.GetMemoryBlockAt方法的具体用法?C# MemoryBlock.GetMemoryBlockAt怎么用?C# MemoryBlock.GetMemoryBlockAt使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在System.Reflection.Internal.MemoryBlock的用法示例。


在下文中一共展示了MemoryBlock.GetMemoryBlockAt方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: DocumentTableReader

        internal DocumentTableReader(
            int numberOfRows,
            int guidHeapRefSize,
            int blobHeapRefSize,
            MemoryBlock containingBlock,
            int containingBlockOffset)
        {
            NumberOfRows = numberOfRows;
            _isGuidHeapRefSizeSmall = guidHeapRefSize == 2;
            _isBlobHeapRefSizeSmall = blobHeapRefSize == 2;

            _hashAlgorithmOffset = NameOffset + blobHeapRefSize;
            _hashOffset = _hashAlgorithmOffset + guidHeapRefSize;
            _languageOffset = _hashOffset + blobHeapRefSize;
            RowSize = _languageOffset + guidHeapRefSize;

            Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, RowSize * numberOfRows);
        }
开发者ID:er0dr1guez,项目名称:corefx,代码行数:18,代码来源:Tables.Debug.cs

示例2: ModuleTableReader

 internal ModuleTableReader(
     int numberOfRows,
     int stringHeapRefSize,
     int guidHeapRefSize,
     MemoryBlock containingBlock,
     int containingBlockOffset
 )
 {
     this.NumberOfRows = numberOfRows;
     _IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
     _IsGUIDHeapRefSizeSmall = guidHeapRefSize == 2;
     _GenerationOffset = 0;
     _NameOffset = _GenerationOffset + sizeof(UInt16);
     _MVIdOffset = _NameOffset + stringHeapRefSize;
     _EnCIdOffset = _MVIdOffset + guidHeapRefSize;
     _EnCBaseIdOffset = _EnCIdOffset + guidHeapRefSize;
     this.RowSize = _EnCBaseIdOffset + guidHeapRefSize;
     this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, this.RowSize * (int)numberOfRows);
 }
开发者ID:jmhardison,项目名称:corefx,代码行数:19,代码来源:Tables.cs

示例3: EnCLogTableReader

        internal EnCLogTableReader(
            int numberOfRows,
            MemoryBlock containingBlock,
            int containingBlockOffset,
            MetadataStreamKind metadataStreamKind)
        {
            // EnC tables are not allowed in a compressed stream.
            // However when asked for a snapshot of the current metadata after an EnC change has been applied 
            // the CLR includes the EnCLog table into the snapshot (but not EnCMap). We pretend EnCLog is empty.
            this.NumberOfRows = (metadataStreamKind == MetadataStreamKind.Compressed) ? 0 : numberOfRows;

            _TokenOffset = 0;
            _FuncCodeOffset = _TokenOffset + sizeof(uint);
            this.RowSize = _FuncCodeOffset + sizeof(uint);
            this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, (int)(this.RowSize * numberOfRows));
        }
开发者ID:jmhardison,项目名称:corefx,代码行数:16,代码来源:Tables.cs

示例4: ReadFromMemoryBlock

        public unsafe void ReadFromMemoryBlock()
        {
            byte[] buffer = new byte[4] { 0, 1, 0, 2 };
            fixed (byte* bufferPtr = buffer)
            {
                var block = new MemoryBlock(bufferPtr, buffer.Length);

                Assert.Throws<BadImageFormatException>(() => block.PeekUInt32(Int32.MaxValue));
                Assert.Throws<BadImageFormatException>(() => block.PeekUInt32(-1));
                Assert.Throws<BadImageFormatException>(() => block.PeekUInt32(Int32.MinValue));
                Assert.Throws<BadImageFormatException>(() => block.PeekUInt32(4));
                Assert.Throws<BadImageFormatException>(() => block.PeekUInt32(1));
                Assert.Equal(0x02000100U, block.PeekUInt32(0));

                Assert.Throws<BadImageFormatException>(() => block.PeekUInt16(Int32.MaxValue));
                Assert.Throws<BadImageFormatException>(() => block.PeekUInt16(-1));
                Assert.Throws<BadImageFormatException>(() => block.PeekUInt16(Int32.MinValue));
                Assert.Throws<BadImageFormatException>(() => block.PeekUInt16(4));
                Assert.Equal(0x0200, block.PeekUInt16(2));

                int bytesRead;

                MetadataStringDecoder stringDecoder = MetadataStringDecoder.DefaultUTF8;
                Assert.Throws<BadImageFormatException>(() => block.PeekUtf8NullTerminated(Int32.MaxValue, null, stringDecoder, out bytesRead));
                Assert.Throws<BadImageFormatException>(() => block.PeekUtf8NullTerminated(-1, null, stringDecoder, out bytesRead));
                Assert.Throws<BadImageFormatException>(() => block.PeekUtf8NullTerminated(Int32.MinValue, null, stringDecoder, out bytesRead));
                Assert.Throws<BadImageFormatException>(() => block.PeekUtf8NullTerminated(5, null, stringDecoder, out bytesRead));

                Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(-1, 1));
                Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(1, -1));
                Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(0, -1));
                Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(-1, 0));
                Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(-Int32.MaxValue, Int32.MaxValue));
                Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(Int32.MaxValue, -Int32.MaxValue));
                Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(Int32.MaxValue, Int32.MaxValue));
                Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(block.Length, -1));
                Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(-1, block.Length));


                Assert.Equal("\u0001", block.PeekUtf8NullTerminated(1, null, stringDecoder, out bytesRead));
                Assert.Equal(bytesRead, 2);

                Assert.Equal("\u0002", block.PeekUtf8NullTerminated(3, null, stringDecoder, out bytesRead));
                Assert.Equal(bytesRead, 1);

                Assert.Equal("", block.PeekUtf8NullTerminated(4, null, stringDecoder, out bytesRead));
                Assert.Equal(bytesRead, 0);

                byte[] helloPrefix = Encoding.UTF8.GetBytes("Hello");

                Assert.Equal("Hello\u0001", block.PeekUtf8NullTerminated(1, helloPrefix, stringDecoder, out bytesRead));
                Assert.Equal(bytesRead, 2);

                Assert.Equal("Hello\u0002", block.PeekUtf8NullTerminated(3, helloPrefix, stringDecoder, out bytesRead));
                Assert.Equal(bytesRead, 1);

                Assert.Equal("Hello", block.PeekUtf8NullTerminated(4, helloPrefix, stringDecoder, out bytesRead));
                Assert.Equal(bytesRead, 0);
            }
        }
开发者ID:noahfalk,项目名称:corefx,代码行数:60,代码来源:BlobReaderTests.cs

示例5: FieldMarshalTableReader

        internal FieldMarshalTableReader(
            int numberOfRows,
            bool declaredSorted,
            int hasFieldMarshalRefSize,
            int blobHeapRefSize,
            MemoryBlock containingBlock,
            int containingBlockOffset
        )
        {
            this.NumberOfRows = numberOfRows;
            _IsHasFieldMarshalRefSizeSmall = hasFieldMarshalRefSize == 2;
            _IsBlobHeapRefSizeSmall = blobHeapRefSize == 2;
            _ParentOffset = 0;
            _NativeTypeOffset = _ParentOffset + hasFieldMarshalRefSize;
            this.RowSize = _NativeTypeOffset + blobHeapRefSize;
            this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, this.RowSize * numberOfRows);

            if (!declaredSorted && !CheckSorted())
            {
                Throw.TableNotSorted(TableIndex.FieldMarshal);
            }
        }
开发者ID:jmhardison,项目名称:corefx,代码行数:22,代码来源:Tables.cs

示例6: CustomAttributeTableReader

        internal CustomAttributeTableReader(
            int numberOfRows,
            bool declaredSorted,
            int hasCustomAttributeRefSize,
            int customAttributeTypeRefSize,
            int blobHeapRefSize,
            MemoryBlock containingBlock,
            int containingBlockOffset
        )
        {
            this.NumberOfRows = numberOfRows;
            _IsHasCustomAttributeRefSizeSmall = hasCustomAttributeRefSize == 2;
            _IsCustomAttributeTypeRefSizeSmall = customAttributeTypeRefSize == 2;
            _IsBlobHeapRefSizeSmall = blobHeapRefSize == 2;
            _ParentOffset = 0;
            _TypeOffset = _ParentOffset + hasCustomAttributeRefSize;
            _ValueOffset = _TypeOffset + customAttributeTypeRefSize;
            this.RowSize = _ValueOffset + blobHeapRefSize;
            this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, (int)(this.RowSize * numberOfRows));
            this.PtrTable = null;

            if (!declaredSorted && !CheckSorted())
            {
                this.PtrTable = this.Block.BuildPtrTable(
                    numberOfRows,
                    this.RowSize,
                    _ParentOffset,
                    _IsHasCustomAttributeRefSizeSmall);
            }
        }
开发者ID:jmhardison,项目名称:corefx,代码行数:30,代码来源:Tables.cs

示例7: MemberRefTableReader

 internal MemberRefTableReader(
     int numberOfRows,
     int memberRefParentRefSize,
     int stringHeapRefSize,
     int blobHeapRefSize,
     MemoryBlock containingBlock,
     int containingBlockOffset
 )
 {
     this.NumberOfRows = numberOfRows;
     _IsMemberRefParentRefSizeSmall = memberRefParentRefSize == 2;
     _IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
     _IsBlobHeapRefSizeSmall = blobHeapRefSize == 2;
     _ClassOffset = 0;
     _NameOffset = _ClassOffset + memberRefParentRefSize;
     _SignatureOffset = _NameOffset + stringHeapRefSize;
     this.RowSize = _SignatureOffset + blobHeapRefSize;
     this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, (int)(this.RowSize * numberOfRows));
 }
开发者ID:jmhardison,项目名称:corefx,代码行数:19,代码来源:Tables.cs

示例8: ParamTableReader

 internal ParamTableReader(
     int numberOfRows,
     int stringHeapRefSize,
     MemoryBlock containingBlock,
     int containingBlockOffset
 )
 {
     this.NumberOfRows = numberOfRows;
     _IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
     _FlagsOffset = 0;
     _SequenceOffset = _FlagsOffset + sizeof(UInt16);
     _NameOffset = _SequenceOffset + sizeof(UInt16);
     this.RowSize = _NameOffset + stringHeapRefSize;
     this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, (int)(this.RowSize * numberOfRows));
 }
开发者ID:jmhardison,项目名称:corefx,代码行数:15,代码来源:Tables.cs

示例9: MethodTableReader

 internal MethodTableReader(
     int numberOfRows,
     int paramRefSize,
     int stringHeapRefSize,
     int blobHeapRefSize,
     MemoryBlock containingBlock,
     int containingBlockOffset
 )
 {
     this.NumberOfRows = numberOfRows;
     _IsParamRefSizeSmall = paramRefSize == 2;
     _IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
     _IsBlobHeapRefSizeSmall = blobHeapRefSize == 2;
     _RVAOffset = 0;
     _ImplFlagsOffset = _RVAOffset + sizeof(UInt32);
     _FlagsOffset = _ImplFlagsOffset + sizeof(UInt16);
     _NameOffset = _FlagsOffset + sizeof(UInt16);
     _SignatureOffset = _NameOffset + stringHeapRefSize;
     _ParamListOffset = _SignatureOffset + blobHeapRefSize;
     this.RowSize = _ParamListOffset + paramRefSize;
     this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, (int)(this.RowSize * numberOfRows));
 }
开发者ID:jmhardison,项目名称:corefx,代码行数:22,代码来源:Tables.cs

示例10: AssemblyRefOSTableReader

 internal AssemblyRefOSTableReader(
     int numberOfRows,
     int assemblyRefTableRowRefSize,
     MemoryBlock containingBlock,
     int containingBlockOffset)
 {
     this.NumberOfRows = numberOfRows;
     _IsAssemblyRefTableRowRefSizeSmall = assemblyRefTableRowRefSize == 2;
     _OSPlatformIdOffset = 0;
     _OSMajorVersionIdOffset = _OSPlatformIdOffset + sizeof(UInt32);
     _OSMinorVersionIdOffset = _OSMajorVersionIdOffset + sizeof(UInt32);
     _AssemblyRefOffset = _OSMinorVersionIdOffset + sizeof(UInt32);
     this.RowSize = _AssemblyRefOffset + assemblyRefTableRowRefSize;
     this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, (int)(this.RowSize * numberOfRows));
 }
开发者ID:jmhardison,项目名称:corefx,代码行数:15,代码来源:Tables.cs

示例11: AssemblyRefProcessorTableReader

 internal AssemblyRefProcessorTableReader(
     int numberOfRows,
     int assemblyRefTableRowRefSize,
     MemoryBlock containingBlock,
     int containingBlockOffset
 )
 {
     this.NumberOfRows = numberOfRows;
     _IsAssemblyRefTableRowSizeSmall = assemblyRefTableRowRefSize == 2;
     _ProcessorOffset = 0;
     _AssemblyRefOffset = _ProcessorOffset + sizeof(UInt32);
     this.RowSize = _AssemblyRefOffset + assemblyRefTableRowRefSize;
     this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, (int)(this.RowSize * numberOfRows));
 }
开发者ID:jmhardison,项目名称:corefx,代码行数:14,代码来源:Tables.cs

示例12: AssemblyRefTableReader

        internal AssemblyRefTableReader(
            int numberOfRows,
            int stringHeapRefSize,
            int blobHeapRefSize,
            MemoryBlock containingBlock,
            int containingBlockOffset,
            MetadataKind metadataKind)
        {
            this.NumberOfNonVirtualRows = numberOfRows;
            this.NumberOfVirtualRows = (metadataKind == MetadataKind.Ecma335) ? 0 : (int)AssemblyReferenceHandle.VirtualIndex.Count;

            _IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
            _IsBlobHeapRefSizeSmall = blobHeapRefSize == 2;
            _MajorVersionOffset = 0;
            _MinorVersionOffset = _MajorVersionOffset + sizeof(UInt16);
            _BuildNumberOffset = _MinorVersionOffset + sizeof(UInt16);
            _RevisionNumberOffset = _BuildNumberOffset + sizeof(UInt16);
            _FlagsOffset = _RevisionNumberOffset + sizeof(UInt16);
            _PublicKeyOrTokenOffset = _FlagsOffset + sizeof(UInt32);
            _NameOffset = _PublicKeyOrTokenOffset + blobHeapRefSize;
            _CultureOffset = _NameOffset + stringHeapRefSize;
            _HashValueOffset = _CultureOffset + stringHeapRefSize;
            this.RowSize = _HashValueOffset + blobHeapRefSize;
            this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, this.RowSize * numberOfRows);
        }
开发者ID:jmhardison,项目名称:corefx,代码行数:25,代码来源:Tables.cs

示例13: AssemblyProcessorTableReader

 internal AssemblyProcessorTableReader(
     int numberOfRows,
     MemoryBlock containingBlock,
     int containingBlockOffset
 )
 {
     this.NumberOfRows = numberOfRows;
     _ProcessorOffset = 0;
     this.RowSize = _ProcessorOffset + sizeof(UInt32);
     this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, (int)(this.RowSize * numberOfRows));
 }
开发者ID:jmhardison,项目名称:corefx,代码行数:11,代码来源:Tables.cs

示例14: AssemblyTableReader

        internal AssemblyTableReader(
            int numberOfRows,
            int stringHeapRefSize,
            int blobHeapRefSize,
            MemoryBlock containingBlock,
            int containingBlockOffset
        )
        {
            // NOTE: obfuscated assemblies may have more than one row in Assembly table,
            //       we ignore all rows but the first one
            this.NumberOfRows = numberOfRows > 1 ? 1 : numberOfRows;

            _IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
            _IsBlobHeapRefSizeSmall = blobHeapRefSize == 2;
            _HashAlgIdOffset = 0;
            _MajorVersionOffset = _HashAlgIdOffset + sizeof(UInt32);
            _MinorVersionOffset = _MajorVersionOffset + sizeof(UInt16);
            _BuildNumberOffset = _MinorVersionOffset + sizeof(UInt16);
            _RevisionNumberOffset = _BuildNumberOffset + sizeof(UInt16);
            _FlagsOffset = _RevisionNumberOffset + sizeof(UInt16);
            _PublicKeyOffset = _FlagsOffset + sizeof(UInt32);
            _NameOffset = _PublicKeyOffset + blobHeapRefSize;
            _CultureOffset = _NameOffset + stringHeapRefSize;
            this.RowSize = _CultureOffset + stringHeapRefSize;
            this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, this.RowSize * numberOfRows);
        }
开发者ID:jmhardison,项目名称:corefx,代码行数:26,代码来源:Tables.cs

示例15: EnCMapTableReader

 internal EnCMapTableReader(
     int numberOfRows,
     MemoryBlock containingBlock,
     int containingBlockOffset)
 {
     this.NumberOfRows = numberOfRows;
     _TokenOffset = 0;
     this.RowSize = _TokenOffset + sizeof(uint);
     this.Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, this.RowSize * numberOfRows);
 }
开发者ID:jmhardison,项目名称:corefx,代码行数:10,代码来源:Tables.cs


注:本文中的System.Reflection.Internal.MemoryBlock.GetMemoryBlockAt方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。