Esempio n. 1
0
 public void FillMethods(FileStream fs, MetaDataStream Strings, PEFile file)
 {
     // now fill in the methods
     foreach (MethodDef md in Methods)
     {
         md.Populate(fs, Strings, file);
     }
 }
Esempio n. 2
0
 public void Populate(FileStream fs, MetaDataStream Strings, PEFile file)
 {
     this.Name = Utils.ReadString((byte[])Strings.Data, NameIndex);
     if (RVA != 0)
     {
         int offset = file.FindSectionForRVA(RVA).CalculateFileOffset(RVA);
         fs.Seek(offset, SeekOrigin.Begin);
         Method = new Method(fs);
     }
 }
Esempio n. 3
0
        public void Populate(FileStream fs, MetaDataStream Strings, PEFile file)
        {
            this.Name = Utils.ReadString((byte[])Strings.Data, NameIndex);
            if (RVA != 0)
            {
                int offset = file.FindSectionForRVA(RVA).CalculateFileOffset(RVA);
                fs.Seek(offset, SeekOrigin.Begin);
                Method = new Method(fs);
            }

        }
Esempio n. 4
0
        public CLRDirectory(FileStream fs, PEFile parent)
        {
            // Find the .NET metadata and load it
            PEDataDirectory clrDir =
                parent.OptionalHeader.DataDirectories.FirstOrDefault(
                    p => p.DirectoryName == PEOptionalHeader.CLR_RUNTIME_HEADER);
            PESection section = parent.FindSectionForRVA(clrDir.VirtualAddress);

            MetaDataOffset = section.CalculateFileOffset(clrDir.VirtualAddress);
            // Skip to the start of the structure
            fs.Seek(MetaDataOffset, SeekOrigin.Begin);
            fs.Seek(8, SeekOrigin.Current);
            MetDataDirectory = new PEDataDirectory(fs, "MetaData");

            MetaDataHeaderRVF =
                parent.FindSectionForRVA(MetDataDirectory.VirtualAddress)
                .CalculateFileOffset(MetDataDirectory.VirtualAddress);
            fs.Seek(MetaDataHeaderRVF, SeekOrigin.Begin);
            // load the metadata itself
            MetaDataHeader  = new MetaDataHeader(fs);
            MetaDataStreams = new List <MetaDataStream>();
            for (int i = 0; i < MetaDataHeader.NumberOfStreams; i++)
            {
                MetaDataStreams.Add(new MetaDataStream(fs));
            }
            // we should now be aligned at the start of the first section
            foreach (MetaDataStream ms in MetaDataStreams)
            {
                fs.Seek(ms.Offset + MetaDataHeaderRVF, SeekOrigin.Begin);

                if (ms.Name == "#~")
                {
                    ms.Data = new PoundTildeStream(fs);
                    Tables  = ms;
                }
                else
                {
                    if (ms.Name == "#Strings")
                    {
                        Strings = ms;
                    }
                    ms.Data = new byte[ms.Size];
                    fs.Read((byte[])ms.Data, 0, ms.Size);
                }
            }
            ((PoundTildeStream)Tables.Data).FillMethods(fs, Strings, parent);
        }
Esempio n. 5
0
        public CLRDirectory(FileStream fs, PEFile parent)
        {
            // Find the .NET metadata and load it
            PEDataDirectory clrDir =
                parent.OptionalHeader.DataDirectories.FirstOrDefault(
                    p => p.DirectoryName == PEOptionalHeader.CLR_RUNTIME_HEADER);
            PESection section = parent.FindSectionForRVA(clrDir.VirtualAddress);

            MetaDataOffset = section.CalculateFileOffset(clrDir.VirtualAddress);
            // Skip to the start of the structure
            fs.Seek(MetaDataOffset, SeekOrigin.Begin);
            fs.Seek(8, SeekOrigin.Current);
            MetDataDirectory = new PEDataDirectory(fs, "MetaData");

            MetaDataHeaderRVF = 
                parent.FindSectionForRVA(MetDataDirectory.VirtualAddress)
                    .CalculateFileOffset(MetDataDirectory.VirtualAddress);
            fs.Seek(MetaDataHeaderRVF,SeekOrigin.Begin);
            // load the metadata itself
            MetaDataHeader = new MetaDataHeader(fs);
            MetaDataStreams = new List<MetaDataStream>();
            for(int i =0; i< MetaDataHeader.NumberOfStreams; i++)  {
                MetaDataStreams.Add(new MetaDataStream(fs));
            }
            // we should now be aligned at the start of the first section
            foreach (MetaDataStream ms in MetaDataStreams)
            {
                fs.Seek(ms.Offset + MetaDataHeaderRVF, SeekOrigin.Begin);

                if (ms.Name == "#~")
                {
                    ms.Data = new PoundTildeStream(fs);
                    Tables = ms;
                }
                else
                {
                    if (ms.Name == "#Strings")
                        Strings = ms;
                    ms.Data = new byte[ms.Size];
                    fs.Read((byte[])ms.Data, 0, ms.Size);
                }
            }
            ((PoundTildeStream)Tables.Data).FillMethods(fs, Strings, parent);

        }
Esempio n. 6
0
 public void FillMethods(FileStream fs,MetaDataStream Strings, PEFile file)
 {
     // now fill in the methods
     foreach (MethodDef md in Methods)
         md.Populate(fs, Strings,file );
 }