retdec
coff_format.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_FILEFORMAT_FILE_FORMAT_COFF_COFF_FORMAT_H
8 #define RETDEC_FILEFORMAT_FILE_FORMAT_COFF_COFF_FORMAT_H
9 
10 // Do not include <llvm/Object/COFF.h> in this header.
11 // It defines many symbols that are also defined in winnt.h.
12 // Including it here may cause name collisions later if this header
13 // is included somewhere where winnt.h is also included.
14 
16 
17 namespace llvm {
18 namespace object {
19 
20 class COFFObjectFile;
21 
22 } // namespace object
23 } // namespace llvm
24 
25 namespace retdec {
26 namespace fileformat {
27 
31 class CoffFormat : public FileFormat
32 {
33  private:
34  llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> fileBuffer;
35 
38  void initStructures();
40 
43  virtual std::size_t initSectionTableHashOffsets() override;
45 
48  void loadSections();
49  void loadSymbols();
50  void loadRelocations();
51  bool getRelocationMask(unsigned relType, std::vector<std::uint8_t> &mask);
53  protected:
54  llvm::object::COFFObjectFile *file;
55  public:
56  CoffFormat(std::string pathToFile, LoadFlags loadFlags = LoadFlags::NONE);
57  CoffFormat(std::istream &inputStream, LoadFlags loadFlags = LoadFlags::NONE);
58  CoffFormat(const std::uint8_t *data, std::size_t size, LoadFlags loadFlags = LoadFlags::NONE);
59  virtual ~CoffFormat() override;
60 
63  virtual retdec::utils::Endianness getEndianness() const override;
64  virtual std::size_t getBytesPerWord() const override;
65  virtual bool hasMixedEndianForDouble() const override;
67 
70  virtual std::size_t getDeclaredFileLength() const override;
71  virtual bool areSectionsValid() const override;
72  virtual bool isObjectFile() const override;
73  virtual bool isDll() const override;
74  virtual bool isExecutable() const override;
75  virtual bool getMachineCode(unsigned long long &result) const override;
76  virtual bool getAbiVersion(unsigned long long &result) const override;
77  virtual bool getImageBaseAddress(unsigned long long &imageBase) const override;
78  virtual bool getEpAddress(unsigned long long &result) const override;
79  virtual bool getEpOffset(unsigned long long &epOffset) const override;
80  virtual Architecture getTargetArchitecture() const override;
81  virtual std::size_t getDeclaredNumberOfSections() const override;
82  virtual std::size_t getDeclaredNumberOfSegments() const override;
83  virtual std::size_t getSectionTableOffset() const override;
84  virtual std::size_t getSectionTableEntrySize() const override;
85  virtual std::size_t getSegmentTableOffset() const override;
86  virtual std::size_t getSegmentTableEntrySize() const override;
88 
91  std::size_t getCoffSymbolTableOffset() const;
92  std::size_t getNumberOfCoffSymbols() const;
93  std::size_t getSizeOfStringTable() const;
94  std::size_t getFileFlags() const;
95  std::size_t getTimeStamp() const;
96  bool is32BitArchitecture() const;
98 };
99 
100 } // namespace fileformat
101 } // namespace retdec
102 
103 #endif
Definition: coff_format.h:32
void loadSymbols()
Definition: coff_format.cpp:342
bool is32BitArchitecture() const
Definition: coff_format.cpp:773
virtual bool getEpOffset(unsigned long long &epOffset) const override
Definition: coff_format.cpp:639
std::size_t getNumberOfCoffSymbols() const
Definition: coff_format.cpp:721
virtual bool areSectionsValid() const override
Definition: coff_format.cpp:592
std::size_t getFileFlags() const
Definition: coff_format.cpp:755
virtual retdec::utils::Endianness getEndianness() const override
Definition: coff_format.cpp:508
virtual std::size_t initSectionTableHashOffsets() override
Definition: coff_format.cpp:293
virtual std::size_t getDeclaredFileLength() const override
Definition: coff_format.cpp:580
virtual std::size_t getDeclaredNumberOfSegments() const override
Definition: coff_format.cpp:683
virtual bool getMachineCode(unsigned long long &result) const override
Definition: coff_format.cpp:612
std::size_t getCoffSymbolTableOffset() const
Definition: coff_format.cpp:712
virtual bool isDll() const override
Definition: coff_format.cpp:602
virtual std::size_t getSegmentTableOffset() const override
Definition: coff_format.cpp:698
virtual Architecture getTargetArchitecture() const override
Definition: coff_format.cpp:646
virtual bool hasMixedEndianForDouble() const override
Definition: coff_format.cpp:571
virtual std::size_t getDeclaredNumberOfSections() const override
Definition: coff_format.cpp:678
void loadSections()
Definition: coff_format.cpp:304
virtual std::size_t getSegmentTableEntrySize() const override
Definition: coff_format.cpp:703
virtual ~CoffFormat() override
Definition: coff_format.cpp:260
bool getRelocationMask(unsigned relType, std::vector< std::uint8_t > &mask)
Definition: coff_format.cpp:470
llvm::ErrorOr< std::unique_ptr< llvm::MemoryBuffer > > fileBuffer
Definition: coff_format.h:34
virtual bool getImageBaseAddress(unsigned long long &imageBase) const override
Definition: coff_format.cpp:625
CoffFormat(std::string pathToFile, LoadFlags loadFlags=LoadFlags::NONE)
Definition: coff_format.cpp:218
void loadRelocations()
Definition: coff_format.cpp:398
virtual std::size_t getSectionTableOffset() const override
Definition: coff_format.cpp:688
virtual bool getAbiVersion(unsigned long long &result) const override
Definition: coff_format.cpp:618
void initStructures()
Definition: coff_format.cpp:268
virtual bool getEpAddress(unsigned long long &result) const override
Definition: coff_format.cpp:632
virtual std::size_t getSectionTableEntrySize() const override
Definition: coff_format.cpp:693
virtual std::size_t getBytesPerWord() const override
Definition: coff_format.cpp:521
virtual bool isObjectFile() const override
Definition: coff_format.cpp:597
llvm::object::COFFObjectFile * file
parser of input COFF file
Definition: coff_format.h:54
virtual bool isExecutable() const override
Definition: coff_format.cpp:607
std::size_t getSizeOfStringTable() const
Definition: coff_format.cpp:730
std::size_t getTimeStamp() const
Definition: coff_format.cpp:764
Definition: file_format.h:45
LoadFlags loadFlags
load flags for configurable file loading
Definition: file_format.h:51
Definition of FileFormat class.
Definition: itanium_ast_ctypes_parser.h:12
LoadFlags
Definition: fftypes.h:69
@ NONE
Definition: fftypes.h:70
Architecture
Definition: fftypes.h:59
Endianness
Definition: byte_value_storage.h:21
Definition: archive_wrapper.h:19