namespace object {
class ImportDirectoryEntryRef;
+class ExportDirectoryEntryRef;
typedef content_iterator<ImportDirectoryEntryRef> import_directory_iterator;
+typedef content_iterator<ExportDirectoryEntryRef> export_directory_iterator;
/// The DOS compatible header at the front of all PE/COFF executables.
struct dos_header {
class COFFObjectFile : public ObjectFile {
private:
friend class ImportDirectoryEntryRef;
+ friend class ExportDirectoryEntryRef;
const coff_file_header *COFFHeader;
const pe32_header *PE32Header;
const data_directory *DataDirectory;
uint32_t StringTableSize;
const import_directory_table_entry *ImportDirectory;
uint32_t NumberOfImportDirectory;
+ const export_directory_table_entry *ExportDirectory;
error_code getString(uint32_t offset, StringRef &Res) const;
error_code initSymbolTablePtr();
error_code initImportTablePtr();
+ error_code initExportTablePtr();
protected:
virtual error_code getSymbolNext(DataRefImpl Symb, SymbolRef &Res) const;
StringRef &Result) const;
public:
- COFFObjectFile(MemoryBuffer *Object, error_code &ec);
+ COFFObjectFile(MemoryBuffer *Object, error_code &EC, bool BufferOwned = true);
virtual symbol_iterator begin_symbols() const;
virtual symbol_iterator end_symbols() const;
virtual symbol_iterator begin_dynamic_symbols() const;
import_directory_iterator import_directory_begin() const;
import_directory_iterator import_directory_end() const;
+ export_directory_iterator export_directory_begin() const;
+ export_directory_iterator export_directory_end() const;
error_code getHeader(const coff_file_header *&Res) const;
error_code getCOFFHeader(const coff_file_header *&Res) const;
uint32_t Index;
const COFFObjectFile *OwningObject;
};
+
+// The iterator for the export directory table entry.
+class ExportDirectoryEntryRef {
+public:
+ ExportDirectoryEntryRef() : OwningObject(0) {}
+ ExportDirectoryEntryRef(const export_directory_table_entry *Table, uint32_t I,
+ const COFFObjectFile *Owner)
+ : ExportTable(Table), Index(I), OwningObject(Owner) {}
+
+ bool operator==(const ExportDirectoryEntryRef &Other) const;
+ error_code getNext(ExportDirectoryEntryRef &Result) const;
+
+ error_code getDllName(StringRef &Result) const;
+ error_code getOrdinalBase(uint32_t &Result) const;
+ error_code getOrdinal(uint32_t &Result) const;
+ error_code getExportRVA(uint32_t &Result) const;
+ error_code getSymbolName(StringRef &Result) const;
+
+private:
+ const export_directory_table_entry *ExportTable;
+ uint32_t Index;
+ const COFFObjectFile *OwningObject;
+};
} // end namespace object
} // end namespace llvm