Ejemplo n.º 1
0
        public static List <UInt32> ReadImportAddresses(FileStream inputFile, OptionalHeaderDataDirectories optionalHeaderDataDirectories, List <SectionTable> sectionTables)
        {
            inputFile.Position = ImportAddressTable.StartingPosition(optionalHeaderDataDirectories, sectionTables);
            var importAddresses = new List <UInt32>();

            for (int i = 0; i < optionalHeaderDataDirectories.IATSize; i++)
            {
                importAddresses.Add(inputFile.ReadStructure <UInt32>().Value);
            }
            return(importAddresses);
        }
 public static long StartingPosition(OptionalHeaderDataDirectories optionalHeaderDataDirectories, List <SectionTable> sectionTables)
 {
     foreach (var sectionTable in sectionTables)
     {
         if (optionalHeaderDataDirectories.DebugAddress >= sectionTable.VirtualAddress
             &&
             optionalHeaderDataDirectories.DebugAddress <= sectionTable.VirtualAddress + sectionTable.VirtualSize)
         {
             return(sectionTable.PointerToRawData + optionalHeaderDataDirectories.DebugAddress - sectionTable.VirtualAddress);
         }
     }
     throw new ArgumentOutOfRangeException("OptionalHeaderDataDirectories Exception Handling Table Address", "The OptionalHeaderDataDirectories Exception Handling Table Address did not fall within the address range of any of the Section Tables");
 }