retdec
decompressor.h
Go to the documentation of this file.
1 
7 #ifndef UNPACKERTOOL_PLUGINS_UPX_DECOMPRESSORS_DECOMPRESSOR_H
8 #define UNPACKERTOOL_PLUGINS_UPX_DECOMPRESSORS_DECOMPRESSOR_H
9 
10 #include <cstdint>
11 #include <memory>
12 
14 
15 namespace retdec {
16 
17 namespace unpackertool {
18 namespace upx {
19 
20 template <int bits> class ElfUpxStub;
21 template <int bits> class MachOUpxStub;
22 template <int bits> class PeUpxStub;
23 
28 {
29 public:
30  virtual ~Decompressor() = default;
31 
32  virtual void setupPackingMethod(ElfUpxStub<32>* stub, std::uint8_t packingMethod) = 0;
33  virtual void decompress(ElfUpxStub<32>* stub, retdec::utils::DynamicBuffer& packedData,
34  retdec::utils::DynamicBuffer& unpackedData) = 0;
35 
36  virtual void setupPackingMethod(ElfUpxStub<64>* stub, std::uint8_t packingMethod) = 0;
37  virtual void decompress(ElfUpxStub<64>* stub, retdec::utils::DynamicBuffer& packedData,
38  retdec::utils::DynamicBuffer& unpackedData) = 0;
39 
40  virtual void setupPackingMethod(MachOUpxStub<32>* stub, std::uint8_t packingMethod) = 0;
41  virtual void decompress(MachOUpxStub<32>* stub, retdec::utils::DynamicBuffer& packedData,
42  retdec::utils::DynamicBuffer& unpackedData) = 0;
43 
44  virtual void setupPackingMethod(MachOUpxStub<64>* stub, std::uint8_t packingMethod) = 0;
45  virtual void decompress(MachOUpxStub<64>* stub, retdec::utils::DynamicBuffer& packedData,
46  retdec::utils::DynamicBuffer& unpackedData) = 0;
47 
48  virtual void setupPackingMethod(PeUpxStub<32>* stub, std::uint8_t packingMethod) = 0;
49  virtual void readUnpackingStub(PeUpxStub<32>* stub, retdec::utils::DynamicBuffer& unpackingStub) = 0;
50  virtual void readPackedData(PeUpxStub<32>* stub, retdec::utils::DynamicBuffer& packedData, bool trustMetadata) = 0;
51  virtual void decompress(PeUpxStub<32>* stub, retdec::utils::DynamicBuffer& packedData,
52  retdec::utils::DynamicBuffer& unpackedData, bool trustMetadata) = 0;
53 
54  virtual void setupPackingMethod(PeUpxStub<64>* stub, std::uint8_t packingMethod) = 0;
55  virtual void readUnpackingStub(PeUpxStub<64>* stub, retdec::utils::DynamicBuffer& unpackingStub) = 0;
56  virtual void readPackedData(PeUpxStub<64>* stub, retdec::utils::DynamicBuffer& packedData, bool trustMetadata) = 0;
57  virtual void decompress(PeUpxStub<64>* stub, retdec::utils::DynamicBuffer& packedData,
58  retdec::utils::DynamicBuffer& unpackedData, bool trustMetadata) = 0;
59 
60 protected:
61  void performDecompression(const std::weak_ptr<retdec::unpacker::CompressedData>& compressedDataWptr,
62  retdec::utils::DynamicBuffer& unpackedData);
63 };
64 
65 } // namespace upx
66 } // namespace unpackertool
67 } // namespace retdec
68 
69 #endif
Definition: decompressor.h:28
virtual void decompress(PeUpxStub< 64 > *stub, retdec::utils::DynamicBuffer &packedData, retdec::utils::DynamicBuffer &unpackedData, bool trustMetadata)=0
virtual void setupPackingMethod(PeUpxStub< 64 > *stub, std::uint8_t packingMethod)=0
virtual void setupPackingMethod(MachOUpxStub< 32 > *stub, std::uint8_t packingMethod)=0
void performDecompression(const std::weak_ptr< retdec::unpacker::CompressedData > &compressedDataWptr, retdec::utils::DynamicBuffer &unpackedData)
Definition: decompressor.cpp:25
virtual void setupPackingMethod(ElfUpxStub< 64 > *stub, std::uint8_t packingMethod)=0
virtual void setupPackingMethod(ElfUpxStub< 32 > *stub, std::uint8_t packingMethod)=0
virtual void decompress(MachOUpxStub< 32 > *stub, retdec::utils::DynamicBuffer &packedData, retdec::utils::DynamicBuffer &unpackedData)=0
virtual void decompress(ElfUpxStub< 64 > *stub, retdec::utils::DynamicBuffer &packedData, retdec::utils::DynamicBuffer &unpackedData)=0
virtual void decompress(PeUpxStub< 32 > *stub, retdec::utils::DynamicBuffer &packedData, retdec::utils::DynamicBuffer &unpackedData, bool trustMetadata)=0
virtual void decompress(MachOUpxStub< 64 > *stub, retdec::utils::DynamicBuffer &packedData, retdec::utils::DynamicBuffer &unpackedData)=0
virtual void readPackedData(PeUpxStub< 32 > *stub, retdec::utils::DynamicBuffer &packedData, bool trustMetadata)=0
virtual void readPackedData(PeUpxStub< 64 > *stub, retdec::utils::DynamicBuffer &packedData, bool trustMetadata)=0
virtual void setupPackingMethod(PeUpxStub< 32 > *stub, std::uint8_t packingMethod)=0
virtual void readUnpackingStub(PeUpxStub< 32 > *stub, retdec::utils::DynamicBuffer &unpackingStub)=0
virtual void decompress(ElfUpxStub< 32 > *stub, retdec::utils::DynamicBuffer &packedData, retdec::utils::DynamicBuffer &unpackedData)=0
virtual void readUnpackingStub(PeUpxStub< 64 > *stub, retdec::utils::DynamicBuffer &unpackingStub)=0
virtual void setupPackingMethod(MachOUpxStub< 64 > *stub, std::uint8_t packingMethod)=0
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 class for abstract compressed data.
Definition: archive_wrapper.h:19