retdec
image.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_LOADER_RETDEC_LOADER_IMAGE_H
8 #define RETDEC_LOADER_RETDEC_LOADER_IMAGE_H
9 
10 #include <memory>
11 
17 
18 namespace retdec {
19 namespace loader {
20 
22 {
23 public:
24  Image(const std::shared_ptr<retdec::fileformat::FileFormat>& fileFormat);
25 
31  virtual bool load() = 0;
32 
33  virtual retdec::utils::Endianness getEndianness() const override;
34  virtual std::size_t getNibbleLength() const override;
35  virtual std::size_t getByteLength() const override;
36  virtual std::size_t getWordLength() const override;
37  virtual std::size_t getBytesPerWord() const override;
38  virtual std::size_t getNumberOfNibblesInByte() const override;
39  virtual bool hasMixedEndianForDouble() const override;
40 
41  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;
42  virtual bool getXBytes(std::uint64_t address, std::uint64_t x, std::vector<std::uint8_t>& res) const override;
43 
44  virtual bool setXByte(std::uint64_t address, std::uint64_t x, std::uint64_t val, retdec::utils::Endianness e = retdec::utils::Endianness::UNKNOWN) override;
45  virtual bool setXBytes(std::uint64_t address, const std::vector<std::uint8_t>& res) override;
46 
49  std::weak_ptr<retdec::fileformat::FileFormat> getFileFormatWptr() const;
50 
51  std::size_t getNumberOfSegments() const;
52  const std::vector<std::unique_ptr<Segment>>& getSegments() const;
53 
54  std::uint64_t getBaseAddress() const;
55  void setBaseAddress(std::uint64_t baseAddress);
56 
57  bool hasDataOnAddress(std::uint64_t address) const;
58  bool hasDataInitializedOnAddress(std::uint64_t address) const;
59  bool hasReadOnlyDataOnAddress(std::uint64_t address) const;
60  bool hasSegmentOnAddress(std::uint64_t address) const;
61  bool isPointer(std::uint64_t address, std::uint64_t* pointer = nullptr) const;
62 
63  Segment* getSegment(std::size_t index);
64  Segment* getSegment(const std::string& name);
65  Segment* getSegmentWithIndex(std::size_t index);
66  Segment* getSegmentFromAddress(std::uint64_t address);
67  const Segment* getSegment(std::size_t index) const;
68  const Segment* getSegment(const std::string& name) const;
69  const Segment* getSegmentWithIndex(std::size_t index) const;
70  const Segment* getSegmentFromAddress(std::uint64_t address) const;
71  const Segment* getEpSegment();
72 
73  std::pair<const std::uint8_t*, std::uint64_t> getRawSegmentData(std::uint64_t address) const;
74 
75  const std::string& getStatusMessage() const;
77 
78 protected:
79  Segment* insertSegment(std::unique_ptr<Segment> segment);
80  void removeSegment(Segment* segment);
81  void nameSegment(Segment* segment);
82  void sortSegments();
83 
84  void setStatusMessage(const std::string& message);
85 
86 private:
87  const Segment* _getSegment(std::size_t index) const;
88  const Segment* _getSegment(const std::string& name) const;
89  const Segment* _getSegmentWithIndex(std::size_t index) const;
90  const Segment* _getSegmentFromAddress(std::uint64_t address) const;
91 
92  std::shared_ptr<retdec::fileformat::FileFormat> _fileFormat;
93  std::vector<std::unique_ptr<Segment>> _segments;
94  std::uint64_t _baseAddress;
96  std::string _statusMessage;
97 };
98 
99 } // namespace loader
100 } // namespace retdec
101 
102 #endif
Declaration of ByteValueStorage.
Definition: file_format.h:45
Definition: image.h:22
virtual bool load()=0
const Segment * _getSegmentWithIndex(std::size_t index) const
Definition: image.cpp:496
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: image.cpp:331
std::pair< const std::uint8_t *, std::uint64_t > getRawSegmentData(std::uint64_t address) const
Definition: image.cpp:307
bool hasDataOnAddress(std::uint64_t address) const
Definition: image.cpp:140
const Segment * _getSegment(std::size_t index) const
Definition: image.cpp:477
Segment * getSegmentWithIndex(std::size_t index)
Definition: image.cpp:243
const retdec::fileformat::LoaderErrorInfo & getLoaderErrorInfo() const
Definition: image.cpp:433
std::uint64_t _baseAddress
Definition: image.h:94
void setBaseAddress(std::uint64_t baseAddress)
Definition: image.cpp:128
bool isPointer(std::uint64_t address, std::uint64_t *pointer=nullptr) const
Definition: image.cpp:409
void nameSegment(Segment *segment)
Definition: image.cpp:461
NameGenerator _namelessSegNameGen
Definition: image.h:95
virtual std::size_t getNumberOfNibblesInByte() const override
Definition: image.cpp:50
Image(const std::shared_ptr< retdec::fileformat::FileFormat > &fileFormat)
Definition: image.cpp:20
Segment * getSegmentFromAddress(std::uint64_t address)
Definition: image.cpp:267
virtual std::size_t getNibbleLength() const override
Definition: image.cpp:30
bool hasSegmentOnAddress(std::uint64_t address) const
Definition: image.cpp:183
std::string _statusMessage
Definition: image.h:96
virtual std::size_t getWordLength() const override
Definition: image.cpp:40
const std::string & getStatusMessage() const
Definition: image.cpp:423
virtual std::size_t getByteLength() const override
Definition: image.cpp:35
void sortSegments()
Definition: image.cpp:469
std::vector< std::unique_ptr< Segment > > _segments
Definition: image.h:93
Segment * getSegment(std::size_t index)
Definition: image.cpp:195
virtual bool getXBytes(std::uint64_t address, std::uint64_t x, std::vector< std::uint8_t > &res) const override
Definition: image.cpp:357
void removeSegment(Segment *segment)
Definition: image.cpp:449
std::shared_ptr< retdec::fileformat::FileFormat > _fileFormat
Definition: image.h:92
Segment * insertSegment(std::unique_ptr< Segment > segment)
Definition: image.cpp:438
retdec::fileformat::FileFormat * getFileFormat()
Definition: image.cpp:66
const Segment * getEpSegment()
Definition: image.cpp:289
virtual std::size_t getBytesPerWord() const override
Definition: image.cpp:45
std::uint64_t getBaseAddress() const
Definition: image.cpp:118
std::size_t getNumberOfSegments() const
Definition: image.cpp:98
virtual bool setXBytes(std::uint64_t address, const std::vector< std::uint8_t > &res) override
Definition: image.cpp:391
const std::vector< std::unique_ptr< Segment > > & getSegments() const
Definition: image.cpp:108
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: image.cpp:374
void setStatusMessage(const std::string &message)
Definition: image.cpp:428
virtual bool hasMixedEndianForDouble() const override
Definition: image.cpp:55
bool hasDataInitializedOnAddress(std::uint64_t address) const
Definition: image.cpp:153
virtual retdec::utils::Endianness getEndianness() const override
Definition: image.cpp:25
const Segment * _getSegmentFromAddress(std::uint64_t address) const
Definition: image.cpp:507
bool hasReadOnlyDataOnAddress(std::uint64_t address) const
Test if there are some read-only data on provided address – address belongs to some read-only section...
Definition: image.cpp:169
std::weak_ptr< retdec::fileformat::FileFormat > getFileFormatWptr() const
Definition: image.cpp:88
Definition: name_generator.h:22
Definition: segment.h:25
Definition: byte_value_storage.h:28
Header file for fileformat types and structures.
Definition of FileFormat class.
Declaration of segment class.
Declaration of name generator.
Generic loader.
Endianness
Definition: byte_value_storage.h:21
Definition: archive_wrapper.h:19
Definition: file_format.h:31