retdec
|
#include <capstone2llvmir.h>
Classes | |
struct | TranslationResult |
struct | TranslationResultOne |
Public Member Functions | |
virtual | ~Capstone2LlvmIrTranslator ()=default |
virtual void | setIgnoreUnexpectedOperands (bool f)=0 |
virtual void | setIgnoreUnhandledInstructions (bool f)=0 |
virtual void | setGeneratePseudoAsmFunctions (bool f)=0 |
virtual bool | isIgnoreUnexpectedOperands () const =0 |
virtual bool | isIgnoreUnhandledInstructions () const =0 |
virtual bool | isGeneratePseudoAsmFunctions () const =0 |
virtual bool | isAllowedBasicMode (cs_mode m)=0 |
virtual bool | isAllowedExtraMode (cs_mode m)=0 |
virtual void | modifyBasicMode (cs_mode m)=0 |
virtual void | modifyExtraMode (cs_mode m)=0 |
virtual uint32_t | getArchByteSize ()=0 |
virtual uint32_t | getArchBitSize ()=0 |
virtual TranslationResult | translate (const uint8_t *bytes, std::size_t size, retdec::common::Address a, llvm::IRBuilder<> &irb, std::size_t count=0, bool stopOnBranch=false)=0 |
virtual TranslationResultOne | translateOne (const uint8_t *&bytes, std::size_t &size, retdec::common::Address &a, llvm::IRBuilder<> &irb)=0 |
virtual const csh & | getCapstoneEngine () const =0 |
virtual cs_arch | getArchitecture () const =0 |
virtual cs_mode | getBasicMode () const =0 |
virtual cs_mode | getExtraMode () const =0 |
virtual bool | hasDelaySlot (uint32_t id) const =0 |
virtual bool | hasDelaySlotTypical (uint32_t id) const =0 |
virtual bool | hasDelaySlotLikely (uint32_t id) const =0 |
virtual std::size_t | getDelaySlot (uint32_t id) const =0 |
virtual llvm::GlobalVariable * | getRegister (uint32_t r)=0 |
virtual std::string | getRegisterName (uint32_t r) const =0 |
virtual uint32_t | getRegisterBitSize (uint32_t r) const =0 |
virtual uint32_t | getRegisterByteSize (uint32_t r) const =0 |
virtual llvm::Type * | getRegisterType (uint32_t r) const =0 |
virtual bool | isControlFlowInstruction (cs_insn &i) const =0 |
virtual bool | isCallInstruction (cs_insn &i) const =0 |
virtual bool | isReturnInstruction (cs_insn &i) const =0 |
virtual bool | isBranchInstruction (cs_insn &i) const =0 |
virtual bool | isCondBranchInstruction (cs_insn &i) const =0 |
virtual llvm::Module * | getModule () const =0 |
virtual bool | isSpecialAsm2LlvmMapGlobal (llvm::Value *v) const =0 |
virtual llvm::StoreInst * | isSpecialAsm2LlvmInstr (llvm::Value *v) const =0 |
virtual llvm::GlobalVariable * | getAsm2LlvmMapGlobalVariable () const =0 |
virtual bool | isCallFunction (llvm::Function *f) const =0 |
virtual bool | isCallFunctionCall (llvm::CallInst *c) const =0 |
virtual llvm::BranchInst * | isInConditionCallFunctionCall (llvm::CallInst *c) const =0 |
virtual llvm::Function * | getCallFunction () const =0 |
virtual bool | isReturnFunction (llvm::Function *f) const =0 |
virtual bool | isReturnFunctionCall (llvm::CallInst *c) const =0 |
virtual llvm::BranchInst * | isInConditionReturnFunctionCall (llvm::CallInst *c) const =0 |
virtual llvm::Function * | getReturnFunction () const =0 |
virtual bool | isBranchFunction (llvm::Function *f) const =0 |
virtual bool | isBranchFunctionCall (llvm::CallInst *c) const =0 |
virtual llvm::BranchInst * | isInConditionBranchFunctionCall (llvm::CallInst *c) const =0 |
virtual llvm::Function * | getBranchFunction () const =0 |
virtual bool | isCondBranchFunction (llvm::Function *f) const =0 |
virtual llvm::BranchInst * | isInConditionCondBranchFunctionCall (llvm::CallInst *c) const =0 |
virtual bool | isCondBranchFunctionCall (llvm::CallInst *c) const =0 |
virtual llvm::Function * | getCondBranchFunction () const =0 |
virtual bool | isAnyPseudoFunction (llvm::Function *f) const =0 |
virtual bool | isAnyPseudoFunctionCall (llvm::CallInst *c) const =0 |
virtual llvm::GlobalVariable * | isRegister (llvm::Value *v) const =0 |
virtual uint32_t | getCapstoneRegister (llvm::GlobalVariable *gv) const =0 |
virtual bool | isPseudoAsmFunction (llvm::Function *f) const =0 |
virtual bool | isPseudoAsmFunctionCall (llvm::CallInst *c) const =0 |
virtual const std::set< llvm::Function * > & | getPseudoAsmFunctions () const =0 |
Static Public Member Functions | |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createArch (cs_arch a, llvm::Module *m, cs_mode basic=CS_MODE_LITTLE_ENDIAN, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createArm (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createThumb (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createArm64 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createMips32 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createMips64 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createMips3 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createMips32R6 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createX86_16 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createX86_32 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createX86_64 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createPpc32 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createPpc64 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createPpcQpx (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createSparc (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createSysz (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
static std::unique_ptr< Capstone2LlvmIrTranslator > | createXcore (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
Abstract public interface class for all translators.
Translator accepts binary data and position in LLVM module, disassembles the data into Capstone instruction(s), and translates these instruction(s) to LLVM IR instructions located at the given position.
|
virtualdefault |
|
static |
Create translator for the specified architecture a
, module m
, architecture basic HW mode basicMode
corresponding to HW architectures (e.g. CS_MODE_ARM or CS_MODE_THUMB for CS_ARCH_ARM), and extra mode extraMode
that can be combined with basic HW mode (e.g. CS_MODE_BIG_ENDIAN).
nullptr
if translator (with the specified modes) could not be created.
|
static |
Create 32-bit ARM translator with basic mode CS_MODE_ARM
, and extra mode extra
. This is meant to be used when ARM needs to be used with extra mode like CS_MODE_BIG_ENDIAN
. If you want to create THUMB translator use createThumb()
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create 64-bit ARM translator with basic mode CS_MODE_ARM
, and extra mode extra
. This is meant to be used when 64-bit ARM needs to be used with extra mode like CS_MODE_BIG_ENDIAN
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create MIPS translator with basic mode CS_MODE_MIPS3
, and extra mode extra
. This is meant to be used when MIPS needs to be used with extra mode like CS_MODE_BIG_ENDIAN
. If you want to create a different flavour of MIPS translator use createMips32()
, createMips64()
, or createMips32R6()
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create MIPS translator with basic mode CS_MODE_MIPS32
, and extra mode extra
. This is meant to be used when MIPS needs to be used with extra mode like CS_MODE_BIG_ENDIAN
. If you want to create a different flavour of MIPS translator use createMips64()
, createMips3()
, or createMips32R6()
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create MIPS translator with basic mode CS_MODE_MIPS32R6
, and extra mode extra
. This is meant to be used when MIPS needs to be used with extra mode like CS_MODE_BIG_ENDIAN
. If you want to create a different flavour of MIPS translator use createMips32()
, createMips64()
, or createMips3()
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create MIPS translator with basic mode CS_MODE_MIPS64
, and extra mode extra
. This is meant to be used when MIPS needs to be used with extra mode like CS_MODE_BIG_ENDIAN
. If you want to create a different flavour of MIPS translator use createMips32()
, createMips3()
, or createMips32R6()
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create 32-bit PowerPC translator with basic mode CS_MODE_32
, and extra mode extra
. This is meant to be used when PowerPC needs to be used with extra mode like CS_MODE_BIG_ENDIAN
. If you want to create 64-bit PowerPC translator use createPpc64()
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create 64-bit PowerPC translator with basic mode CS_MODE_64
, and extra mode extra
. This is meant to be used when PowerPC needs to be used with extra mode like CS_MODE_BIG_ENDIAN
. If you want to create 32-bit PowerPC translator use createPpc32()
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create QPX PowerPC translator with basic mode CS_MODE_QPX
, and extra mode extra
. This is meant to be used when PowerPC needs to be used with extra mode like CS_MODE_BIG_ENDIAN
. If you want to create 32-bit PowerPC translator use createPpc32()
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create SPARC translator with extra mode extra
. This is meant to be used when SPARC needs to be used with extra mode like CS_MODE_BIG_ENDIAN
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create SystemZ translator with extra mode extra
. This is meant to be used when SystemZ needs to be used with extra mode like CS_MODE_BIG_ENDIAN
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create 32-bit ARM translator with basic mode CS_MODE_THUMB
, and extra mode extra
. This is meant to be used when THUMB needs to be used with extra mode like CS_MODE_BIG_ENDIAN
. If you want to create ARM translator use createArm()
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create x86 translator with basic mode CS_MODE_16
, and extra mode extra
. This is meant to be used when x86 needs to be used with extra mode like CS_MODE_BIG_ENDIAN
. If you want to create a different flavour of x86 translator use createX86_32()
or createX86_64()
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create x86 translator with basic mode CS_MODE_32
, and extra mode extra
. This is meant to be used when x86 needs to be used with extra mode like CS_MODE_BIG_ENDIAN
. If you want to create a different flavour of x86 translator use createX86_16()
or createX86_64()
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create x86 translator with basic mode CS_MODE_64
, and extra mode extra
. This is meant to be used when x86 needs to be used with extra mode like CS_MODE_BIG_ENDIAN
. If you want to create a different flavour of x86 translator use createX86_16()
or createX86_32()
.
nullptr
if translator (with the specified mode) could not be created.
|
static |
Create XCore translator with extra mode extra
. This is meant to be used when XCore needs to be used with extra mode like CS_MODE_BIG_ENDIAN
.
nullptr
if translator (with the specified mode) could not be created.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslatorPowerpc_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslatorMips_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslatorArm64_impl, and retdec::capstone2llvmir::Capstone2LlvmIrTranslatorArm_impl.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
gv
if such register exists, zero otherwise (zero equals to
[arch]_REG_INVALID in all Capstone architecture models, e.g. ARM_REG_INVALID
, MIPS_REG_INVALID
). Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
id
. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslatorMips_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Get all pseudo assembly functions for instructions which full semantics is not implemented.
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
r
, or nullptr
if such global does not exist. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
r
. This function works even for the additional registers defined in translators and missing in Capstone (e.g. individual flag registers). Throws Capstone2LlvmIrError
exception if register bit size not found. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
r
. This function works even for the additional registers defined in translators and missing in Capstone (e.g. individual flag registers). Throws Capstone2LlvmIrError
exception if register byte size not found. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
r
. The name may differ from names used by the Capstone library. This function works even for the additional registers defined in translators and missing in Capstone (e.g. individual flag registers). Throws Capstone2LlvmIrError
exception if register name not found. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
r
. This function works even for the additional registers defined in translators and missing in Capstone (e.g. individual flag registers). Throws Capstone2LlvmIrError
exception if register data type not found. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Has the specified Capstone instruction id
any kind of delay slot?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslatorMips_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Has the specified Capstone instruction id
likely delay slot?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslatorMips_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Has the specified Capstone instruction id
typical delay slot?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslatorMips_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Check if mode m
is an allowed basic mode for the translator. This must be implemented in concrete classes, since it is architecture and translator specific.
True
if mode is allowed, false
otherwise. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslatorPowerpc_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslatorMips_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslatorArm64_impl, and retdec::capstone2llvmir::Capstone2LlvmIrTranslatorArm_impl.
|
pure virtual |
Check if mode m
is an allowed extra mode for the translator. This must be implemented in concrete classes, since it is architecture and translator specific.
True
if mode is allowed, false
otherwise. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslatorPowerpc_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslatorMips_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslatorArm64_impl, and retdec::capstone2llvmir::Capstone2LlvmIrTranslatorArm_impl.
|
pure virtual |
Is the passed LLVM function f
any kind of pseudo function generated by capstone2llvmir (e.g. call/return/br/... function).
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM call c
any kind of pseudo call generated by capstone2llvmir (e.g. call/return/br/... function call).
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM function f
the special pseudo function whose call represents branch operation in the translated LLVM IR?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM call instruction c
a special pseudo call instruction representing a branch operation in the translated LLVM IR?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
True
if the Capstone instruction i
is any kind of branch instruction, translation of which would produce branch pseudo call. False
otherwise. isControlFlowInstruction()
for more details. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM function f
the special pseudo function whose call represents call operation in the translated LLVM IR?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM call instruction c
a special pseudo call instruction representing a call operation in the translated LLVM IR?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
True
if the Capstone instruction i
is any kind of call instruction, translation of which would produce call pseudo call. False
otherwise. isControlFlowInstruction()
for more details. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM function f
the special pseudo function whose call represents conditional branch operation in the translated LLVM IR? Function signature:
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM call instruction c
a special pseudo call instruction representing a conditional branch operation in the translated LLVM IR?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
True
if the Capstone instruction i
is any kind of conditional branch instruction, translation of which would produce conditional branch pseudo call. False
otherwise. isControlFlowInstruction()
for more details. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Check if the translation of this instruction will/may produce any kind of control flow changing pseudo call (i.e. call/return/br/condbr pseudo function call).
For ARM, parameter i
must include detail
member - instruction cannot be disassembled with CS_OP_DETAIL = CS_OPT_OFF, or with CS_OP_SKIPDATA = CS_OPT_OFF.
For x86, MIPS, PowerPC, parameter i
may not include detail
member - instruction can be disassembled with CS_OP_DETAIL = CS_OPT_ON, or with CS_OP_SKIPDATA = CS_OPT_ON.
It is sometimes tricky to find this information without actually translating the instruction. On the other hand, for some architectures, it would be possible to give more detailed information (e.g. the kind of pseudo function call), sometimes even from instruction ID alone (i.e. cs_insn::id
):
detail
and replicating the full analysis used in translation.Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is isBranchFunctionCall()
true
for the passed LLVM call instruction c
, and execution of the call instruction c
is conditional.
c
if c
is conditional, nullptr
otherwise. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is isCallFunctionCall()
true
for the passed LLVM call instruction c
, and execution of the call instruction c
is conditional.
c
if c
is conditional, nullptr
otherwise. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is isCondBranchFunction()
true
for the passed LLVM call instruction c
, and execution of the call instruction c
is conditional.
c
if c
is conditional, nullptr
otherwise. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is isReturnFunctionCall()
true
for the passed LLVM call instruction c
, and execution of the call instruction c
is conditional.
c
if c
is conditional, nullptr
otherwise. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM function f
any pseudo assembly functions for instructions which full semantics is not implemented?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM call c
any kind of pseudo assembly call for instructions which full semantics is not implemented?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM value v
a global variable representing some HW register?
v
casted to llvm::GlobalVariable
if it is representing some HW register, nullptr
otherwise. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM function f
the special pseudo function whose call represents return operation in the translated LLVM IR?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM call instruction c
a special pseudo call instruction representing a return operation in the translated LLVM IR?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
True
if the Capstone instruction i
is any kind of return instruction, translation of which would produce return pseudo call. False
otherwise. isControlFlowInstruction()
for more details. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM value v
a special instruction used for LLVM IR <-> Capstone instruction mapping?
v
casted to llvm::StoreInst
if it is a special mapping instruction, nullptr
otherwise. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Is the passed LLVM value v
the special global variable used for LLVM IR <-> Capstone instruction mapping?
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Modify basic mode (e.g. CS_MODE_ARM to CS_MODE_THUMB). This must be implemented in concrete classes, so they can check if the requested mode is applicable. Not every basic mode can be used with every architecture. Translators for some architectures (e.g. CS_ARCH_X86) may not even allow switching between modes that is otherwise allowed by Capstone due to internal problems (e.g. different register environments between 16/32/64 x86 architectures).
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Modify extra mode (e.g. CS_MODE_LITTLE_ENDIAN to CS_MODE_BIG_ENDIAN). This must be implemented in concrete classes, so they can check if the requested mode is applicable. Not every special mode can be used with every architecture.
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Should the translator generate pseudo assembly functions for instructions which full semantics is not implemented? True -> generate. False -> don't generate.
Default value: true.
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Should the translator ignore unexpected operands encountered in Capstone instructions? True -> ignore -> try recover or ignore the problem. False -> don't ignore -> throw UnexpectedOperandsError
.
Default value: true.
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Should the translator ignore unhandled instructions? True -> ignore. False -> don't ignore -> throw UnhandledInstructionError
when instructions without an implemented translation routine is encountered.
Default value: true.
Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Translate the given bytes.
bytes | Bytes to translate. |
size | Size of the bytes buffer. |
a | Memory address where bytes are located. |
irb | LLVM IR builder used to create LLVM IR translation. Translated LLVM IR instructions are created at its current position. |
count | Number of assembly instructions to translate, or 0 to translate them all. |
stopOnBranch | If set, the translation aborts after any kind of branch is encountered (call, return, branch, conditional branch). |
TranslationResult
structure. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.
|
pure virtual |
Translate one assembly instruction from the given bytes.
bytes | Bytes to translate. This will be updated to point to the next instruction. |
size | Size of the bytes buffer. This will be updated to reflect bytes update. |
a | Memory address where bytes are located. This will be updated to point to the next instruction. |
irb | LLVM IR builder used to create LLVM IR translation. Translated LLVM IR instructions are created at its current position. |
TranslationResult
structure. Implemented in retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< CInsn, CInsnOp >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm, cs_arm_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_arm64, cs_arm64_op >, retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_mips, cs_mips_op >, and retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_ppc, cs_ppc_op >.