retdec
decompressor_nrv.h
Go to the documentation of this file.
1 
6 #ifndef UNPACKERTOOL_PLUGINS_UPX_DECOMPRESSORS_DECOMPRESSOR_NRV_H
7 #define UNPACKERTOOL_PLUGINS_UPX_DECOMPRESSORS_DECOMPRESSOR_NRV_H
8 
11 
12 using namespace retdec::utils;
13 
14 namespace retdec {
15 namespace unpackertool {
16 namespace upx {
17 
22 {
23 public:
24  explicit DecompressorNrv(std::unique_ptr<retdec::unpacker::BitParser> bitParser = nullptr);
25 
26  virtual void setupPackingMethod(ElfUpxStub<32>* stub, std::uint8_t packingMethod) override;
27  virtual void decompress(ElfUpxStub<32>* stub, DynamicBuffer& packedData, DynamicBuffer& unpackedData) override;
28 
29  virtual void setupPackingMethod(ElfUpxStub<64>* stub, std::uint8_t packingMethod) override;
30  virtual void decompress(ElfUpxStub<64>* stub, DynamicBuffer& packedData, DynamicBuffer& unpackedData) override;
31 
32  virtual void setupPackingMethod(MachOUpxStub<32>* stub, std::uint8_t packingMethod) override;
33  virtual void decompress(MachOUpxStub<32>* stub, DynamicBuffer& packedData, DynamicBuffer& unpackedData) override;
34 
35  virtual void setupPackingMethod(MachOUpxStub<64>* stub, std::uint8_t packingMethod) override;
36  virtual void decompress(MachOUpxStub<64>* stub, DynamicBuffer& packedData, DynamicBuffer& unpackedData) override;
37 
38  virtual void setupPackingMethod(PeUpxStub<32>* stub, std::uint8_t packingMethod) override;
39  virtual void readUnpackingStub(PeUpxStub<32>* stub, DynamicBuffer& unpackingStub) override;
40  virtual void readPackedData(PeUpxStub<32>* stub, DynamicBuffer& packedData, bool trustMetadata) override;
41  virtual void decompress(PeUpxStub<32>* stub, DynamicBuffer& packedData, DynamicBuffer& unpackedData, bool trustMetadata) override;
42 
43  virtual void setupPackingMethod(PeUpxStub<64>* stub, std::uint8_t packingMethod) override;
44  virtual void readUnpackingStub(PeUpxStub<64>* stub, DynamicBuffer& unpackingStub) override;
45  virtual void readPackedData(PeUpxStub<64>* stub, DynamicBuffer& packedData, bool trustMetadata) override;
46  virtual void decompress(PeUpxStub<64>* stub, DynamicBuffer& packedData, DynamicBuffer& unpackedData, bool trustMetadata) override;
47 
48 protected:
49  void setupPackingMethod(std::uint8_t packingMethod);
50  void decompress(DynamicBuffer& packedData, DynamicBuffer& unpackedData);
51 
52 private:
54  std::unique_ptr<retdec::unpacker::BitParser> _bitParser;
55 };
56 
57 } // namespace upx
58 } // namespace unpackertool
59 } // namespace retdec
60 
61 #endif
Bit getters for NRV decompression algorithms.
Definition: decompressor_nrv.h:22
std::unique_ptr< retdec::unpacker::BitParser > _bitParser
Definition: decompressor_nrv.h:54
char _nrvVersion
Definition: decompressor_nrv.h:53
Definition: decompressor.h:28
Definition: elf_upx_stub.h:99
Definition: macho_upx_stub.h:66
Definition: pe_upx_stub.h:65
The class for dynamic buffered data manipulation taking the endianness of the data in account.
Definition: dynamic_buffer.h:36
Declaration of base decompressor visitor for unpacking packed data.
Definition: unpacking_stub.h:16
Definition: archive_wrapper.h:19