retdec
file_format.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_FILEFORMAT_FILE_FORMAT_FILE_FORMAT_H
8 #define RETDEC_FILEFORMAT_FILE_FORMAT_FILE_FORMAT_H
9 
10 #include <fstream>
11 #include <initializer_list>
12 #include <map>
13 #include <optional>
14 #include <set>
15 #include <utility>
16 #include <vector>
17 
22 
23 namespace retdec {
24 namespace fileformat {
25 
31 {
33  {}
34 
35  std::uint32_t loaderErrorCode; // Loader error code, cast to uint32_t
36  const char * loaderError;
39 };
40 
45 {
46  private:
48  std::ifstream auxFStream;
49  std::istream auxIStream;
50  std::vector<unsigned char> *loadedBytes;
52 
55  void init();
56  void initStream();
58 
61  virtual std::size_t initSectionTableHashOffsets() = 0;
63  protected:
64  std::string crc32;
65  std::string md5;
66  std::string sha256;
67  std::string sectionCrc32;
68  std::string sectionMd5;
69  std::string sectionSha256;
70  std::string filePath;
71  std::istream &fileStream;
72  std::vector<Section*> sections;
73  std::vector<Segment*> segments;
74  std::vector<SymbolTable*> symbolTables;
75  std::vector<RelocationTable*> relocationTables;
76  std::vector<DynamicTable*> dynamicTables;
77  std::vector<unsigned char> bytes;
78  std::vector<String> strings;
79  std::vector<ElfNoteSecSeg> noteSecSegs;
80  std::set<std::uint64_t> unknownRelocs;
92  bool stateIsValid;
93  std::vector<std::pair<std::size_t, std::size_t>> secHashInfo;
94  std::optional<bool> signatureVerified;
96  std::vector<std::pair<std::string, std::string>> anomalies;
97 
100  void clear();
102 
107 
110  void setLoadedBytes(std::vector<unsigned char> *lBytes);
112 
113  public:
114  FileFormat(const std::string & pathToFile, LoadFlags loadFlags = LoadFlags::NONE);
115  FileFormat(std::istream &inputStream, LoadFlags loadFlags = LoadFlags::NONE);
116  FileFormat(const std::uint8_t *data, std::size_t size, LoadFlags loadFlags = LoadFlags::NONE);
117  virtual ~FileFormat();
118 
121  void initArchitecture(
122  Architecture arch,
124  std::size_t bytesPerWord = 4,
127  void loadStrings();
128  void loadStrings(StringType type, std::size_t charSize);
129  void loadStrings(StringType type, std::size_t charSize, const SecSeg* secSeg);
130  void loadImpHash();
131  void loadExpHash();
132  void loadResourceIconHash();
133  bool isInValidState() const;
134  LoadFlags getLoadFlags() const;
136 
139  const Section* getSectionFromOffset(unsigned long long offset) const;
140  const Segment* getSegmentFromOffset(unsigned long long offset) const;
141  const SecSeg* getSectionOrSegmentFromOffset(unsigned long long offset) const;
142  bool haveSectionOrSegmentOnOffset(unsigned long long offset) const;
143  bool haveDataOnOffset(unsigned long long offset) const;
145 
148  const Section* getSectionFromAddress(unsigned long long address) const;
149  const Segment* getSegmentFromAddress(unsigned long long address) const;
150  const SecSeg* getSectionOrSegmentFromAddress(unsigned long long address) const;
151  bool haveSectionOrSegmentOnAddress(unsigned long long address) const;
152  bool haveDataOnAddress(unsigned long long address) const;
153  bool haveReadOnlyDataOnAddress(unsigned long long address) const;
155 
158  virtual std::size_t getNibbleLength() const override;
159  virtual std::size_t getByteLength() const override;
160  virtual std::size_t getWordLength() const override;
161  virtual std::size_t getNumberOfNibblesInByte() const override;
162 
164  const LoaderErrorInfo & getLoaderErrorInfo() const;
165 
168  bool isX86() const;
169  bool isX86_64() const;
170  bool isX86OrX86_64() const;
171  bool isArm() const;
172  bool isPowerPc() const;
173  bool isMips() const;
174  bool isUnknownArch() const;
175  bool isPe() const;
176  bool isElf() const;
177  bool isCoff() const;
178  bool isMacho() const;
179  bool isIntelHex() const;
180  bool isRawData() const;
181  bool isUnknownFormat() const;
182  bool isWindowsDriver() const;
183  bool hasCrc32() const;
184  bool hasMd5() const;
185  bool hasSha256() const;
186  bool hasSectionTableCrc32() const;
187  bool hasSectionTableMd5() const;
188  bool hasSectionTableSha256() const;
189  std::string getCrc32() const;
190  std::string getMd5() const;
191  std::string getSha256() const;
192  std::string getSectionTableCrc32() const;
193  std::string getSectionTableMd5() const;
194  std::string getSectionTableSha256() const;
195  std::string getPathToFile() const;
196  Format getFileFormat() const;
197  std::size_t getNumberOfSections() const;
198  std::size_t getNumberOfSegments() const;
199  std::size_t getNumberOfSymbolTables() const;
200  std::size_t getNumberOfRelocationTables() const;
201  std::size_t getNumberOfDynamicTables() const;
202  std::size_t getFileLength() const;
203  std::size_t getLoadedFileLength() const;
204  std::size_t getOverlaySize() const;
205  bool getOverlayEntropy(double &res) const;
206  std::size_t nibblesFromBytes(std::size_t bytes) const;
207  std::size_t bytesFromNibbles(std::size_t nibbles) const;
208  std::size_t bytesFromNibblesRounded(std::size_t nibbles) const;
209  bool getOffsetFromAddress(unsigned long long &result, unsigned long long address) const;
210  bool getAddressFromOffset(unsigned long long &result, unsigned long long offset) const;
211  bool getBytes(std::vector<std::uint8_t> &result, unsigned long long offset, unsigned long long numberOfBytes) const;
212  bool getEpBytes(std::vector<std::uint8_t> &result, unsigned long long numberOfBytes) const;
213  bool getHexBytes(std::string &result, unsigned long long offset, unsigned long long numberOfBytes) const;
214  bool getHexEpBytes(std::string &result, unsigned long long numberOfBytes) const;
215  bool getHexBytesFromEnd(std::string &result, unsigned long long numberOfBytes) const;
216  bool getString(std::string &result, unsigned long long offset, unsigned long long numberOfBytes) const;
217  bool getStringFromEnd(std::string &result, unsigned long long numberOfBytes) const;
218  bool isObjectStretchedOverSections(std::size_t addr, std::size_t size) const;
219  const Section* getEpSection();
220  const Section* getSection(const std::string &secName) const;
221  const Section* getSection(unsigned long long secIndex) const;
222  const Section* getLastSection() const;
223  const Section* getLastButOneSection() const;
224  const Segment* getEpSegment();
225  const Segment* getSegment(const std::string &segName) const;
226  const Segment* getSegment(unsigned long long segIndex) const;
227  const Segment* getLastSegment() const;
228  const Segment* getLastButOneSegment() const;
229  const SymbolTable* getSymbolTable(unsigned long long tabIndex) const;
230  const RelocationTable* getRelocationTable(unsigned long long tabIndex) const;
231  const DynamicTable* getDynamicTable(unsigned long long tabIndex) const;
232  const ImportTable* getImportTable() const;
233  const ExportTable* getExportTable() const;
234  const ResourceTable* getResourceTable() const;
235  const ResourceTree* getResourceTree() const;
236  const RichHeader* getRichHeader() const;
237  const PdbInfo* getPdbInfo() const;
238  const CertificateTable* getCertificateTable() const;
239  const TlsInfo* getTlsInfo() const;
240  const ElfCoreInfo* getElfCoreInfo() const;
241  const Symbol* getSymbol(const std::string &name) const;
242  const Symbol* getSymbol(unsigned long long address) const;
243  const Relocation* getRelocation(const std::string &name) const;
244  const Relocation* getRelocation(unsigned long long address) const;
245  const Import* getImport(const std::string &name) const;
246  const Import* getImport(unsigned long long address) const;
247  const Export* getExport(const std::string &name) const;
248  const Export* getExport(unsigned long long address) const;
249  const Resource* getManifestResource() const;
250  const Resource* getVersionResource() const;
251  bool isSignaturePresent() const;
252  bool isSignatureVerified() const;
255 
258  const std::vector<Section*>& getSections() const;
259  const std::vector<Section*> getSections(std::initializer_list<std::string> secs) const;
260  const std::vector<Segment*>& getSegments() const;
261  const std::vector<Segment*> getSegments(std::initializer_list<std::string> segs) const;
262  const std::vector<SymbolTable*>& getSymbolTables() const;
263  const std::vector<RelocationTable*>& getRelocationTables() const;
264  const std::vector<DynamicTable*>& getDynamicTables() const;
265  const std::vector<unsigned char>& getBytes() const;
266  const std::vector<unsigned char>& getLoadedBytes() const;
267  const unsigned char* getBytesData() const;
268  const unsigned char* getLoadedBytesData() const;
269  const std::vector<String>& getStrings() const;
270  const std::vector<ElfNoteSecSeg>& getElfNoteSecSegs() const;
271  const std::set<std::uint64_t>& getUnknownRelocations() const;
272  const std::vector<std::pair<std::string,std::string>> &getAnomalies() const;
274 
277  virtual bool getXByte(std::uint64_t address, std::uint64_t x, std::uint64_t &res, retdec::utils::Endianness e = retdec::utils::Endianness::UNKNOWN) const override;
278  virtual bool getXBytes(std::uint64_t address, std::uint64_t x, std::vector<std::uint8_t> &res) const override;
279  virtual bool setXByte(std::uint64_t address, std::uint64_t x, std::uint64_t val, retdec::utils::Endianness e = retdec::utils::Endianness::UNKNOWN) override;
280  virtual bool setXBytes(std::uint64_t address, const std::vector<std::uint8_t> &val) override;
281  bool isPointer(unsigned long long address, std::uint64_t* pointer = nullptr) const;
283 
286  bool get1ByteOffset(std::uint64_t offset, std::uint64_t &res, retdec::utils::Endianness e = retdec::utils::Endianness::UNKNOWN) const;
287  bool get2ByteOffset(std::uint64_t offset, std::uint64_t &res, retdec::utils::Endianness e = retdec::utils::Endianness::UNKNOWN) const;
288  bool get4ByteOffset(std::uint64_t offset, std::uint64_t &res, retdec::utils::Endianness e = retdec::utils::Endianness::UNKNOWN) const;
289  bool get8ByteOffset(std::uint64_t offset, std::uint64_t &res, retdec::utils::Endianness e = retdec::utils::Endianness::UNKNOWN) const;
290  bool get10ByteOffset(std::uint64_t offset, long double &res) const;
291  bool getXByteOffset(std::uint64_t offset, std::uint64_t x, std::uint64_t &res, retdec::utils::Endianness e = retdec::utils::Endianness::UNKNOWN) const;
292  bool getXBytesOffset(std::uint64_t offset, std::uint64_t x, std::vector<std::uint8_t> &res) const;
293  bool getWordOffset(std::uint64_t offset, std::uint64_t &res, retdec::utils::Endianness e = retdec::utils::Endianness::UNKNOWN) const;
294  bool getNTBSOffset(std::uint64_t offset, std::string &res, std::size_t size = 0) const;
295  bool getNTWSOffset(std::uint64_t offset, std::size_t width, std::vector<std::uint64_t> &res) const;
297 
300  virtual std::string getFileFormatName() const;
301  virtual std::size_t getDeclaredFileLength() const;
302  virtual bool areSectionsValid() const;
304 
307  virtual bool isObjectFile() const = 0;
308  virtual bool isDll() const = 0;
309  virtual bool isExecutable() const = 0;
310  virtual bool getMachineCode(unsigned long long &result) const = 0;
311  virtual bool getAbiVersion(unsigned long long &result) const = 0;
312  virtual bool getImageBaseAddress(unsigned long long &imageBase) const = 0;
313  virtual bool getEpAddress(unsigned long long &result) const = 0;
314  virtual bool getEpOffset(unsigned long long &epOffset) const = 0;
315  virtual Architecture getTargetArchitecture() const = 0;
316  virtual std::size_t getDeclaredNumberOfSections() const = 0;
317  virtual std::size_t getDeclaredNumberOfSegments() const = 0;
318  virtual std::size_t getSectionTableOffset() const = 0;
319  virtual std::size_t getSectionTableEntrySize() const = 0;
320  virtual std::size_t getSegmentTableOffset() const = 0;
321  virtual std::size_t getSegmentTableEntrySize() const = 0;
323 
326  void dump();
327  void dump(std::string &dumpFile);
328  void dumpRegionsValidity();
329  void dumpRegionsValidity(std::string &dumpStr);
330  void dumpResourceTree();
331  void dumpResourceTree(std::string &dumpStr);
333 };
334 
335 } // namespace fileformat
336 } // namespace retdec
337 
338 #endif
Array of bytes to std::istream abstraction.
Declaration of ByteValueStorage.
Definition: address.h:21
static const uint64_t Undefined
Definition: address.h:47
Definition: certificate_table.h:21
Definition: dynamic_table.h:21
Definition: elf_core.h:52
Definition: export_table.h:21
Definition: export.h:19
Definition: file_format.h:45
std::size_t getOverlaySize() const
Definition: file_format.cpp:1070
const CertificateTable * getCertificateTable() const
Definition: file_format.cpp:1584
bool isPointer(unsigned long long address, std::uint64_t *pointer=nullptr) const
Definition: file_format.cpp:2001
const ElfCoreInfo * getElfCoreInfo() const
Definition: file_format.cpp:1602
ImportTable * importTable
table of imports
Definition: file_format.h:81
virtual bool getAbiVersion(unsigned long long &result) const =0
const SecSeg * getSectionOrSegmentFromAddress(unsigned long long address) const
Definition: file_format.cpp:628
std::size_t getNumberOfDynamicTables() const
Definition: file_format.cpp:1042
std::vector< Section * > sections
file sections
Definition: file_format.h:72
virtual bool isExecutable() const =0
bool getHexBytesFromEnd(std::string &result, unsigned long long numberOfBytes) const
Definition: file_format.cpp:1268
bool getXBytesOffset(std::uint64_t offset, std::uint64_t x, std::vector< std::uint8_t > &res) const
Definition: file_format.cpp:2117
std::string getSha256() const
Definition: file_format.cpp:950
const std::vector< Section * > & getSections() const
Definition: file_format.cpp:1784
virtual bool getMachineCode(unsigned long long &result) const =0
virtual Architecture getTargetArchitecture() const =0
const std::set< std::uint64_t > & getUnknownRelocations() const
Definition: file_format.cpp:1929
const Segment * getSegmentFromAddress(unsigned long long address) const
Definition: file_format.cpp:607
std::istream auxIStream
auxiliary input stream
Definition: file_format.h:49
bool hasCrc32() const
Definition: file_format.cpp:878
const ExportTable * getExportTable() const
Definition: file_format.cpp:1539
const Segment * getSegmentFromOffset(unsigned long long offset) const
Definition: file_format.cpp:525
const std::vector< unsigned char > & getBytes() const
Definition: file_format.cpp:1879
bool hasMd5() const
Definition: file_format.cpp:887
virtual std::size_t getDeclaredFileLength() const
Definition: file_format.cpp:2188
void dumpResourceTree()
Definition: file_format.cpp:2603
bool getHexEpBytes(std::string &result, unsigned long long numberOfBytes) const
Definition: file_format.cpp:1248
bool getEpBytes(std::vector< std::uint8_t > &result, unsigned long long numberOfBytes) const
Definition: file_format.cpp:1212
ElfCoreInfo * elfCoreInfo
information about core file structures
Definition: file_format.h:89
const std::vector< RelocationTable * > & getRelocationTables() const
Definition: file_format.cpp:1861
std::vector< ElfNoteSecSeg > noteSecSegs
note sections or segemnts found in ELF file
Definition: file_format.h:79
std::optional< bool > signatureVerified
indicates whether the signature is present and also verified
Definition: file_format.h:94
virtual bool getImageBaseAddress(unsigned long long &imageBase) const =0
bool haveReadOnlyDataOnAddress(unsigned long long address) const
Test if there are some read-only data on provided address – address belongs to some read-only section...
Definition: file_format.cpp:669
bool isPe() const
Definition: file_format.cpp:799
const Import * getImport(const std::string &name) const
Definition: file_format.cpp:1700
const DynamicTable * getDynamicTable(unsigned long long tabIndex) const
Definition: file_format.cpp:1521
void initArchitecture(Architecture arch, retdec::utils::Endianness endian=retdec::utils::Endianness::UNKNOWN, std::size_t bytesPerWord=4, retdec::common::Address entryPoint=retdec::common::Address::Undefined, retdec::common::Address sectionVMA=retdec::common::Address::Undefined)
Definition: file_format.cpp:341
virtual bool setXBytes(std::uint64_t address, const std::vector< std::uint8_t > &val) override
Definition: file_format.cpp:1989
std::string sectionMd5
MD5 of section table.
Definition: file_format.h:68
virtual bool getXByte(std::uint64_t address, std::uint64_t x, std::uint64_t &res, retdec::utils::Endianness e=retdec::utils::Endianness::UNKNOWN) const override
Definition: file_format.cpp:1951
std::string getCrc32() const
Definition: file_format.cpp:932
const Section * getLastButOneSection() const
Definition: file_format.cpp:1406
bool hasSectionTableMd5() const
Definition: file_format.cpp:914
std::size_t getNumberOfSymbolTables() const
Definition: file_format.cpp:1024
bool get1ByteOffset(std::uint64_t offset, std::uint64_t &res, retdec::utils::Endianness e=retdec::utils::Endianness::UNKNOWN) const
Definition: file_format.cpp:2022
bool isUnknownArch() const
Definition: file_format.cpp:790
bool isUnknownFormat() const
Definition: file_format.cpp:853
bool isInValidState() const
Definition: file_format.cpp:484
bool haveSectionOrSegmentOnAddress(unsigned long long address) const
Definition: file_format.cpp:644
std::size_t getNumberOfSegments() const
Definition: file_format.cpp:1015
bool isSignaturePresent() const
Definition: file_format.cpp:1757
virtual bool areSectionsValid() const
Definition: file_format.cpp:2216
Format getFileFormat() const
Definition: file_format.cpp:997
bool isWindowsDriver() const
Definition: file_format.cpp:862
const Section * getEpSection()
Definition: file_format.cpp:1332
bool hasSectionTableSha256() const
Definition: file_format.cpp:923
virtual std::size_t getSectionTableEntrySize() const =0
CertificateTable * certificateTable
table of certificates
Definition: file_format.h:87
bool isObjectStretchedOverSections(std::size_t addr, std::size_t size) const
Definition: file_format.cpp:1307
bool isArm() const
Definition: file_format.cpp:763
const Symbol * getSymbol(const std::string &name) const
Definition: file_format.cpp:1612
std::size_t getLoadedFileLength() const
Definition: file_format.cpp:1060
const Segment * getEpSegment()
Definition: file_format.cpp:1416
bool getAddressFromOffset(unsigned long long &result, unsigned long long offset) const
Definition: file_format.cpp:1161
ExportTable * exportTable
table of exports
Definition: file_format.h:82
std::string getSectionTableSha256() const
Definition: file_format.cpp:977
bool getNTBSOffset(std::uint64_t offset, std::string &res, std::size_t size=0) const
Definition: file_format.cpp:2148
const Section * getLastSection() const
Definition: file_format.cpp:1396
void computeSectionTableHashes()
Definition: file_format.cpp:274
ResourceTable * resourceTable
table of resources
Definition: file_format.h:83
const LoaderErrorInfo & getLoaderErrorInfo() const
Definition: file_format.cpp:727
void loadStrings()
Definition: file_format.cpp:374
std::set< std::uint64_t > unknownRelocs
unknown relocations
Definition: file_format.h:80
virtual ~FileFormat()
Definition: file_format.cpp:172
bool isMacho() const
Definition: file_format.cpp:826
const std::vector< DynamicTable * > & getDynamicTables() const
Definition: file_format.cpp:1870
bool getString(std::string &result, unsigned long long offset, unsigned long long numberOfBytes) const
Definition: file_format.cpp:1281
bool isCoff() const
Definition: file_format.cpp:817
bool isX86_64() const
Definition: file_format.cpp:745
std::vector< Segment * > segments
file segments
Definition: file_format.h:73
const Segment * getLastButOneSegment() const
Definition: file_format.cpp:1490
const std::vector< std::pair< std::string, std::string > > & getAnomalies() const
Definition: file_format.cpp:1938
const Section * getSectionFromAddress(unsigned long long address) const
Definition: file_format.cpp:586
const retdec::common::RangeContainer< std::uint64_t > & getNonDecodableAddressRanges() const
Definition: file_format.cpp:1775
const std::vector< SymbolTable * > & getSymbolTables() const
Definition: file_format.cpp:1852
const RelocationTable * getRelocationTable(unsigned long long tabIndex) const
Definition: file_format.cpp:1511
bool get2ByteOffset(std::uint64_t offset, std::uint64_t &res, retdec::utils::Endianness e=retdec::utils::Endianness::UNKNOWN) const
Definition: file_format.cpp:2034
LoadFlags loadFlags
load flags for configurable file loading
Definition: file_format.h:51
bool haveDataOnAddress(unsigned long long address) const
Definition: file_format.cpp:656
std::string sha256
SHA256 of file content.
Definition: file_format.h:66
const PdbInfo * getPdbInfo() const
Definition: file_format.cpp:1575
ResourceTree * resourceTree
structure of resource tree
Definition: file_format.h:84
const Segment * getSegment(const std::string &segName) const
Definition: file_format.cpp:1434
void setLoadedBytes(std::vector< unsigned char > *lBytes)
Definition: file_format.cpp:330
TlsInfo * tlsInfo
thread-local information
Definition: file_format.h:88
std::string sectionSha256
SHA256 of section table.
Definition: file_format.h:69
std::vector< std::pair< std::string, std::string > > anomalies
file format anomalies
Definition: file_format.h:96
virtual std::size_t getSegmentTableOffset() const =0
bool getXByteOffset(std::uint64_t offset, std::uint64_t x, std::uint64_t &res, retdec::utils::Endianness e=retdec::utils::Endianness::UNKNOWN) const
Definition: file_format.cpp:2095
const Segment * getLastSegment() const
Definition: file_format.cpp:1480
std::string getSectionTableCrc32() const
Definition: file_format.cpp:959
const ImportTable * getImportTable() const
Definition: file_format.cpp:1530
const Resource * getVersionResource() const
Definition: file_format.cpp:1748
bool getOverlayEntropy(double &res) const
Definition: file_format.cpp:1082
bool get4ByteOffset(std::uint64_t offset, std::uint64_t &res, retdec::utils::Endianness e=retdec::utils::Endianness::UNKNOWN) const
Definition: file_format.cpp:2046
virtual std::size_t getSegmentTableEntrySize() const =0
virtual std::size_t getDeclaredNumberOfSegments() const =0
Format fileFormat
format of input file
Definition: file_format.h:90
bool stateIsValid
internal state of instance
Definition: file_format.h:92
const SymbolTable * getSymbolTable(unsigned long long tabIndex) const
Definition: file_format.cpp:1501
std::size_t getNumberOfSections() const
Definition: file_format.cpp:1006
std::string getMd5() const
Definition: file_format.cpp:941
virtual std::size_t getWordLength() const override
Definition: file_format.cpp:706
const std::vector< Segment * > & getSegments() const
Definition: file_format.cpp:1818
std::vector< String > strings
detected strings
Definition: file_format.h:78
const Export * getExport(const std::string &name) const
Definition: file_format.cpp:1720
const ResourceTable * getResourceTable() const
Definition: file_format.cpp:1548
LoaderErrorInfo _ldrErrInfo
loader error (e.g. Windows loader error for PE files)
Definition: file_format.h:91
bool hasSectionTableCrc32() const
Definition: file_format.cpp:905
bool getHexBytes(std::string &result, unsigned long long offset, unsigned long long numberOfBytes) const
Definition: file_format.cpp:1230
const Section * getSectionFromOffset(unsigned long long offset) const
Definition: file_format.cpp:504
void initStream()
Definition: file_format.cpp:211
bool haveDataOnOffset(unsigned long long offset) const
Definition: file_format.cpp:574
virtual std::size_t initSectionTableHashOffsets()=0
std::string getPathToFile() const
Definition: file_format.cpp:986
virtual std::size_t getNibbleLength() const override
Definition: file_format.cpp:681
bool get10ByteOffset(std::uint64_t offset, long double &res) const
Definition: file_format.cpp:2071
virtual std::size_t getDeclaredNumberOfSections() const =0
const RichHeader * getRichHeader() const
Definition: file_format.cpp:1566
std::size_t bytesFromNibbles(std::size_t nibbles) const
Definition: file_format.cpp:1110
const unsigned char * getLoadedBytesData() const
Definition: file_format.cpp:1906
const Section * getSection(const std::string &secName) const
Definition: file_format.cpp:1350
std::vector< std::pair< std::size_t, std::size_t > > secHashInfo
information for calculation of section table hash
Definition: file_format.h:93
byte_array_buffer auxBuff
auxiliary input buffer
Definition: file_format.h:47
std::size_t nibblesFromBytes(std::size_t bytes) const
Definition: file_format.cpp:1100
virtual std::string getFileFormatName() const
Definition: file_format.cpp:2175
std::vector< unsigned char > * loadedBytes
reference to serialized content of input file
Definition: file_format.h:50
void loadExpHash()
Definition: file_format.cpp:457
const TlsInfo * getTlsInfo() const
Definition: file_format.cpp:1593
bool hasSha256() const
Definition: file_format.cpp:896
std::size_t getFileLength() const
Definition: file_format.cpp:1051
bool isSignatureVerified() const
Definition: file_format.cpp:1766
std::size_t bytesFromNibblesRounded(std::size_t nibbles) const
Definition: file_format.cpp:1121
bool isPowerPc() const
Definition: file_format.cpp:772
std::string sectionCrc32
CRC32 of section table.
Definition: file_format.h:67
virtual bool getXBytes(std::uint64_t address, std::uint64_t x, std::vector< std::uint8_t > &res) const override
Definition: file_format.cpp:1977
RichHeader * richHeader
rich header
Definition: file_format.h:85
virtual bool isObjectFile() const =0
std::vector< unsigned char > bytes
content of file as bytes
Definition: file_format.h:77
virtual bool setXByte(std::uint64_t address, std::uint64_t x, std::uint64_t val, retdec::utils::Endianness e=retdec::utils::Endianness::UNKNOWN) override
Definition: file_format.cpp:1984
bool getStringFromEnd(std::string &result, unsigned long long numberOfBytes) const
Definition: file_format.cpp:1295
const ResourceTree * getResourceTree() const
Definition: file_format.cpp:1557
std::size_t getNumberOfRelocationTables() const
Definition: file_format.cpp:1033
bool haveSectionOrSegmentOnOffset(unsigned long long offset) const
Definition: file_format.cpp:562
virtual bool isDll() const =0
std::string filePath
name of input file
Definition: file_format.h:70
bool isMips() const
Definition: file_format.cpp:781
void clear()
Definition: file_format.cpp:226
LoadFlags getLoadFlags() const
Definition: file_format.cpp:493
PdbInfo * pdbInfo
information about related PDB debug file
Definition: file_format.h:86
bool getWordOffset(std::uint64_t offset, std::uint64_t &res, retdec::utils::Endianness e=retdec::utils::Endianness::UNKNOWN) const
Definition: file_format.cpp:2136
std::ifstream auxFStream
auxiliary input file stream
Definition: file_format.h:48
virtual std::size_t getByteLength() const override
Definition: file_format.cpp:693
bool getNTWSOffset(std::uint64_t offset, std::size_t width, std::vector< std::uint64_t > &res) const
Definition: file_format.cpp:2163
const unsigned char * getBytesData() const
Definition: file_format.cpp:1897
void dumpRegionsValidity()
Definition: file_format.cpp:2561
const std::vector< String > & getStrings() const
Definition: file_format.cpp:1915
std::vector< DynamicTable * > dynamicTables
tables with dynamic records
Definition: file_format.h:76
bool isX86() const
Definition: file_format.cpp:736
virtual std::size_t getNumberOfNibblesInByte() const override
Definition: file_format.cpp:718
virtual bool getEpOffset(unsigned long long &epOffset) const =0
bool getOffsetFromAddress(unsigned long long &result, unsigned long long address) const
Definition: file_format.cpp:1135
const std::vector< unsigned char > & getLoadedBytes() const
Definition: file_format.cpp:1888
std::string crc32
CRC32 of file content.
Definition: file_format.h:64
const Resource * getManifestResource() const
Definition: file_format.cpp:1739
const std::vector< ElfNoteSecSeg > & getElfNoteSecSegs() const
Definition: file_format.cpp:1924
const SecSeg * getSectionOrSegmentFromOffset(unsigned long long offset) const
Definition: file_format.cpp:546
bool isRawData() const
Definition: file_format.cpp:844
std::vector< RelocationTable * > relocationTables
relocation tables
Definition: file_format.h:75
void loadResourceIconHash()
Definition: file_format.cpp:470
std::string md5
MD5 of file content.
Definition: file_format.h:65
bool isElf() const
Definition: file_format.cpp:808
bool isX86OrX86_64() const
Definition: file_format.cpp:754
std::string getSectionTableMd5() const
Definition: file_format.cpp:968
virtual bool getEpAddress(unsigned long long &result) const =0
retdec::common::RangeContainer< std::uint64_t > nonDecodableRanges
Address ranges which should not be decoded for instructions.
Definition: file_format.h:95
const Relocation * getRelocation(const std::string &name) const
Definition: file_format.cpp:1656
std::vector< SymbolTable * > symbolTables
symbol tables
Definition: file_format.h:74
std::istream & fileStream
stream representation of input file
Definition: file_format.h:71
bool get8ByteOffset(std::uint64_t offset, std::uint64_t &res, retdec::utils::Endianness e=retdec::utils::Endianness::UNKNOWN) const
Definition: file_format.cpp:2058
FileFormat(const std::string &pathToFile, LoadFlags loadFlags=LoadFlags::NONE)
Definition: file_format.cpp:120
void loadImpHash()
Definition: file_format.cpp:444
void init()
Definition: file_format.cpp:180
virtual std::size_t getSectionTableOffset() const =0
void dump()
Definition: file_format.cpp:2336
bool isIntelHex() const
Definition: file_format.cpp:835
Definition: import_table.h:22
Definition: import.h:19
Definition: pdb_info.h:19
Definition: relocation_table.h:21
Definition: relocation.h:20
Definition: resource_table.h:24
Definition: resource_tree.h:19
Definition: resource.h:24
Definition: rich_header.h:22
Definition: sec_seg.h:24
Definition: section.h:19
Definition: segment.h:19
Definition: symbol_table.h:22
Definition: symbol.h:19
Definition: tls_info.h:20
Definition: byte_array_buffer.h:23
Definition: byte_value_storage.h:28
A mixin to make classes non-copyable.
Definition: non_copyable.h:27
Header file for fileformat types and structures.
Format
Definition: fftypes.h:44
LoadFlags
Definition: fftypes.h:69
@ NONE
Definition: fftypes.h:70
Architecture
Definition: fftypes.h:59
StringType
Definition: string.h:16
Endianness
Definition: byte_value_storage.h:21
Definition: archive_wrapper.h:19
A mixin to make classes non-copyable.
Definition: file_format.h:31
bool isLoadableAnyway
Definition: file_format.h:38
const char * loaderErrorUserFriendly
Definition: file_format.h:37
const char * loaderError
Definition: file_format.h:36
std::uint32_t loaderErrorCode
Definition: file_format.h:35
LoaderErrorInfo()
Definition: file_format.h:32