コード例 #1
0
 public override void VisitHintNameTable(HintNameTable hnt)
 {
     hnt.Hint           = 0;
     hnt.RuntimeLibrary = HintNameTable.RuntimeCorEE;
     hnt.EntryPoint     = 0x25ff;
     hnt.RVA            = new RVA(0x402000);
 }
コード例 #2
0
        public override void VisitHintNameTable(HintNameTable hnt)
        {
            m_textWriter.Write(hnt.Hint);
            m_textWriter.Write(Encoding.ASCII.GetBytes(hnt.RuntimeMain));
            m_textWriter.Write('\0');
            m_textWriter.Write(Encoding.ASCII.GetBytes(hnt.RuntimeLibrary));
            m_textWriter.Write('\0');
            m_textWriter.Write(new byte [4]);

            // patch header with ep rva
            RVA ep = m_img.TextSection.VirtualAddress +
                     (uint)m_textWriter.BaseStream.Position;
            long pos = m_binaryWriter.BaseStream.Position;

            m_binaryWriter.BaseStream.Position = 0xa8;
            m_binaryWriter.Write(ep.Value);
            m_binaryWriter.BaseStream.Position = pos;

            // patch reloc Sect with ep
            uint reloc = (ep.Value + 2) % 0x1000;
            uint rva   = (ep.Value + 2) - reloc;

            m_relocWriter.BaseStream.Position = 0;
            m_relocWriter.Write(rva);
            m_relocWriter.BaseStream.Position = 8;
            m_relocWriter.Write((ushort)((3 << 12) | reloc));

            m_textWriter.Write(hnt.EntryPoint);
            m_textWriter.Write(hnt.RVA);
        }
コード例 #3
0
ファイル: ImageReader.cs プロジェクト: lewing/runtime-assets
        public override void VisitHintNameTable(HintNameTable hnt)
        {
            if (m_image.ImportAddressTable.HintNameTableRVA == RVA.Zero)
            {
                return;
            }

            if ((m_image.ImportAddressTable.HintNameTableRVA & 0x80000000) != 0)
            {
                return;
            }

            SetPositionToAddress(m_image.ImportAddressTable.HintNameTableRVA);

            hnt.Hint = m_binaryReader.ReadUInt16();

            byte [] bytes = m_binaryReader.ReadBytes(11);
            hnt.RuntimeMain = Encoding.ASCII.GetString(bytes, 0, bytes.Length);

            SetPositionToAddress(m_image.ImportTable.Name);

            bytes = m_binaryReader.ReadBytes(11);
            hnt.RuntimeLibrary = Encoding.ASCII.GetString(bytes, 0, bytes.Length);

            SetPositionToAddress(m_image.PEOptionalHeader.StandardFields.EntryPointRVA);
            hnt.EntryPoint = m_binaryReader.ReadUInt16();
            hnt.RVA        = ReadRVA();
        }
コード例 #4
0
ファイル: Image.cs プロジェクト: lewing/runtime-assets
 internal Image()
 {
     m_dosHeader          = new DOSHeader();
     m_peFileHeader       = new PEFileHeader();
     m_peOptionalHeader   = new PEOptionalHeader();
     m_sections           = new SectionCollection();
     m_importAddressTable = new ImportAddressTable();
     m_importTable        = new ImportTable();
     m_importLookupTable  = new ImportLookupTable();
     m_hintNameTable      = new HintNameTable();
     m_mdRoot             = new MetadataRoot(this);
 }