示例#1
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);
        }
        /// <inheritdoc />
        protected override VTableFixupsDirectory GetVTableFixups()
        {
            if (!_vtableFixupsDirectory.IsPresentInPE)
            {
                return(null);
            }

            if (!_context.File.TryCreateDataDirectoryReader(_vtableFixupsDirectory, out var directoryReader))
            {
                _context.BadImage(".NET data directory contains an invalid VTable fixups directory RVA and/or size.");
                return(null);
            }

            var vtables = new VTableFixupsDirectory();

            for (int i = 0; i < directoryReader.Length / 8; i++)
            {
                vtables.Add(VTableFixup.FromReader(_context, ref directoryReader));
            }

            return(vtables);
        }