retdec
Public Types | Public Member Functions | Protected Member Functions | Private Attributes | List of all members
retdec::unpackertool::upx::MachOUpxStub< bits > Class Template Reference

#include <macho_upx_stub.h>

Inheritance diagram for retdec::unpackertool::upx::MachOUpxStub< bits >:
Inheritance graph
[legend]
Collaboration diagram for retdec::unpackertool::upx::MachOUpxStub< bits >:
Collaboration graph
[legend]

Public Types

using AddressType = typename MachOUpxStubTraits< bits >::AddressType
 
using MachOHeaderType = typename MachOUpxStubTraits< bits >::MachOHeaderType
 
using MachOSegmentCommandType = typename MachOUpxStubTraits< bits >::MachOSegmentCommandType
 

Public Member Functions

 MachOUpxStub (retdec::loader::Image *inputFile, const UpxStubData *stubData, const DynamicBuffer &stubCapturedData, std::unique_ptr< Decompressor > decompressor, const UpxMetadata &metadata)
 
virtual void unpack (const std::string &outputFile) override
 
virtual void cleanup () override
 
void setupPackingMethod (std::uint8_t packingMethod)
 
void decompress (DynamicBuffer &packedData, DynamicBuffer &unpackedData)
 
void unpack (std::ifstream &inputFile, std::ofstream &outputFile, std::uint64_t baseInputOffset, std::uint64_t baseOutputOffset)
 
- Public Member Functions inherited from retdec::unpackertool::upx::UpxStub
 UpxStub (retdec::loader::Image *inputFile, const UpxStubData *stubData, const DynamicBuffer &stubCapturedData, std::unique_ptr< Decompressor > decompressor, const UpxMetadata &metadata)
 
UpxStubVersion getVersion () const
 
const UpxStubDatagetStubData () const
 
const DynamicBuffergetStubCapturedData () const
 
DecompressorgetDecompressor () const
 
const UpxMetadatagetUpxMetadata () const
 
virtual std::uint32_t getRealEpAddress () const
 
void setStubData (const UpxStubData *stubData)
 
void setStubCapturedData (const DynamicBuffer &stubCapturedData)
 
- Public Member Functions inherited from retdec::unpacker::UnpackingStub
 UnpackingStub (loader::Image *file)
 
virtual ~UnpackingStub ()=default
 
loader::ImagegetFile ()
 

Protected Member Functions

std::uint32_t getFirstBlockOffset (std::ifstream &inputFile) const
 
DynamicBuffer readNextBlock (std::ifstream &inputFile)
 
DynamicBuffer unpackBlock (DynamicBuffer &packedBlock)
 
void unfilterBlock (const DynamicBuffer &packedBlock, DynamicBuffer &unpackedData)
 
- Protected Member Functions inherited from retdec::unpackertool::upx::UpxStub
std::unique_ptr< DecompressordecodePackingMethod (std::uint8_t packingMethod) const
 
- Protected Member Functions inherited from retdec::unpacker::UnpackingStub
void setFile (loader::Image *file)
 

Private Attributes

std::uint64_t _readPos
 
std::unique_ptr< retdec::unpacker::BitParser_bitParser
 

Additional Inherited Members

- Static Public Member Functions inherited from retdec::unpackertool::upx::UpxStub
static std::shared_ptr< UpxStubcreateStub (retdec::loader::Image *file)
 
static std::shared_ptr< UpxStubcreateStub (retdec::loader::Image *file, const DynamicBuffer &stubBytes)
 
- Protected Attributes inherited from retdec::unpackertool::upx::UpxStub
const UpxStubData_stubData
 Additional stub information. More...
 
DynamicBuffer _stubCapturedData
 Data captured while matching signature of this stub. More...
 
std::unique_ptr< Decompressor_decompressor
 Decompressor associated with stub. More...
 
UpxMetadata _metadata
 UPX metadata aka packheader. More...
 
- Protected Attributes inherited from retdec::unpacker::UnpackingStub
loader::Image_file
 

Detailed Description

template<int bits>
class retdec::unpackertool::upx::MachOUpxStub< bits >

