public void Baseline() { var mdBuilder = new MetadataBuilder(); mdBuilder.AddModule(0, default(StringHandle), default(GuidHandle), default(GuidHandle), default(GuidHandle)); var rootBuilder = new MetadataRootBuilder(mdBuilder); var mdBlob = new BlobBuilder(); rootBuilder.Serialize(mdBlob, 0, 0); // validate sizes table rows that reference guids: using (var mdProvider = MetadataReaderProvider.FromMetadataImage(mdBlob.ToImmutableArray())) { var mdReader = mdProvider.GetMetadataReader(); Assert.Equal(2 + 3 * 2 + 2, mdReader.ModuleTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.TypeRefTable.RowSize); Assert.Equal(4 + 2 + 2 + 2 + 2 + 2, mdReader.TypeDefTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.FieldTable.RowSize); Assert.Equal(8 + 2 + 2 + 2, mdReader.MethodDefTable.RowSize); Assert.Equal(4 + 2, mdReader.ParamTable.RowSize); Assert.Equal(2 + 2, mdReader.InterfaceImplTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.MemberRefTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.ConstantTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.CustomAttributeTable.RowSize); Assert.Equal(2 + 2, mdReader.FieldMarshalTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.DeclSecurityTable.RowSize); Assert.Equal(6 + 2, mdReader.ClassLayoutTable.RowSize); Assert.Equal(4 + 2, mdReader.FieldLayoutTable.RowSize); Assert.Equal(2, mdReader.StandAloneSigTable.RowSize); Assert.Equal(2 + 2, mdReader.EventMapTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.EventTable.RowSize); Assert.Equal(2 + 2, mdReader.PropertyMapTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.PropertyTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.MethodSemanticsTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.MethodImplTable.RowSize); Assert.Equal(2, mdReader.ModuleRefTable.RowSize); Assert.Equal(2, mdReader.TypeSpecTable.RowSize); Assert.Equal(2 + 2 + 2 + 2, mdReader.ImplMapTable.RowSize); Assert.Equal(4 + 2, mdReader.FieldRvaTable.RowSize); Assert.Equal(16 + 2 + 2 + 2, mdReader.AssemblyTable.RowSize); Assert.Equal(12 + 2 + 2 + 2 + 2, mdReader.AssemblyRefTable.RowSize); Assert.Equal(4 + 2 + 2, mdReader.FileTable.RowSize); Assert.Equal(8 + 2 + 2 + 2, mdReader.ExportedTypeTable.RowSize); Assert.Equal(8 + 2 + 2, mdReader.ManifestResourceTable.RowSize); Assert.Equal(2 + 2, mdReader.NestedClassTable.RowSize); Assert.Equal(4 + 2 + 2, mdReader.GenericParamTable.RowSize); Assert.Equal(2 + 2, mdReader.MethodSpecTable.RowSize); Assert.Equal(2 + 2, mdReader.GenericParamConstraintTable.RowSize); Assert.Equal(2 + 2 + 2 + 2, mdReader.DocumentTable.RowSize); Assert.Equal(2 + 2, mdReader.MethodDebugInformationTable.RowSize); Assert.Equal(2 + 2 + 2 + 2 + 4 + 4, mdReader.LocalScopeTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.LocalVariableTable.RowSize); Assert.Equal(2 + 2, mdReader.LocalConstantTable.RowSize); Assert.Equal(2 + 2, mdReader.ImportScopeTable.RowSize); Assert.Equal(2 + 2, mdReader.StateMachineMethodTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.CustomDebugInformationTable.RowSize); } }
private static BlobBuilder BuildMetadataImage() { var mdBuilder = new MetadataBuilder(); mdBuilder.AddModule(0, default(StringHandle), default(GuidHandle), default(GuidHandle), default(GuidHandle)); var rootBuilder = new MetadataRootBuilder(mdBuilder, "v9.9.9.9"); var builder = new BlobBuilder(); rootBuilder.Serialize(builder, 0, 0); return builder; }
public ManagedPEBuilder( PEHeaderBuilder header, MetadataRootBuilder metadataRootBuilder, BlobBuilder ilStream, BlobBuilder mappedFieldData = null, BlobBuilder managedResources = null, ResourceSectionBuilder nativeResources = null, DebugDirectoryBuilder debugDirectoryBuilder = null, int strongNameSignatureSize = DefaultStrongNameSignatureSize, MethodDefinitionHandle entryPoint = default(MethodDefinitionHandle), CorFlags flags = CorFlags.ILOnly, Func<IEnumerable<Blob>, BlobContentId> deterministicIdProvider = null) : base(header, deterministicIdProvider) { if (header == null) { Throw.ArgumentNull(nameof(header)); } if (metadataRootBuilder == null) { Throw.ArgumentNull(nameof(metadataRootBuilder)); } if (ilStream == null) { Throw.ArgumentNull(nameof(ilStream)); } if (strongNameSignatureSize < 0) { Throw.ArgumentOutOfRange(nameof(strongNameSignatureSize)); } _metadataRootBuilder = metadataRootBuilder; _ilStream = ilStream; _mappedFieldDataOpt = mappedFieldData; _managedResourcesOpt = managedResources; _nativeResourcesOpt = nativeResources; _strongNameSignatureSize = strongNameSignatureSize; _entryPointOpt = entryPoint; _debugDirectoryBuilderOpt = debugDirectoryBuilder ?? CreateDefaultDebugDirectoryBuilder(); _corFlags = flags; _peDirectoriesBuilder = new PEDirectoriesBuilder(); }
public void Others() { var mdBuilder = new MetadataBuilder(); mdBuilder.SetCapacity(TableIndex.Constant, 0x10000); mdBuilder.SetCapacity(TableIndex.CustomAttribute, 0x10000); mdBuilder.SetCapacity(TableIndex.FieldMarshal, 0x10000); mdBuilder.SetCapacity(TableIndex.EventMap, 0x10000); mdBuilder.SetCapacity(TableIndex.PropertyMap, 0x10000); mdBuilder.SetCapacity(TableIndex.MethodSemantics, 0x10000); mdBuilder.SetCapacity(TableIndex.MethodImpl, 0x10000); mdBuilder.SetCapacity(TableIndex.NestedClass, 0x10000); mdBuilder.SetCapacity(TableIndex.CustomDebugInformation, 0x10000); object one = 1; for (int i = 0; i < 0x10000; i++) { mdBuilder.AddConstant(default(ParameterHandle), one); mdBuilder.AddCustomAttribute(default(ParameterHandle), default(MethodDefinitionHandle), default(BlobHandle)); mdBuilder.AddMarshallingDescriptor(default(ParameterHandle), default(BlobHandle)); mdBuilder.AddEventMap(default(TypeDefinitionHandle), default(EventDefinitionHandle)); mdBuilder.AddPropertyMap(default(TypeDefinitionHandle), default(PropertyDefinitionHandle)); mdBuilder.AddMethodSemantics(default(EventDefinitionHandle), 0, default(MethodDefinitionHandle)); mdBuilder.AddMethodImplementation(default(TypeDefinitionHandle), default(MethodDefinitionHandle), default(MethodDefinitionHandle)); mdBuilder.AddNestedType(default(TypeDefinitionHandle), default(TypeDefinitionHandle)); mdBuilder.AddCustomDebugInformation(default(ParameterHandle), default(GuidHandle), default(BlobHandle)); } mdBuilder.AddModule(0, default(StringHandle), default(GuidHandle), default(GuidHandle), default(GuidHandle)); var rootBuilder = new MetadataRootBuilder(mdBuilder); var mdBlob = new BlobBuilder(); rootBuilder.Serialize(mdBlob, 0, 0); // validate sizes table rows that reference guids: using (var mdProvider = MetadataReaderProvider.FromMetadataImage(mdBlob.ToImmutableArray())) { var mdReader = mdProvider.GetMetadataReader(); Assert.Equal(2 + 3 * 2 + 2, mdReader.ModuleTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.TypeRefTable.RowSize); Assert.Equal(4 + 2 + 2 + 2 + 2 + 2, mdReader.TypeDefTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.FieldTable.RowSize); Assert.Equal(8 + 2 + 2 + 2, mdReader.MethodDefTable.RowSize); Assert.Equal(4 + 2, mdReader.ParamTable.RowSize); Assert.Equal(2 + 2, mdReader.InterfaceImplTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.MemberRefTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.ConstantTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.CustomAttributeTable.RowSize); Assert.Equal(2 + 2, mdReader.FieldMarshalTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.DeclSecurityTable.RowSize); Assert.Equal(6 + 2, mdReader.ClassLayoutTable.RowSize); Assert.Equal(4 + 2, mdReader.FieldLayoutTable.RowSize); Assert.Equal(2, mdReader.StandAloneSigTable.RowSize); Assert.Equal(2 + 2, mdReader.EventMapTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.EventTable.RowSize); Assert.Equal(2 + 2, mdReader.PropertyMapTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.PropertyTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.MethodSemanticsTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.MethodImplTable.RowSize); Assert.Equal(2, mdReader.ModuleRefTable.RowSize); Assert.Equal(2, mdReader.TypeSpecTable.RowSize); Assert.Equal(2 + 2 + 2 + 2, mdReader.ImplMapTable.RowSize); Assert.Equal(4 + 2, mdReader.FieldRvaTable.RowSize); Assert.Equal(16 + 2 + 2 + 2, mdReader.AssemblyTable.RowSize); Assert.Equal(12 + 2 + 2 + 2 + 2, mdReader.AssemblyRefTable.RowSize); Assert.Equal(4 + 2 + 2, mdReader.FileTable.RowSize); Assert.Equal(8 + 2 + 2 + 2, mdReader.ExportedTypeTable.RowSize); Assert.Equal(8 + 2 + 2, mdReader.ManifestResourceTable.RowSize); Assert.Equal(2 + 2, mdReader.NestedClassTable.RowSize); Assert.Equal(4 + 2 + 2, mdReader.GenericParamTable.RowSize); Assert.Equal(2 + 2, mdReader.MethodSpecTable.RowSize); Assert.Equal(2 + 2, mdReader.GenericParamConstraintTable.RowSize); Assert.Equal(2 + 2 + 2 + 2, mdReader.DocumentTable.RowSize); Assert.Equal(2 + 2, mdReader.MethodDebugInformationTable.RowSize); Assert.Equal(2 + 2 + 2 + 2 + 4 + 4, mdReader.LocalScopeTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.LocalVariableTable.RowSize); Assert.Equal(2 + 2, mdReader.LocalConstantTable.RowSize); Assert.Equal(2 + 2, mdReader.ImportScopeTable.RowSize); Assert.Equal(2 + 2, mdReader.StateMachineMethodTable.RowSize); Assert.Equal(2 + 2 + 2, mdReader.CustomDebugInformationTable.RowSize); } }
public void ManagedPEBuilder_Errors() { var hdr = new PEHeaderBuilder(); var ms = new MetadataRootBuilder(new MetadataBuilder()); var il = new BlobBuilder(); Assert.Throws<ArgumentNullException>(() => new ManagedPEBuilder(null, ms, il)); Assert.Throws<ArgumentNullException>(() => new ManagedPEBuilder(hdr, null, il)); Assert.Throws<ArgumentNullException>(() => new ManagedPEBuilder(hdr, ms, null)); Assert.Throws<ArgumentOutOfRangeException>(() => new ManagedPEBuilder(hdr, ms, il, strongNameSignatureSize: -1)); }