retdec
segment.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_LOADER_RETDEC_LOADER_SEGMENT_H
8 #define RETDEC_LOADER_RETDEC_LOADER_SEGMENT_H
9 
10 #include <cstdint>
11 #include <memory>
12 #include <string>
13 #include <vector>
14 
15 #include "retdec/common/range.h"
20 
21 namespace retdec {
22 namespace loader {
23 
24 class Segment
25 {
26 public:
27  Segment(const retdec::fileformat::SecSeg* secSeg, std::uint64_t address, std::uint64_t size, std::unique_ptr<SegmentDataSource>&& dataSource);
28  Segment(const Segment& segment);
29 
31 
32  bool containsAddress(std::uint64_t address) const;
33  std::uint64_t getAddress() const;
34  std::uint64_t getEndAddress() const;
35  std::uint64_t getPhysicalEndAddress() const;
36  std::uint64_t getSize() const;
37  std::uint64_t getPhysicalSize() const;
41  std::pair<const std::uint8_t*, std::uint64_t> getRawData() const;
42 
43  bool hasName() const;
44  const std::string& getName() const;
45  void setName(const std::string& name);
46 
47  bool getBytes(std::vector<unsigned char>& result) const;
48  bool getBytes(std::vector<unsigned char>& result, std::uint64_t addressOffset, std::uint64_t size) const;
49  bool getBits(std::string& result) const;
50  bool getBits(std::string& result, std::uint64_t addressOffset, std::uint64_t bytesCount) const;
51 
52  bool setBytes(const std::vector<unsigned char>& value, std::uint64_t addressOffset);
53 
54  void resize(std::uint64_t newSize);
55  void shrink(std::uint64_t shrinkOffset, std::uint64_t newSize);
56 
58 
59 private:
61  std::uint64_t _address;
62  std::uint64_t _size;
63  std::unique_ptr<SegmentDataSource> _dataSource;
64  std::string _name;
66 };
67 
68 } // namespace loader
69 } // namespace retdec
70 
71 #endif
Definition: sec_seg.h:24
Definition: segment.h:25
void setName(const std::string &name)
Definition: segment.cpp:153
const std::string & getName() const
Definition: segment.cpp:143
std::uint64_t getAddress() const
Definition: segment.cpp:41
std::uint64_t _address
Definition: segment.h:61
void shrink(std::uint64_t shrinkOffset, std::uint64_t newSize)
Definition: segment.cpp:274
bool getBits(std::string &result) const
Definition: segment.cpp:217
const retdec::common::RangeContainer< std::uint64_t > & getNonDecodableAddressRanges() const
Definition: segment.cpp:112
const retdec::fileformat::SecSeg * getSecSeg() const
Definition: segment.cpp:31
bool containsAddress(std::uint64_t address) const
Definition: segment.cpp:165
retdec::common::Range< std::uint64_t > getPhysicalAddressRange() const
Definition: segment.cpp:102
std::uint64_t getPhysicalEndAddress() const
Definition: segment.cpp:61
retdec::common::RangeContainer< std::uint64_t > _nonDecodableRanges
Definition: segment.h:65
std::uint64_t getPhysicalSize() const
Definition: segment.cpp:82
Segment(const retdec::fileformat::SecSeg *secSeg, std::uint64_t address, std::uint64_t size, std::unique_ptr< SegmentDataSource > &&dataSource)
Definition: segment.cpp:16
std::pair< const std::uint8_t *, std::uint64_t > getRawData() const
Definition: segment.cpp:123
bool getBytes(std::vector< unsigned char > &result) const
Definition: segment.cpp:177
std::unique_ptr< SegmentDataSource > _dataSource
Definition: segment.h:63
std::uint64_t _size
Definition: segment.h:62
std::string _name
Definition: segment.h:64
retdec::common::Range< std::uint64_t > getAddressRange() const
Definition: segment.cpp:92
void addNonDecodableRange(retdec::common::Range< std::uint64_t > range)
Definition: segment.cpp:300
std::uint64_t getEndAddress() const
Definition: segment.cpp:51
const retdec::fileformat::SecSeg * _secSeg
Definition: segment.h:60
std::uint64_t getSize() const
Definition: segment.cpp:71
void resize(std::uint64_t newSize)
Definition: segment.cpp:258
bool setBytes(const std::vector< unsigned char > &value, std::uint64_t addressOffset)
Definition: segment.cpp:241
bool hasName() const
Definition: segment.cpp:133
Declaration of templated Range class.
Header file for fileformat types and structures.
Declaration of operations over ranges.
Generic loader.
Definition: archive_wrapper.h:19
Basic class for section and segment.
Declaration of segment data source class.