retdec
Classes | Functions | Variables
retdec::capstone2llvmir Namespace Reference

Classes

class  Capstone2LlvmIrTranslatorArm
 
class  Capstone2LlvmIrTranslatorArm64
 
class  Capstone2LlvmIrTranslator
 
class  BaseError
 
class  CapstoneError
 
class  ModeSettingError
 
class  UnexpectedOperandsError
 
class  UnhandledInstructionError
 
class  GenericError
 
class  Capstone2LlvmIrTranslatorMips
 
class  Capstone2LlvmIrTranslatorPowerpc
 
class  Capstone2LlvmIrTranslatorX86
 
class  Capstone2LlvmIrTranslatorArm_impl
 
class  Capstone2LlvmIrTranslatorArm64_impl
 
class  Capstone2LlvmIrTranslator_impl
 
class  Capstone2LlvmIrTranslatorMips_impl
 
class  Capstone2LlvmIrTranslatorPowerpc_impl
 
class  Capstone2LlvmIrTranslatorX86_impl
 

Functions

std::string capstoneArchToString (cs_arch a)
 
std::string capstoneModeToString (cs_mode m)
 
llvm::Value * generateValueNegate (llvm::IRBuilder<> &irb, llvm::Value *val)
 
llvm::IntegerType * getIntegerTypeFromByteSize (llvm::Module *module, unsigned sz)
 
llvm::Type * getFloatTypeFromByteSize (llvm::Module *module, unsigned sz)
 
llvm::IRBuilder _generateIfThen (llvm::Value *cond, llvm::IRBuilder<> &irb, bool reverse)
 
llvm::IRBuilder generateIfThen (llvm::Value *cond, llvm::IRBuilder<> &irb)
 
llvm::IRBuilder generateIfNotThen (llvm::Value *cond, llvm::IRBuilder<> &irb)
 
std::pair< llvm::IRBuilder<>, llvm::IRBuilder<> > generateIfThenElse (llvm::Value *cond, llvm::IRBuilder<> &irb)
 
std::pair< llvm::IRBuilder<>, llvm::IRBuilder<> > generateWhile (llvm::BranchInst *&branch, llvm::IRBuilder<> &irb)
 

Variables

static std::map< cs_arch, std::string > capstoneArchStringMap
 
static std::map< cs_mode, std::string > capstoneModeStringMap
 

Function Documentation

◆ _generateIfThen()

llvm::IRBuilder retdec::capstone2llvmir::_generateIfThen ( llvm::Value *  cond,
llvm::IRBuilder<> &  irb,
bool  reverse 
)

◆ capstoneArchToString()

std::string retdec::capstone2llvmir::capstoneArchToString ( cs_arch  a)
inline

◆ capstoneModeToString()

std::string retdec::capstone2llvmir::capstoneModeToString ( cs_mode  m)
inline

◆ generateIfNotThen()

llvm::IRBuilder retdec::capstone2llvmir::generateIfNotThen ( llvm::Value *  cond,
llvm::IRBuilder<> &  irb 
)

Same as generateIfThen() but if cond is true, body is skipped:

if (!cond) {
// body
}
// after

◆ generateIfThen()

llvm::IRBuilder retdec::capstone2llvmir::generateIfThen ( llvm::Value *  cond,
llvm::IRBuilder<> &  irb 
)

Generate if-then statement at the current insert point of irb builder.

if (cond) {
// body
}
// after
Parameters
condValue used as condition in if() statement.
irbReference to IR builder. After if-then is generated, irb's insert point is set to first instruction after the statement.
Returns
IR builder whose insert point is set to if-then body BB's terminator instruction. Use this builder to fill the body.

◆ generateIfThenElse()

std::pair< llvm::IRBuilder<>, llvm::IRBuilder<> > retdec::capstone2llvmir::generateIfThenElse ( llvm::Value *  cond,
llvm::IRBuilder<> &  irb 
)

Generate if-then-else statement at the current insert point of irb builder.

