Ejemplo n.º 1
0
 internal AssemblyProcessorTable(int numberOfRows, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     ProcessorOffset = 0;
     RowSize = ProcessorOffset + sizeof(UInt32);
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 2
0
 internal AssemblyOSTable(int numberOfRows, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     OSPlatformIdOffset = 0;
     OSMajorVersionIdOffset = OSPlatformIdOffset + sizeof(UInt32);
     OSMinorVersionIdOffset = OSMajorVersionIdOffset + sizeof(UInt32);
     RowSize = OSMinorVersionIdOffset + sizeof(UInt32);
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
 internal TypeRefTable(int numberOfRows, int resolutionScopeRefSize, int stringHeapRefSize, int start, MemoryBlock block) {
     NumberOfRows = numberOfRows;
     IsResolutionScopeRefSizeSmall = resolutionScopeRefSize == 2;
     IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
     ResolutionScopeOffset = 0;
     NameOffset = ResolutionScopeOffset + resolutionScopeRefSize;
     NamespaceOffset = NameOffset + stringHeapRefSize;
     RowSize = NamespaceOffset + stringHeapRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
 internal ModuleTable(int numberOfRows, int stringHeapRefSize, int guidHeapRefSize, int start, MemoryBlock block) {
     NumberOfRows = numberOfRows;
     IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
     IsGUIDHeapRefSizeSmall = guidHeapRefSize == 2;
     GenerationOffset = 0;
     NameOffset = GenerationOffset + sizeof(UInt16);
     MVIdOffset = NameOffset + stringHeapRefSize;
     EnCIdOffset = MVIdOffset + guidHeapRefSize;
     EnCBaseIdOffset = EnCIdOffset + guidHeapRefSize;
     RowSize = EnCBaseIdOffset + guidHeapRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 5
0
 internal ClassLayoutTable(int numberOfRows, int typeDefTableRowRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     // IsTypeDefTableRowRefSizeSmall = typeDefTableRowRefSize == 2;
     PackagingSizeOffset = 0;
     ClassSizeOffset = PackagingSizeOffset + sizeof(UInt16);
     ParentOffset = ClassSizeOffset + sizeof(UInt32);
     RowSize = ParentOffset + typeDefTableRowRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 6
0
 internal ParamPtrTable(int numberOfRows, int paramTableRowRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsParamTableRowRefSizeSmall = paramTableRowRefSize == 2;
     ParamOffset = 0;
     RowSize = ParamOffset + paramTableRowRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 7
0
 internal MethodImplTable(int numberOfRows, int typeDefTableRowRefSize, int methodDefOrRefRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsTypeDefTableRowRefSizeSmall = typeDefTableRowRefSize == 2;
     // IsMethodDefOrRefRefSizeSmall = methodDefOrRefRefSize == 2;
     ClassOffset = 0;
     MethodBodyOffset = ClassOffset + typeDefTableRowRefSize;
     MethodDeclarationOffset = MethodBodyOffset + methodDefOrRefRefSize;
     RowSize = MethodDeclarationOffset + methodDefOrRefRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 8
0
 internal TypeSpecTable(int numberOfRows, int blobHeapRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsBlobHeapRefSizeSmall = blobHeapRefSize == 2;
     SignatureOffset = 0;
     RowSize = SignatureOffset + blobHeapRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 9
0
 internal ExportedTypeTable(int numberOfRows, int implementationRefSize, int stringHeapRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsImplementationRefSizeSmall = implementationRefSize == 2;
     IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
     FlagsOffset = 0;
     TypeDefIdOffset = FlagsOffset + sizeof(UInt32);
     TypeNameOffset = TypeDefIdOffset + sizeof(UInt32);
     TypeNamespaceOffset = TypeNameOffset + stringHeapRefSize;
     ImplementationOffset = TypeNamespaceOffset + stringHeapRefSize;
     RowSize = ImplementationOffset + implementationRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 10
0
 public MemoryBlock GetRemainingBlock()
 {
     return(_block.GetRange(_position, RemainingBytes));
 }
Ejemplo n.º 11
0
 internal MethodPtrTable(int numberOfRows, int methodTableRowRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsMethodTableRowRefSizeSmall = methodTableRowRefSize == 2;
     MethodOffset = 0;
     RowSize = MethodOffset + methodTableRowRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 12
0
 internal EventPtrTable(int numberOfRows, int eventTableRowRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsEventTableRowRefSizeSmall = eventTableRowRefSize == 2;
     EventOffset = 0;
     RowSize = EventOffset + eventTableRowRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 13
0
 internal ConstantTable(int numberOfRows, int hasConstantRefSize, int blobHeapRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsHasConstantRefSizeSmall = hasConstantRefSize == 2;
     IsBlobHeapRefSizeSmall = blobHeapRefSize == 2;
     TypeOffset = 0;
     ParentOffset = TypeOffset + sizeof(Byte) + 1; //  Alignment here (+1)...
     ValueOffset = ParentOffset + hasConstantRefSize;
     RowSize = ValueOffset + blobHeapRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 14
0
 internal DeclSecurityTable(int numberOfRows, int hasDeclSecurityRefSize, int blobHeapRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     // IsHasDeclSecurityRefSizeSmall = hasDeclSecurityRefSize == 2;
     // IsBlobHeapRefSizeSmall = blobHeapRefSize == 2;
     ActionOffset = 0;
     ParentOffset = ActionOffset + sizeof(UInt16);
     PermissionSetOffset = ParentOffset + hasDeclSecurityRefSize;
     RowSize = PermissionSetOffset + blobHeapRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 15
0
 internal NestedClassTable(int numberOfRows, int typeDefTableRowRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsTypeDefTableRowRefSizeSmall = typeDefTableRowRefSize == 2;
     NestedClassOffset = 0;
     EnclosingClassOffset = NestedClassOffset + typeDefTableRowRefSize;
     RowSize = EnclosingClassOffset + typeDefTableRowRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 16
0
 internal ModuleRefTable(int numberOfRows, int stringHeapRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
     NameOffset = 0;
     RowSize = NameOffset + stringHeapRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 17
0
 internal MethodTable(int numberOfRows, int paramRefSize, int stringHeapRefSize, int blobHeapRefSize, int start, MemoryBlock block)
 {
     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;
     RowSize = ParamListOffset + paramRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 18
0
 internal MethodSpecTable(int numberOfRows, int methodDefOrRefRefSize, int blobHeapRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsMethodDefOrRefRefSizeSmall = methodDefOrRefRefSize == 2;
     IsBlobHeapRefSizeSmall = blobHeapRefSize == 2;
     MethodOffset = 0;
     InstantiationOffset = MethodOffset + methodDefOrRefRefSize;
     RowSize = InstantiationOffset + blobHeapRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 19
0
 internal MethodSemanticsTable(int numberOfRows, int methodTableRowRefSize, int hasSemanticRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsMethodTableRowRefSizeSmall = methodTableRowRefSize == 2;
     IsHasSemanticRefSizeSmall = hasSemanticRefSize == 2;
     SemanticsFlagOffset = 0;
     MethodOffset = SemanticsFlagOffset + sizeof(UInt16);
     AssociationOffset = MethodOffset + methodTableRowRefSize;
     RowSize = AssociationOffset + hasSemanticRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 20
0
 internal CustomAttributeTable(int numberOfRows, int hasCustomAttributeRefSize, int customAttributeTypeRefSize, int blobHeapRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsHasCustomAttributeRefSizeSmall = hasCustomAttributeRefSize == 2;
     IsCustomAttriubuteTypeRefSizeSmall = customAttributeTypeRefSize == 2;
     IsBlobHeapRefSizeSmall = blobHeapRefSize == 2;
     ParentOffset = 0;
     TypeOffset = ParentOffset + hasCustomAttributeRefSize;
     ValueOffset = TypeOffset + customAttributeTypeRefSize;
     RowSize = ValueOffset + blobHeapRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 21
0
 internal ParamTable(int numberOfRows, int stringHeapRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
     FlagsOffset = 0;
     SequenceOffset = FlagsOffset + sizeof(UInt16);
     NameOffset = SequenceOffset + sizeof(UInt16);
     RowSize = NameOffset + stringHeapRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 22
0
 internal EnCMapTable(int numberOfRows, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     TokenOffset = 0;
     RowSize = TokenOffset + sizeof(UInt32);
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 23
0
 internal PropertyMapTable(int numberOfRows, int typeDefTableRowRefSize, int propertyRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsTypeDefTableRowRefSizeSmall = typeDefTableRowRefSize == 2;
     IsPropertyRefSizeSmall = propertyRefSize == 2;
     ParentOffset = 0;
     PropertyListOffset = ParentOffset + typeDefTableRowRefSize;
     RowSize = PropertyListOffset + propertyRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 24
0
 internal EventMapTable(int numberOfRows, int typeDefTableRowRefSize, int eventRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsTypeDefTableRowRefSizeSmall = typeDefTableRowRefSize == 2;
     IsEventRefSizeSmall = eventRefSize == 2;
     ParentOffset = 0;
     EventListOffset = ParentOffset + typeDefTableRowRefSize;
     RowSize = EventListOffset + eventRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 25
0
 internal PropertyPtrTable(int numberOfRows, int propertyTableRowRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsPropertyTableRowRefSizeSmall = propertyTableRowRefSize == 2;
     PropertyOffset = 0;
     RowSize = PropertyOffset + propertyTableRowRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 26
0
 internal EventTable(int numberOfRows, int typeDefOrRefRefSize, int stringHeapRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsTypeDefOrRefRefSizeSmall = typeDefOrRefRefSize == 2;
     IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
     FlagsOffset = 0;
     NameOffset = FlagsOffset + sizeof(UInt16);
     EventTypeOffset = NameOffset + stringHeapRefSize;
     RowSize = EventTypeOffset + typeDefOrRefRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 27
0
 internal PropertyTable(int numberOfRows, int stringHeapRefSize, int blobHeapRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
     IsBlobHeapRefSizeSmall = blobHeapRefSize == 2;
     FlagsOffset = 0;
     NameOffset = FlagsOffset + sizeof(UInt16);
     SignatureOffset = NameOffset + stringHeapRefSize;
     RowSize = SignatureOffset + blobHeapRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 28
0
 internal FieldLayoutTable(int numberOfRows, int fieldTableRowRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     // IsFieldTableRowRefSizeSmall = fieldTableRowRefSize == 2;
     OffsetOffset = 0;
     FieldOffset = OffsetOffset + sizeof(UInt32);
     RowSize = FieldOffset + fieldTableRowRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 29
0
 internal TypeDefTable(int numberOfRows, int fieldRefSize, int methodRefSize, int typeDefOrRefRefSize, int stringHeapRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = numberOfRows;
     IsFieldRefSizeSmall = fieldRefSize == 2;
     IsMethodRefSizeSmall = methodRefSize == 2;
     IsTypeDefOrRefRefSizeSmall = typeDefOrRefRefSize == 2;
     IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
     FlagsOffset = 0;
     NameOffset = FlagsOffset + sizeof(UInt32);
     NamespaceOffset = NameOffset + stringHeapRefSize;
     ExtendsOffset = NamespaceOffset + stringHeapRefSize;
     FieldListOffset = ExtendsOffset + typeDefOrRefRefSize;
     MethodListOffset = FieldListOffset + fieldRefSize;
     RowSize = MethodListOffset + methodRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }
Ejemplo n.º 30
0
        private void ProcessAndCacheStreams(MemoryBlock metadataRoot) {
            _metadataStreamKind = MetadataStreamKind.Illegal;

            foreach (StreamHeader streamHeader in _streamHeaders) {
                if ((long)streamHeader.Offset + streamHeader.Size > metadataRoot.Length) {
                    throw new BadImageFormatException();
                }
                MemoryBlock block = metadataRoot.GetRange((int)streamHeader.Offset, (int)streamHeader.Size);

                switch (streamHeader.Name) {
                    case COR20Constants.StringStreamName:
                        if (_stringStream != null) {
                            throw new BadImageFormatException();
                        }
                        // the first and the last byte of the heap must be zero:
                        if (block.Length == 0 || block.ReadByte(0) != 0 || block.ReadByte(block.Length - 1) != 0) {
                            throw new BadImageFormatException();
                        }
                        _stringStream = block;
                        break;

                    case COR20Constants.BlobStreamName:
                        if (_blobStream != null) {
                            throw new BadImageFormatException();
                        }
                        _blobStream = block;
                        break;

                    case COR20Constants.GUIDStreamName:
                        if (_guidStream != null) {
                            throw new BadImageFormatException();
                        }
                        _guidStream = block;
                        break;

                    case COR20Constants.UserStringStreamName:
                        if (_userStringStream != null) {
                            throw new BadImageFormatException();
                        }
                        _userStringStream = block;
                        break;

                    case COR20Constants.CompressedMetadataTableStreamName:
                        if (_metadataStreamKind != MetadataStreamKind.Illegal) {
                            throw new BadImageFormatException();
                        }
                        _metadataStreamKind = MetadataStreamKind.Compressed;
                        _metadataTableStream = block;
                        break;

                    case COR20Constants.UncompressedMetadataTableStreamName:
                        if (_metadataStreamKind != MetadataStreamKind.Illegal) {
                            throw new BadImageFormatException();
                        }
                        _metadataStreamKind = MetadataStreamKind.UnCompressed;
                        _metadataTableStream = block;
                        break;

                    default:
		                throw new BadImageFormatException();
                }
            }

            // mandatory streams:
            if (_stringStream == null || _guidStream == null || _metadataStreamKind == MetadataStreamKind.Illegal) {
                throw new BadImageFormatException();
            }
        }
Ejemplo n.º 31
0
 internal AssemblyTable(int numberOfRows, int stringHeapRefSize, int blobHeapRefSize, int start, MemoryBlock block)
 {
     NumberOfRows = 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;
     RowSize = CultureOffset + stringHeapRefSize;
     Table = block.GetRange(start, RowSize * numberOfRows);
 }