Base class for Mach-O unpacking stubs. It doesn't implement decompress method from UpxStub as it is left to subclasses which should implement decompression based on the used compression.

Template Parameters
bitsNumber of bits of the architecture.

Member Typedef Documentation

◆ AddressType

template<int bits>
using retdec::unpackertool::upx::MachOUpxStub< bits >::AddressType = typename MachOUpxStubTraits<bits>::AddressType

◆ MachOHeaderType

◆ MachOSegmentCommandType

Constructor & Destructor Documentation

◆ MachOUpxStub()

template<int bits>
retdec::unpackertool::upx::MachOUpxStub< bits >::MachOUpxStub ( retdec::loader::Image inputFile,
const UpxStubData stubData,
const DynamicBuffer stubCapturedData,
std::unique_ptr< Decompressor decompressor,
const UpxMetadata metadata 
)

Constructor.

Template Parameters
bitsNumber of bits of the architecture.
Parameters
inputFilePacked input file.
stubDataUpxStubData associated with this unpacking stub.
stubCapturedDataData captured from signature matching.
decompressorAssociated decompressor with this unpacking stub.
metadataThe UPX metadata associated with this unpacking stub.

Member Function Documentation

◆ cleanup()

template<int bits>
void retdec::unpackertool::upx::MachOUpxStub< bits >::cleanup
overridevirtual

Performs releasing of owned resources.

Template Parameters
bitsNumber of bits of the architecture.

Implements retdec::unpacker::UnpackingStub.

◆ decompress()

template<int bits>
void retdec::unpackertool::upx::MachOUpxStub< bits >::decompress ( DynamicBuffer packedData,
DynamicBuffer unpackedData 
)

◆ getFirstBlockOffset()

template<int bits>
std::uint32_t retdec::unpackertool::upx::MachOUpxStub< bits >::getFirstBlockOffset ( std::ifstream &  inputFile) const
protected

◆ readNextBlock()

template<int bits>
DynamicBuffer retdec::unpackertool::upx::MachOUpxStub< bits >::readNextBlock ( std::ifstream &  inputFile)
protected

◆ setupPackingMethod()

template<int bits>
void retdec::unpackertool::upx::MachOUpxStub< bits >::setupPackingMethod ( std::uint8_t  packingMethod)

◆ unfilterBlock()

template<int bits>
void retdec::unpackertool::upx::MachOUpxStub< bits >::unfilterBlock ( const DynamicBuffer packedBlock,
DynamicBuffer unpackedData 
)
protected

Unfilters the unpacked block based on the packed block header.

Template Parameters
bitsNumber of bits of the architecture.
Parameters
packedBlockThe packed block which contains at least its header.
unpackedDataData containing unpacked block.

◆ unpack() [1/2]

template<int bits>
void retdec::unpackertool::upx::MachOUpxStub< bits >::unpack ( const std::string &  outputFile)
overridevirtual

Performs the whole process of unpacking. This is the method that is being run from UpxPlugin to start unpacking stub.

Template Parameters
bitsNumber of bits of the architecture.
Parameters
outputFilePath to unpacked output file.

Implements retdec::unpacker::UnpackingStub.

◆ unpack() [2/2]

template<int bits>
void retdec::unpackertool::upx::MachOUpxStub< bits >::unpack ( std::ifstream &  inputFile,
std::ofstream &  outputFile,
std::uint64_t  baseInputOffset,
std::uint64_t  baseOutputOffset 
)

◆ unpackBlock()

template<int bits>
DynamicBuffer retdec::unpackertool::upx::MachOUpxStub< bits >::unpackBlock ( DynamicBuffer packedBlock)
protected

Member Data Documentation

◆ _bitParser

template<int bits>
std::unique_ptr<retdec::unpacker::BitParser> retdec::unpackertool::upx::MachOUpxStub< bits >::_bitParser
private

◆ _readPos

template<int bits>
std::uint64_t retdec::unpackertool::upx::MachOUpxStub< bits >::_readPos
private

The documentation for this class was generated from the following files: