retdec
Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes | List of all members
retdec::bin2llvmir::DsmWriter Class Reference

#include <writer_dsm.h>

Inheritance diagram for retdec::bin2llvmir::DsmWriter:
Inheritance graph
[legend]
Collaboration diagram for retdec::bin2llvmir::DsmWriter:
Collaboration graph
[legend]

Public Member Functions

 DsmWriter ()
 
virtual bool runOnModule (llvm::Module &m) override
 
bool runOnModuleCustom (llvm::Module &m, Config *c, FileImage *objf, Abi *abi, std::ostream &ret)
 

Static Public Attributes

static char ID = 0
 

Private Member Functions

void run (std::ostream &ret)
 
void generateHeader (std::ostream &ret)
 
void generateCode (std::ostream &ret)
 
void generateCodeSeg (const retdec::loader::Segment *seg, std::ostream &ret)
 
void generateFunction (const retdec::common::Function *fnc, std::ostream &ret)
 
void generateInstruction (AsmInstruction &ai, std::ostream &ret)
 
void generateData (std::ostream &ret)
 
void generateDataSeg (const retdec::loader::Segment *seg, std::ostream &ret)
 
void generateDataRange (retdec::common::Address start, retdec::common::Address end, std::ostream &ret)
 
void generateAlignedAddress (retdec::common::Address addr, std::ostream &ret)
 
void getAsmInstructionHex (AsmInstruction &ai, std::ostream &ret)
 
std::string processInstructionDsm (AsmInstruction &ai)
 
void generateData (std::ostream &ret, retdec::common::Address start, std::size_t size, const std::string &objVal="")
 
std::string escapeString (const std::string &str)
 
std::string reduceNegativeNumbers (const std::string &str)
 Find negative numbers in additions and change it to subtractions. More...
 
void findLongestInstruction ()
 
void findLongestAddress ()
 
std::string getString (const retdec::common::Object *cgv, const llvm::ConstantDataArray *cda)
 
std::string getFunctionName (llvm::Function *f) const
 
std::string getFunctionName (const retdec::common::Function *f) const
 

Private Attributes

llvm::Module * _module = nullptr
 
Config_config = nullptr
 
FileImage_objf = nullptr
 
Abi_abi = nullptr
 
std::size_t _longestInst = 0
 
std::size_t _longestAddr = 0
 
std::map< retdec::common::Address, const retdec::common::Function * > _addr2fnc
 
const std::size_t DATA_SEGMENT_LINE = 16
 
const std::string ALIGN = " "
 
const std::string INSTR_SEPARATOR = "\t"
 

Constructor & Destructor Documentation

◆ DsmWriter()

retdec::bin2llvmir::DsmWriter::DsmWriter ( )

Member Function Documentation

◆ escapeString()

std::string retdec::bin2llvmir::DsmWriter::escapeString ( const std::string &  str)
private

◆ findLongestAddress()

void retdec::bin2llvmir::DsmWriter::findLongestAddress ( )
private

◆ findLongestInstruction()

void retdec::bin2llvmir::DsmWriter::findLongestInstruction ( )
private

◆ generateAlignedAddress()

void retdec::bin2llvmir::DsmWriter::generateAlignedAddress ( retdec::common::Address  addr,
std::ostream &  ret 
)
private

◆ generateCode()

void retdec::bin2llvmir::DsmWriter::generateCode ( std::ostream &  ret)
private

◆ generateCodeSeg()

void retdec::bin2llvmir::DsmWriter::generateCodeSeg ( const retdec::loader::Segment seg,
std::ostream &  ret 
)
private

◆ generateData() [1/2]

void retdec::bin2llvmir::DsmWriter::generateData ( std::ostream &  ret)
private

◆ generateData() [2/2]

void retdec::bin2llvmir::DsmWriter::generateData ( std::ostream &  ret,
retdec::common::Address  start,
std::size_t  size,
const std::string &  objVal = "" 
)
private