if (cond) {
// bodyIf
} else {
// bodyElse
}
// after
Parameters
condValue used as condition in if() statement.
irbReference to IR builder. After if-then-else is generated, irb's insert point is set to first instruction after the statement.
Returns
Pair of IR builders whose insert points are set to if-then-else's bodyIf (first) and bodyElse (second) terminator instructions. Use these builders to fill the bodies.

◆ generateValueNegate()

llvm::Value * retdec::capstone2llvmir::generateValueNegate ( llvm::IRBuilder<> &  irb,
llvm::Value *  val 
)
Returns
Negation of value val.

◆ generateWhile()

std::pair< llvm::IRBuilder<>, llvm::IRBuilder<> > retdec::capstone2llvmir::generateWhile ( llvm::BranchInst *&  branch,
llvm::IRBuilder<> &  irb 
)

Generate while statement at the current insert point of irb builder.

// before
while (cond) {
// body
}
// after
Parameters
branchReference to a branch instruction pointer that will be filled with a while's conditional branch, whose condition is set to true (infinite loop). Use before IR builder to generate condition and llvm::BranchInst::setCondition() to set it to whis branch.
irbReference to IR builder. After while is generated, irb's insert point is set to first instruction after the statement.
Returns
Pair of IR builders whose insert points are set to before BB's and while body BB's terminator instructions. Use these builders to fill while's condition and body.

◆ getFloatTypeFromByteSize()

llvm::Type * retdec::capstone2llvmir::getFloatTypeFromByteSize ( llvm::Module *  module,
unsigned  sz 
)

◆ getIntegerTypeFromByteSize()

llvm::IntegerType * retdec::capstone2llvmir::getIntegerTypeFromByteSize ( llvm::Module *  module,
unsigned  sz 
)

Variable Documentation

◆ capstoneArchStringMap

std::map<cs_arch, std::string> retdec::capstone2llvmir::capstoneArchStringMap
static
Initial value:
=
{
{CS_ARCH_ARM, "CS_ARCH_ARM"},
{CS_ARCH_ARM64, "CS_ARCH_ARM64"},
{CS_ARCH_MIPS, "CS_ARCH_MIPS"},
{CS_ARCH_X86, "CS_ARCH_X86"},
{CS_ARCH_PPC, "CS_ARCH_PPC"},
{CS_ARCH_SPARC, "CS_ARCH_SPARC"},
{CS_ARCH_SYSZ, "CS_ARCH_SYSZ"},
{CS_ARCH_XCORE, "CS_ARCH_XCORE"},
{CS_ARCH_MAX, "CS_ARCH_MAX"},
{CS_ARCH_ALL, "CS_ARCH_ALL"}
}

◆ capstoneModeStringMap

std::map<cs_mode, std::string> retdec::capstone2llvmir::capstoneModeStringMap
static
Initial value:
=
{
{CS_MODE_LITTLE_ENDIAN, "CS_MODE_LITTLE_ENDIAN"},
{CS_MODE_ARM, "CS_MODE_ARM"},
{CS_MODE_16, "CS_MODE_16"},
{CS_MODE_32, "CS_MODE_32"},
{CS_MODE_64, "CS_MODE_64"},
{CS_MODE_THUMB, "CS_MODE_THUMB"},
{CS_MODE_MCLASS, "CS_MODE_MCLASS"},
{CS_MODE_V8, "CS_MODE_V8"},
{CS_MODE_MICRO, "CS_MODE_MICRO"},
{CS_MODE_MIPS3, "CS_MODE_MIPS3"},
{CS_MODE_MIPS32R6, "CS_MODE_MIPS32R6"},
{CS_MODE_V9, "CS_MODE_V9"},
{CS_MODE_BIG_ENDIAN, "CS_MODE_BIG_ENDIAN"},
{CS_MODE_MIPS32, "CS_MODE_MIPS32"},
{CS_MODE_MIPS64, "CS_MODE_MIPS64"}
}