retdec
raw_data_format.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_FILEFORMAT_FILE_FORMAT_RAW_DATA_RAW_DATA_FORMAT_H
8 #define RETDEC_FILEFORMAT_FILE_FORMAT_RAW_DATA_RAW_DATA_FORMAT_H
9 
10 #include <cassert>
11 
12 #include "retdec/common/address.h"
14 
15 namespace retdec {
16 namespace fileformat {
17 
34 class RawDataFormat : public FileFormat
35 {
36  private:
37  Section *section = nullptr;
38  std::string secName = ".data";
40  bool hasEntryPoint = false;
41  unsigned long long epAddress = 0;
42 
43  std::size_t bytesPerWord = 4;
44  std::size_t bytesLength = 8;
47 
50  void initStructures();
52 
55  virtual std::size_t initSectionTableHashOffsets() override;
57 
60  bool isEntryPointValid() const;
62 
63  public:
64  RawDataFormat(std::istream &inputStream, LoadFlags loadFlags = LoadFlags::NONE);
66  RawDataFormat(const std::uint8_t *data, std::size_t size, LoadFlags loadFlags = LoadFlags::NONE);
67 
70  virtual retdec::utils::Endianness getEndianness() const override;
71  virtual std::size_t getBytesPerWord() const override;
72  virtual std::size_t getByteLength() const override;
73  virtual bool hasMixedEndianForDouble() const override;
75 
78  virtual std::size_t getDeclaredFileLength() const override;
79  virtual bool areSectionsValid() const override;
80  virtual bool isObjectFile() const override;
81  virtual bool isDll() const override;
82  virtual bool isExecutable() const override;
83  virtual bool getMachineCode(unsigned long long &result) const override;
84  virtual bool getAbiVersion(unsigned long long &result) const override;
85  virtual bool getImageBaseAddress(unsigned long long &imageBase) const override;
86  virtual bool getEpAddress(unsigned long long &result) const override;
87  virtual bool getEpOffset(unsigned long long &result) const override;
88  virtual Architecture getTargetArchitecture() const override;
89  virtual std::size_t getDeclaredNumberOfSections() const override;
90  virtual std::size_t getDeclaredNumberOfSegments() const override;
91  virtual std::size_t getSectionTableOffset() const override;
92  virtual std::size_t getSectionTableEntrySize() const override;
93  virtual std::size_t getSegmentTableOffset() const override;
94  virtual std::size_t getSegmentTableEntrySize() const override;
96 
104  void setBytesPerWord(std::size_t b);
105  void setBytesLength(std::size_t l);
106  void setEntryPoint(retdec::common::Address entryPoint);
107  void setBaseAddress(retdec::common::Address baseAddress);
109 
121  template<typename T>
122  std::size_t appendData(const T &d)
123  {
124  const auto *pd = reinterpret_cast<const unsigned char*>(&d);
125  assert(pd && "Invalid data");
126  assert(section && "Section must be initialized in constructor");
127  std::vector<unsigned char> aBytes(pd, pd + sizeof(d));
128  const auto pos = bytes.size();
129  bytes.insert(bytes.end(), aBytes.begin(), aBytes.end());
130  section->setSizeInFile(bytes.size());
131  section->setSizeInMemory(bytes.size());
132  section->load(this);
133  return section->getAddress() + pos;
134  }
135 
136  std::string dumpData() const;
137 };
138 
139 } // namespace fileformat
140 } // namespace retdec
141 
142 #endif
Definition: address.h:21
Definition: file_format.h:45
LoadFlags loadFlags
load flags for configurable file loading
Definition: file_format.h:51
std::vector< unsigned char > bytes
content of file as bytes
Definition: file_format.h:77
std::string filePath
name of input file
Definition: file_format.h:70
Definition: raw_data_format.h:35
virtual std::size_t getSectionTableOffset() const override
Definition: raw_data_format.cpp:197
Architecture architecture
Definition: raw_data_format.h:45
void setBaseAddress(retdec::common::Address baseAddress)
Definition: raw_data_format.cpp:267
virtual bool isDll() const override
Definition: raw_data_format.cpp:129
void setBytesPerWord(std::size_t b)
Definition: raw_data_format.cpp:239
std::size_t bytesLength
Definition: raw_data_format.h:44
virtual std::size_t initSectionTableHashOffsets() override
Definition: raw_data_format.cpp:75
retdec::utils::Endianness endianness
Definition: raw_data_format.h:46
std::size_t appendData(const T &d)
Definition: raw_data_format.h:122
Section * section
Definition: raw_data_format.h:37
void setTargetArchitecture(Architecture a)
Definition: raw_data_format.cpp:221
std::string dumpData() const
Definition: raw_data_format.cpp:276
virtual bool isObjectFile() const override
Definition: raw_data_format.cpp:124
virtual bool getMachineCode(unsigned long long &result) const override
Definition: raw_data_format.cpp:139
virtual std::size_t getBytesPerWord() const override
Definition: raw_data_format.cpp:99
virtual bool hasMixedEndianForDouble() const override
Definition: raw_data_format.cpp:109
virtual bool getImageBaseAddress(unsigned long long &imageBase) const override
Definition: raw_data_format.cpp:149
virtual retdec::utils::Endianness getEndianness() const override
Definition: raw_data_format.cpp:94
virtual bool getEpOffset(unsigned long long &result) const override
Definition: raw_data_format.cpp:167
void setEndianness(retdec::utils::Endianness e)
Definition: raw_data_format.cpp:230
virtual std::size_t getSegmentTableEntrySize() const override
Definition: raw_data_format.cpp:212
virtual std::size_t getByteLength() const override
Definition: raw_data_format.cpp:104
std::string secName
Definition: raw_data_format.h:38
virtual bool areSectionsValid() const override
Definition: raw_data_format.cpp:119
bool hasEntryPoint
Definition: raw_data_format.h:40
virtual std::size_t getSectionTableEntrySize() const override
Definition: raw_data_format.cpp:202
virtual std::size_t getDeclaredFileLength() const override
Definition: raw_data_format.cpp:114
RawDataFormat(std::istream &inputStream, LoadFlags loadFlags=LoadFlags::NONE)
Definition: raw_data_format.cpp:23
void setEntryPoint(retdec::common::Address entryPoint)
Definition: raw_data_format.cpp:257
virtual bool getAbiVersion(unsigned long long &result) const override
Definition: raw_data_format.cpp:144
virtual std::size_t getDeclaredNumberOfSections() const override
Definition: raw_data_format.cpp:187
virtual std::size_t getDeclaredNumberOfSegments() const override
Definition: raw_data_format.cpp:192
void setBytesLength(std::size_t l)
Definition: raw_data_format.cpp:248
virtual Architecture getTargetArchitecture() const override
Definition: raw_data_format.cpp:182
void initStructures()
Definition: raw_data_format.cpp:56
unsigned long long epAddress
Definition: raw_data_format.h:41
virtual bool isExecutable() const override
Definition: raw_data_format.cpp:134
virtual bool getEpAddress(unsigned long long &result) const override
Definition: raw_data_format.cpp:154
Section::Type secType
Definition: raw_data_format.h:39
virtual std::size_t getSegmentTableOffset() const override
Definition: raw_data_format.cpp:207
std::size_t bytesPerWord
Definition: raw_data_format.h:43
bool isEntryPointValid() const
Definition: raw_data_format.cpp:84
void setSizeInFile(unsigned long long sFileSize)
Definition: sec_seg.cpp:478
Type
Definition: sec_seg.h:27
void load(const FileFormat *sOwner)
Definition: sec_seg.cpp:572
unsigned long long getAddress() const
Definition: sec_seg.cpp:296
void setSizeInMemory(unsigned long long sMemorySize)
Definition: sec_seg.cpp:496
Definition: section.h:19
Address, address pair and other derived class representation.
Definition of FileFormat class.
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