◆ generateDataRange()

void retdec::bin2llvmir::DsmWriter::generateDataRange ( retdec::common::Address  start,
retdec::common::Address  end,
std::ostream &  ret 
)
private

◆ generateDataSeg()

void retdec::bin2llvmir::DsmWriter::generateDataSeg ( const retdec::loader::Segment seg,
std::ostream &  ret 
)
private

◆ generateFunction()

void retdec::bin2llvmir::DsmWriter::generateFunction ( const retdec::common::Function fnc,
std::ostream &  ret 
)
private

◆ generateHeader()

void retdec::bin2llvmir::DsmWriter::generateHeader ( std::ostream &  ret)
private

◆ generateInstruction()

void retdec::bin2llvmir::DsmWriter::generateInstruction ( AsmInstruction ai,
std::ostream &  ret 
)
private

◆ getAsmInstructionHex()

void retdec::bin2llvmir::DsmWriter::getAsmInstructionHex ( AsmInstruction ai,
std::ostream &  ret 
)
private

◆ getFunctionName() [1/2]

std::string retdec::bin2llvmir::DsmWriter::getFunctionName ( const retdec::common::Function f) const
private

◆ getFunctionName() [2/2]

std::string retdec::bin2llvmir::DsmWriter::getFunctionName ( llvm::Function *  f) const
private

◆ getString()

std::string retdec::bin2llvmir::DsmWriter::getString ( const retdec::common::Object cgv,
const llvm::ConstantDataArray *  cda 
)
private

◆ processInstructionDsm()

std::string retdec::bin2llvmir::DsmWriter::processInstructionDsm ( AsmInstruction ai)
private

◆ reduceNegativeNumbers()

std::string retdec::bin2llvmir::DsmWriter::reduceNegativeNumbers ( const std::string &  str)
private

Find negative numbers in additions and change it to subtractions.

Parameters
strString to reduce.
Returns
Reduced string.

◆ run()

void retdec::bin2llvmir::DsmWriter::run ( std::ostream &  ret)
private

◆ runOnModule()

bool retdec::bin2llvmir::DsmWriter::runOnModule ( llvm::Module &  m)
overridevirtual
Returns
Always false. This pass produces DSM output, it does not modify module.

◆ runOnModuleCustom()

bool retdec::bin2llvmir::DsmWriter::runOnModuleCustom ( llvm::Module &  m,
Config c,
FileImage objf,
Abi abi,
std::ostream &  ret 
)
Returns
Always false. This pass produces DSM output, it does not modify module.

Member Data Documentation

◆ _abi

Abi* retdec::bin2llvmir::DsmWriter::_abi = nullptr
private

◆ _addr2fnc

std::map<retdec::common::Address, const retdec::common::Function*> retdec::bin2llvmir::DsmWriter::_addr2fnc
private

◆ _config

Config* retdec::bin2llvmir::DsmWriter::_config = nullptr
private

◆ _longestAddr

std::size_t retdec::bin2llvmir::DsmWriter::_longestAddr = 0
private

◆ _longestInst

std::size_t retdec::bin2llvmir::DsmWriter::_longestInst = 0
private

◆ _module

llvm::Module* retdec::bin2llvmir::DsmWriter::_module = nullptr
private

◆ _objf

FileImage* retdec::bin2llvmir::DsmWriter::_objf = nullptr
private

◆ ALIGN

const std::string retdec::bin2llvmir::DsmWriter::ALIGN = " "
private

◆ DATA_SEGMENT_LINE

const std::size_t retdec::bin2llvmir::DsmWriter::DATA_SEGMENT_LINE = 16
private

◆ ID

char retdec::bin2llvmir::DsmWriter::ID = 0
static

◆ INSTR_SEPARATOR

const std::string retdec::bin2llvmir::DsmWriter::INSTR_SEPARATOR = "\t"
private

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