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"); }