コード例 #1
0
        public override void VisitCLIHeader(CLIHeader header)
        {
            m_textWriter.Write(header.Cb);

            if (m_mdWriter.TargetRuntime >= TargetRuntime.NET_2_0)
            {
                m_textWriter.Write((ushort)2);
                m_textWriter.Write((ushort)5);
            }
            else
            {
                m_textWriter.Write((ushort)2);
                m_textWriter.Write((ushort)0);
            }

            m_textWriter.Write(header.Metadata.VirtualAddress);
            m_textWriter.Write(header.Metadata.Size);
            m_textWriter.Write((uint)header.Flags);
            m_textWriter.Write(header.EntryPointToken);
            m_textWriter.Write(header.Resources.VirtualAddress);
            m_textWriter.Write(header.Resources.Size);
            m_textWriter.Write(header.StrongNameSignature.VirtualAddress);
            m_textWriter.Write(header.StrongNameSignature.Size);
            m_textWriter.Write(header.CodeManagerTable.VirtualAddress);
            m_textWriter.Write(header.CodeManagerTable.Size);
            m_textWriter.Write(header.VTableFixups.VirtualAddress);
            m_textWriter.Write(header.VTableFixups.Size);
            m_textWriter.Write(header.ExportAddressTableJumps.VirtualAddress);
            m_textWriter.Write(header.ExportAddressTableJumps.Size);
            m_textWriter.Write(header.ManagedNativeHeader.VirtualAddress);
            m_textWriter.Write(header.ManagedNativeHeader.Size);
        }
コード例 #2
0
ファイル: ImageReader.cs プロジェクト: lewing/runtime-assets
        public override void VisitCLIHeader(CLIHeader header)
        {
            if (m_image.PEOptionalHeader.DataDirectories.Debug != DataDirectory.Zero)
            {
                m_image.DebugHeader = new DebugHeader();
                VisitDebugHeader(m_image.DebugHeader);
            }

            SetPositionToAddress(m_image.PEOptionalHeader.DataDirectories.CLIHeader.VirtualAddress);
            header.Cb = m_binaryReader.ReadUInt32();
            header.MajorRuntimeVersion = m_binaryReader.ReadUInt16();
            header.MinorRuntimeVersion = m_binaryReader.ReadUInt16();
            header.Metadata            = ReadDataDirectory();
            header.Flags                   = (RuntimeImage)m_binaryReader.ReadUInt32();
            header.EntryPointToken         = m_binaryReader.ReadUInt32();
            header.Resources               = ReadDataDirectory();
            header.StrongNameSignature     = ReadDataDirectory();
            header.CodeManagerTable        = ReadDataDirectory();
            header.VTableFixups            = ReadDataDirectory();
            header.ExportAddressTableJumps = ReadDataDirectory();
            header.ManagedNativeHeader     = ReadDataDirectory();

            if (header.StrongNameSignature != DataDirectory.Zero)
            {
                SetPositionToAddress(header.StrongNameSignature.VirtualAddress);
                header.ImageHash = m_binaryReader.ReadBytes((int)header.StrongNameSignature.Size);
            }
            else
            {
                header.ImageHash = new byte [0];
            }

            SetPositionToAddress(m_image.CLIHeader.Metadata.VirtualAddress);
            m_image.MetadataRoot.Accept(m_mdReader);
        }
コード例 #3
0
 public override void VisitCLIHeader(CLIHeader header)
 {
     header.SetDefaultValues();
     m_image.MetadataRoot.Accept(m_mdinit);
 }