retdec
Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl Class Reference

#include <x86_impl.h>

Inheritance diagram for retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl:
Inheritance graph
[legend]
Collaboration diagram for retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl:
Collaboration graph
[legend]

Public Member Functions

 Capstone2LlvmIrTranslatorX86_impl (llvm::Module *m, cs_mode basic=CS_MODE_32, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
virtual bool isAllowedBasicMode (cs_mode m) override
 
virtual bool isAllowedExtraMode (cs_mode m) override
 
virtual uint32_t getArchByteSize () override
 
virtual bool isAnyPseudoFunction (llvm::Function *f) const override
 
virtual bool isAnyPseudoFunctionCall (llvm::CallInst *c) const override
 
virtual bool isX87DataStoreFunction (llvm::Function *f) const override
 
virtual bool isX87DataStoreFunctionCall (llvm::CallInst *c) const override
 
virtual llvm::Function * getX87DataStoreFunction () const override
 
virtual bool isX87DataLoadFunction (llvm::Function *f) const override
 
virtual bool isX87DataLoadFunctionCall (llvm::CallInst *c) const override
 
virtual llvm::Function * getX87DataLoadFunction () const override
 
virtual uint32_t getParentRegister (uint32_t r) const override
 
- Public Member Functions inherited from retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >
 Capstone2LlvmIrTranslator_impl (cs_arch a, cs_mode basic, cs_mode extra, llvm::Module *m)
 
virtual ~Capstone2LlvmIrTranslator_impl ()
 
virtual void setIgnoreUnexpectedOperands (bool f) override
 
virtual void setIgnoreUnhandledInstructions (bool f) override
 
virtual void setGeneratePseudoAsmFunctions (bool f) override
 
virtual bool isIgnoreUnexpectedOperands () const override
 
virtual bool isIgnoreUnhandledInstructions () const override
 
virtual bool isGeneratePseudoAsmFunctions () const override
 
virtual void modifyBasicMode (cs_mode m) override
 
virtual void modifyExtraMode (cs_mode m) override
 
virtual uint32_t getArchBitSize () override
 
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) override
 
virtual TranslationResultOne translateOne (const uint8_t *&bytes, std::size_t &size, retdec::common::Address &a, llvm::IRBuilder<> &irb) override
 
virtual const csh & getCapstoneEngine () const override
 
virtual cs_arch getArchitecture () const override
 
virtual cs_mode getBasicMode () const override
 
virtual cs_mode getExtraMode () const override
 
virtual bool hasDelaySlot (uint32_t id) const override
 
virtual bool hasDelaySlotTypical (uint32_t id) const override
 
virtual bool hasDelaySlotLikely (uint32_t id) const override
 
virtual std::size_t getDelaySlot (uint32_t id) const override
 
virtual llvm::GlobalVariable * getRegister (uint32_t r) override
 
virtual std::string getRegisterName (uint32_t r) const override
 
virtual uint32_t getRegisterBitSize (uint32_t r) const override
 
virtual uint32_t getRegisterByteSize (uint32_t r) const override
 
virtual llvm::Type * getRegisterType (uint32_t r) const override
 
virtual bool isControlFlowInstruction (cs_insn &i) const override
 
virtual bool isCallInstruction (cs_insn &i) const override
 
virtual bool isReturnInstruction (cs_insn &i) const override
 
virtual bool isBranchInstruction (cs_insn &i) const override
 
virtual bool isCondBranchInstruction (cs_insn &i) const override
 
virtual llvm::Module * getModule () const override
 
virtual bool isSpecialAsm2LlvmMapGlobal (llvm::Value *v) const override
 
virtual llvm::StoreInst * isSpecialAsm2LlvmInstr (llvm::Value *v) const override
 
virtual llvm::GlobalVariable * getAsm2LlvmMapGlobalVariable () const override
 
virtual bool isCallFunction (llvm::Function *f) const override
 
virtual bool isCallFunctionCall (llvm::CallInst *c) const override
 
virtual llvm::BranchInst * isInConditionCallFunctionCall (llvm::CallInst *c) const override
 
virtual llvm::Function * getCallFunction () const override
 
virtual bool isReturnFunction (llvm::Function *f) const override
 
virtual bool isReturnFunctionCall (llvm::CallInst *c) const override
 
virtual llvm::BranchInst * isInConditionReturnFunctionCall (llvm::CallInst *c) const override
 
virtual llvm::Function * getReturnFunction () const override
 
virtual bool isBranchFunction (llvm::Function *f) const override
 
virtual bool isBranchFunctionCall (llvm::CallInst *c) const override
 
virtual llvm::BranchInst * isInConditionBranchFunctionCall (llvm::CallInst *c) const override
 
virtual llvm::Function * getBranchFunction () const override
 
virtual bool isCondBranchFunction (llvm::Function *f) const override
 
virtual bool isCondBranchFunctionCall (llvm::CallInst *c) const override
 
virtual llvm::BranchInst * isInConditionCondBranchFunctionCall (llvm::CallInst *c) const override
 
virtual llvm::Function * getCondBranchFunction () const override
 
virtual llvm::GlobalVariable * isRegister (llvm::Value *v) const override
 
virtual uint32_t getCapstoneRegister (llvm::GlobalVariable *gv) const override
 
virtual bool isPseudoAsmFunction (llvm::Function *f) const override
 
virtual bool isPseudoAsmFunctionCall (llvm::CallInst *c) const override
 
virtual const std::set< llvm::Function * > & getPseudoAsmFunctions () const override
 
- Public Member Functions inherited from retdec::capstone2llvmir::Capstone2LlvmIrTranslator
virtual ~Capstone2LlvmIrTranslator ()=default
 

Protected Member Functions

virtual void initializeArchSpecific () override
 
virtual void initializeRegNameMap () override
 
virtual void initializeRegTypeMap () override
 
virtual void initializePseudoCallInstructionIDs () override
 
virtual void generateEnvironmentArchSpecific () override
 
virtual void generateDataLayout () override
 
virtual void generateRegisters () override
 
virtual uint32_t getCarryRegister () override
 
virtual void translateInstruction (cs_insn *i, llvm::IRBuilder<> &irb) override
 
void generateRegistersCommon ()
 
void generateRegisters16 ()
 
void generateRegisters32 ()
 
void generateRegisters64 ()
 
void generateX87RegLoadStoreFunctions ()
 
void initializeRegistersParentMap ()
 
void initializeRegistersParentMap16 ()
 
void initializeRegistersParentMap32 ()
 
void initializeRegistersParentMap64 ()
 
void initializeRegistersParentMapToOther (const std::vector< x86_reg > &rs, x86_reg other)
 
uint32_t getAccumulatorRegister (std::size_t size)
 
uint32_t getStackPointerRegister ()
 
uint32_t getBasePointerRegister ()
 
virtual llvm::Value * getCurrentPc (cs_insn *i)
 
virtual llvm::Value * loadRegister (uint32_t r, llvm::IRBuilder<> &irb, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::THROW) override
 
virtual llvm::Value * loadOp (cs_x86_op &op, llvm::IRBuilder<> &irb, llvm::Type *ty=nullptr, bool lea=false) override
 
virtual llvm::StoreInst * storeRegister (uint32_t r, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::ZEXT_TRUNC_OR_BITCAST) override
 
virtual llvm::Instruction * storeOp (cs_x86_op &op, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::ZEXT_TRUNC_OR_BITCAST) override
 
void storeRegisters (llvm::IRBuilder<> &irb, const std::vector< std::pair< uint32_t, llvm::Value * >> &regs)
 
void storeRegistersPlusSflags (llvm::IRBuilder<> &irb, llvm::Value *sflagsVal, const std::vector< std::pair< uint32_t, llvm::Value * >> &regs)
 
unsigned getAddrSpace (x86_reg segment)
 
bool isX87DataRegister (uint32_t r)
 
llvm::Value * loadX87Top (llvm::IRBuilder<> &irb)
 
llvm::Value * loadX87TopDec (llvm::IRBuilder<> &irb)
 
llvm::Value * loadX87TopInc (llvm::IRBuilder<> &irb)
 
llvm::Value * loadX87TopDecStore (llvm::IRBuilder<> &irb)
 
llvm::Value * loadX87TopIncStore (llvm::IRBuilder<> &irb)
 
llvm::Value * x87IncTop (llvm::IRBuilder<> &irb, llvm::Value *top=nullptr)
 
llvm::Value * x87DecTop (llvm::IRBuilder<> &irb, llvm::Value *top=nullptr)
 
llvm::CallInst * storeX87DataReg (llvm::IRBuilder<> &irb, llvm::Value *rNum, llvm::Value *val)
 
llvm::CallInst * loadX87DataReg (llvm::IRBuilder<> &irb, llvm::Value *rNum)
 
std::tuple< llvm::Value *, llvm::Value * > loadOpFloatingNullaryOrUnaryTop (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
std::tuple< llvm::Value *, llvm::Value *, llvm::Value *, llvm::Value * > loadOpFloatingBinaryTop (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
llvm::Value * generateZeroFlag (llvm::Value *val, llvm::IRBuilder<> &irb)
 
llvm::Value * generateSignFlag (llvm::Value *val, llvm::IRBuilder<> &irb)
 
llvm::Value * generateParityFlag (llvm::Value *val, llvm::IRBuilder<> &irb)
 
void generateSetSflags (llvm::Value *val, llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcAE (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcA (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcBE (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcB (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcE (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcGE (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcG (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcLE (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcL (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcNE (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcNO (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcNP (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcNS (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcO (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcP (llvm::IRBuilder<> &irb)
 
llvm::Value * generateCcS (llvm::IRBuilder<> &irb)
 
virtual bool isOperandRegister (cs_x86_op &op) override
 
virtual uint8_t getOperandAccess (cs_x86_op &op) override
 
void translateAaa (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateAad (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateAam (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateAdc (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateAdd (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateAnd (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateBsf (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateBswap (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateBt (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateBtc (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateBtr (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateBts (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCall (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCbw (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCdq (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCdqe (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateClc (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCld (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCli (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCmc (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCMovCc (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCmpxchg (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCmpxchg8b (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCmpxchg16b (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCompareString (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCpuid (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCqo (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCwd (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateCwde (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateDaaDas (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateDec (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateDiv (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateEnter (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFabs (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFadd (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFchs (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFcos (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFdecstp (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFdiv (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFdivr (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFprem (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFincstp (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFist (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFld (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFbld (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFbstp (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFCMovCc (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFloadConstant (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFmul (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFninit (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFrndint (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFsin (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFsincos (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFtan (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFatan (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFsqrt (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFscale (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFst (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFsub (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFsubr (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFucomPop (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFxam (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFxtract (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFxch (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateF2xm1 (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFyl2x (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFfree (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFnstsw (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFnclex (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFrstor (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFnsave (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFnstenv (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFxsave (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateFxstor (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateImul (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateInc (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateIns (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateJCc (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateJecxz (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateJmp (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateLahf (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateLea (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateLeave (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateLcall (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateLjmp (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateLoadFarPtr (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateLoadString (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateLoop (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateMov (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateMoveString (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateMul (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateNeg (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateNop (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateNot (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateOr (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateOuts (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translatePop (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translatePopa (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translatePopEflags (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translatePush (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translatePusha (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translatePushEflags (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateRcr (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateRcl (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateRdtsc (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateRdtscp (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateRol (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateRor (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateRet (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateSahf (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateSalc (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateSbb (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateScanString (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateSetCc (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateShiftLeft (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateShiftRight (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateShld (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateShrd (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateStc (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateStd (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateStoreString (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateSub (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateXchg (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateXlatb (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
void translateXor (cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
 
- Protected Member Functions inherited from retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >
llvm::Value * generateTypeConversion (llvm::IRBuilder<> &irb, llvm::Value *from, llvm::Type *to, eOpConv ct)
 
llvm::Type * _checkTypeConversion (llvm::IRBuilder<> &irb, llvm::Type *to, eOpConv ct)
 
virtual void initialize ()
 
virtual void openHandle ()
 
virtual void configureHandle ()
 
virtual void closeHandle ()
 
virtual void generateEnvironment ()
 
virtual void generateSpecialAsm2LlvmMapGlobal ()
 
virtual llvm::StoreInst * generateSpecialAsm2LlvmInstr (llvm::IRBuilder<> &irb, cs_insn *i)
 
virtual void generateCallFunction ()
 
virtual llvm::CallInst * generateCallFunctionCall (llvm::IRBuilder<> &irb, llvm::Value *t)
 
virtual llvm::CallInst * generateCondCallFunctionCall (llvm::IRBuilder<> &irb, llvm::Value *cond, llvm::Value *t)
 
virtual void generateReturnFunction ()
 
virtual llvm::CallInst * generateReturnFunctionCall (llvm::IRBuilder<> &irb, llvm::Value *t)
 
virtual llvm::CallInst * generateCondReturnFunctionCall (llvm::IRBuilder<> &irb, llvm::Value *cond, llvm::Value *t)
 
virtual void generateBranchFunction ()
 
virtual llvm::CallInst * generateBranchFunctionCall (llvm::IRBuilder<> &irb, llvm::Value *t)
 
virtual void generateCondBranchFunction ()
 
virtual llvm::CallInst * generateCondBranchFunctionCall (llvm::IRBuilder<> &irb, llvm::Value *cond, llvm::Value *t)
 
virtual llvm::GlobalVariable * createRegister (uint32_t r, llvm::GlobalValue::LinkageTypes lt=llvm::GlobalValue::LinkageTypes::InternalLinkage, llvm::Constant *initializer=nullptr)
 
virtual llvm::Value * loadRegister (uint32_t r, llvm::IRBuilder<> &irb, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::THROW)=0
 
llvm::Value * loadOp (cs_x86 *ci, llvm::IRBuilder<> &irb, std::size_t idx, llvm::Type *loadType=nullptr, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::NOTHING)
 
virtual llvm::Instruction * storeRegister (uint32_t r, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::SEXT_TRUNC_OR_BITCAST)=0
 
virtual llvm::Instruction * storeOp (cs_x86_op &op, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::SEXT_TRUNC_OR_BITCAST)=0
 
std::vector< llvm::Value * > _loadOps (cs_x86 *ci, llvm::IRBuilder<> &irb, std::size_t opCnt, bool strictCheck=true, llvm::Type *loadType=nullptr, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::NOTHING)
 
std::vector< llvm::Value * > _loadOpsUniversal (cs_x86 *ci, llvm::IRBuilder<> &irb, std::size_t opCnt, bool strictCheck=true, eOpConv ict=eOpConv::SEXT_TRUNC_OR_BITCAST, eOpConv fct=eOpConv::FPCAST_OR_BITCAST)
 
llvm::Value * loadOpUnary (cs_x86 *ci, llvm::IRBuilder<> &irb, llvm::Type *dstType=nullptr, llvm::Type *loadType=nullptr, eOpConv ct=eOpConv::THROW)
 
std::pair< llvm::Value *, llvm::Value * > loadOpBinary (cs_x86 *ci, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::NOTHING)
 
std::pair< llvm::Value *, llvm::Value * > loadOpBinary (cs_x86 *ci, llvm::IRBuilder<> &irb, eOpConv ict, eOpConv fct)
 
std::pair< llvm::Value *, llvm::Value * > loadOpBinary (cs_x86 *ci, llvm::IRBuilder<> &irb, llvm::Type *loadType, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::NOTHING)
 
llvm::Value * loadOpBinaryOp0 (cs_x86 *ci, llvm::IRBuilder<> &irb, llvm::Type *ty=nullptr)
 
llvm::Value * loadOpBinaryOp1 (cs_x86 *ci, llvm::IRBuilder<> &irb, llvm::Type *ty=nullptr)
 
std::tuple< llvm::Value *, llvm::Value *, llvm::Value * > loadOpTernary (cs_x86 *ci, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::NOTHING)
 
std::tuple< llvm::Value *, llvm::Value *, llvm::Value * > loadOpTernary (cs_x86 *ci, llvm::IRBuilder<> &irb, eOpConv ict, eOpConv fct)
 
std::tuple< llvm::Value *, llvm::Value *, llvm::Value * > loadOpTernary (cs_x86 *ci, llvm::IRBuilder<> &irb, llvm::Type *loadType, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::NOTHING)
 
std::pair< llvm::Value *, llvm::Value * > loadOpBinaryOrTernaryOp1Op2 (cs_x86 *ai, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::NOTHING)
 
std::pair< llvm::Value *, llvm::Value * > loadOpBinaryOrTernaryOp1Op2 (cs_x86 *ai, llvm::IRBuilder<> &irb, eOpConv ict, eOpConv fct)
 
std::tuple< llvm::Value *, llvm::Value *, llvm::Value * > loadOpQuaternaryOp1Op2Op3 (cs_x86 *ai, llvm::IRBuilder<> &irb)
 
llvm::Value * generateCarryAdd (llvm::Value *add, llvm::Value *op0, llvm::IRBuilder<> &irb)
 
llvm::Value * generateCarryAddC (llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr)
 
llvm::Value * generateCarryAddInt4 (llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb)
 
llvm::Value * generateCarryAddCInt4 (llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr)
 
llvm::Value * generateOverflowAdd (llvm::Value *add, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb)
 
llvm::Value * generateOverflowAddC (llvm::Value *add, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr)
 
llvm::Value * generateOverflowSub (llvm::Value *sub, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb)
 
llvm::Value * generateOverflowSubC (llvm::Value *sub, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr)
 
llvm::Value * generateBorrowSub (llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb)
 
llvm::Value * generateBorrowSubC (llvm::Value *sub, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr)
 
llvm::Value * generateBorrowSubInt4 (llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb)
 
llvm::Value * generateBorrowSubCInt4 (llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr)
 
llvm::IntegerType * getDefaultType ()
 
llvm::Value * getThisInsnAddress (cs_insn *i)
 
llvm::Value * getNextInsnAddress (cs_insn *i)
 
llvm::BranchInst * getCondBranchForInsnInIfThen (llvm::Instruction *i) const
 
std::string getPseudoAsmFunctionName (cs_insn *insn)
 
llvm::Function * getPseudoAsmFunction (cs_insn *insn, llvm::FunctionType *type, const std::string &name="")
 
llvm::Function * getPseudoAsmFunction (cs_insn *insn, llvm::Type *retType, llvm::ArrayRef< llvm::Type * > params, const std::string &name="")
 
void translatePseudoAsmOp0Fnc (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void translatePseudoAsmFncOp0 (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void translatePseudoAsmOp0FncOp0 (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void translatePseudoAsmFncOp0Op1 (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void translatePseudoAsmOp0FncOp1 (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void translatePseudoAsmOp0FncOp0Op1 (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void translatePseudoAsmFncOp0Op1Op2 (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void translatePseudoAsmOp0FncOp1Op2 (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void translatePseudoAsmOp0FncOp0Op1Op2 (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void translatePseudoAsmFncOp0Op1Op2Op3 (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void translatePseudoAsmOp0FncOp1Op2Op3 (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void translatePseudoAsmOp0FncOp0Op1Op2Op3 (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void translatePseudoAsmOp0Op1FncOp0Op1Op2Op3 (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
virtual uint8_t getOperandAccess (cs_x86_op &op)
 
virtual void translatePseudoAsmGeneric (cs_insn *i, cs_x86 *ci, llvm::IRBuilder<> &irb)
 
void throwUnexpectedOperands (cs_insn *i, const std::string comment="")
 
void throwUnhandledInstructions (cs_insn *i, const std::string comment="")
 

Protected Attributes

std::vector< uint32_t > _reg2parentMap
 
llvm::Value * top = nullptr
 
llvm::Value * idx = nullptr
 
llvm::Function * _x87DataStoreFunction = nullptr
 
llvm::Function * _x87DataLoadFunction = nullptr
 
- Protected Attributes inherited from retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >
csh _handle
 
cs_arch _arch
 
cs_mode _basicMode
 
cs_mode _extraMode
 
cs_mode _origBasicMode
 
llvm::Module * _module
 
llvm::GlobalVariable * _asm2llvmGv
 
llvm::Function * _callFunction
 
llvm::Function * _returnFunction
 
llvm::Function * _branchFunction
 
llvm::Function * _condBranchFunction
 
llvm::GlobalValue::LinkageTypes _regLt
 
std::map< std::pair< std::string, llvm::FunctionType * >, llvm::Function * > _insn2asmFunctions
 (fnc_name, fnc_type) -> fnc More...
 
std::set< llvm::Function * > _asmFunctions
 
std::map< uint32_t, std::string > _reg2name
 
std::map< uint32_t, llvm::Type * > _reg2type
 
std::map< llvm::GlobalVariable *, uint32_t > _llvm2CapstoneRegs
 
std::map< uint32_t, llvm::GlobalVariable * > _capstone2LlvmRegs
 
llvm::CallInst * _branchGenerated
 
bool _inCondition
 
llvm::Value * op0
 
llvm::Value * op1
 
llvm::Value * op2
 
llvm::Value * op3
 
cs_insn * _insn
 Capstone instruction being currently translated. More...
 
std::set< unsigned int > _callInsnIds
 
std::set< unsigned int > _returnInsnIds
 
std::set< unsigned int > _branchInsnIds
 
std::set< unsigned int > _condBranchInsnIds
 
std::set< unsigned int > _controlFlowInsnIds
 
bool _ignoreUnexpectedOperands
 
bool _ignoreUnhandledInstructions
 
bool _generatePseudoAsmFunctions
 

Static Protected Attributes

static std::map< std::size_t, void(Capstone2LlvmIrTranslatorX86_impl::*)(cs_insn *i, cs_x86 *, llvm::IRBuilder<> &)> _i2fm
 Mapping of Capstone instruction IDs to their translation functions. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from retdec::capstone2llvmir::Capstone2LlvmIrTranslator
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateArch (cs_arch a, llvm::Module *m, cs_mode basic=CS_MODE_LITTLE_ENDIAN, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateArm (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateThumb (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateArm64 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateMips32 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateMips64 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateMips3 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateMips32R6 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateX86_16 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateX86_32 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateX86_64 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreatePpc32 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreatePpc64 (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreatePpcQpx (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateSparc (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateSysz (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
static std::unique_ptr< Capstone2LlvmIrTranslatorcreateXcore (llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
 
- Protected Types inherited from retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >
enum class  eOpConv
 

Constructor & Destructor Documentation

◆ Capstone2LlvmIrTranslatorX86_impl()

retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::Capstone2LlvmIrTranslatorX86_impl ( llvm::Module *  m,
cs_mode  basic = CS_MODE_32,
cs_mode  extra = CS_MODE_LITTLE_ENDIAN 
)

Member Function Documentation

◆ generateCcA()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcA ( llvm::IRBuilder<> &  irb)
protected

CF == 0 && ZF == 0 A - above NBE - not below or equal

◆ generateCcAE()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcAE ( llvm::IRBuilder<> &  irb)
protected

CF == 0 AE - above or equal NB - not below NC - not carry

◆ generateCcB()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcB ( llvm::IRBuilder<> &  irb)
protected

CF == 1 B - below C - carry NAE - not above or equal

◆ generateCcBE()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcBE ( llvm::IRBuilder<> &  irb)
protected

CF == 1 or ZF == 1 BE - below or equal NA - not above

◆ generateCcE()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcE ( llvm::IRBuilder<> &  irb)
protected

ZF == 1 E - equal Z - zero

◆ generateCcG()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcG ( llvm::IRBuilder<> &  irb)
protected

ZF == 0 and SF == OF G - greater NLE - not less or equal

◆ generateCcGE()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcGE ( llvm::IRBuilder<> &  irb)
protected

SF == OF GE - greater or equal NL - not less

◆ generateCcL()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcL ( llvm::IRBuilder<> &  irb)
protected

SF != OF L - less NGE - not greater or equal

◆ generateCcLE()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcLE ( llvm::IRBuilder<> &  irb)
protected

ZF == 1 or SF != OF LE - less or equal NG - not greater

◆ generateCcNE()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcNE ( llvm::IRBuilder<> &  irb)
protected

ZF == 0 NE - not equal NZ - not zero

◆ generateCcNO()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcNO ( llvm::IRBuilder<> &  irb)
protected

OF == 0 NO - not overflow

◆ generateCcNP()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcNP ( llvm::IRBuilder<> &  irb)
protected

PF == 0 NP - not parity PO - parity odd

◆ generateCcNS()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcNS ( llvm::IRBuilder<> &  irb)
protected

SF == 0 NS - not sign

◆ generateCcO()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcO ( llvm::IRBuilder<> &  irb)
protected

OF == 1 O - overflow

◆ generateCcP()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcP ( llvm::IRBuilder<> &  irb)
protected

PF == 1 P - parity PE - parity even

◆ generateCcS()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateCcS ( llvm::IRBuilder<> &  irb)
protected

SF == 1 S - sign

◆ generateDataLayout()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateDataLayout ( )
overrideprotectedvirtual

Generate LLVM data layout into the module. This is architecture and mode specific and must be implemented in concrete classes.

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >.

◆ generateEnvironmentArchSpecific()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateEnvironmentArchSpecific ( )
overrideprotectedvirtual

Generate architecture specific environment on top of common environment generated by generateEnvironment().

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >.

◆ generateParityFlag()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateParityFlag ( llvm::Value *  val,
llvm::IRBuilder<> &  irb 
)
protected

The parity flag reflects the parity only of the least significant byte of the result, and is set if the number of set bits of ones is even.

(val & 1) (== 1) -> odd (val & 1) == 0 -> even

◆ generateRegisters()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateRegisters ( )
overrideprotectedvirtual

Generate LLVM global variables for registers. This is architecture and mode specific and must be implemented in concrete classes.

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >.

◆ generateRegisters16()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateRegisters16 ( )
protected

◆ generateRegisters32()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateRegisters32 ( )
protected

◆ generateRegisters64()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateRegisters64 ( )
protected

◆ generateRegistersCommon()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateRegistersCommon ( )
protected

◆ generateSetSflags()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateSetSflags ( llvm::Value *  val,
llvm::IRBuilder<> &  irb 
)
protected

SET_SFLAGS()

◆ generateSignFlag()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateSignFlag ( llvm::Value *  val,
llvm::IRBuilder<> &  irb 
)
protected

◆ generateX87RegLoadStoreFunctions()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateX87RegLoadStoreFunctions ( )
protected

◆ generateZeroFlag()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::generateZeroFlag ( llvm::Value *  val,
llvm::IRBuilder<> &  irb 
)
protected

◆ getAccumulatorRegister()

uint32_t retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::getAccumulatorRegister ( std::size_t  size)
protected

◆ getAddrSpace()

unsigned retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::getAddrSpace ( x86_reg  segment)
protected

◆ getArchByteSize()

uint32_t retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::getArchByteSize ( )
overridevirtual
Returns
Architecture byte size according to the currently set basic mode.

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslator.

◆ getBasePointerRegister()

uint32_t retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::getBasePointerRegister ( )
protected

◆ getCarryRegister()

uint32_t retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::getCarryRegister ( )
overrideprotectedvirtual

◆ getCurrentPc()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::getCurrentPc ( cs_insn *  i)
protectedvirtual

◆ getOperandAccess()

uint8_t retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::getOperandAccess ( cs_x86_op &  op)
overrideprotectedvirtual

◆ getParentRegister()

uint32_t retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::getParentRegister ( uint32_t  r) const
overridevirtual

All registers from the original Capstone x86_reg should be in _reg2parentMap. Our added registers are not there, but all of them should map to themselves, i.e. if register not in map, we return its number.

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86.

◆ getStackPointerRegister()

uint32_t retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::getStackPointerRegister ( )
protected

◆ getX87DataLoadFunction()

llvm::Function * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::getX87DataLoadFunction ( ) const
overridevirtual
Returns
LLVM function used as special pseudo function whose call in the translated LLVM IR represents a load of fp value (call return value) from the x87 fpu stack slot (first argument). Function signature:
fp80 (i3)

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86.

◆ getX87DataStoreFunction()

llvm::Function * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::getX87DataStoreFunction ( ) const
overridevirtual
Returns
LLVM function used as special pseudo function whose call in the translated LLVM IR represents a store of fp value (call second argument) to the x87 fpu stack slot (call first argument). Function signature:
void (i3, fp80)

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86.

◆ initializeArchSpecific()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::initializeArchSpecific ( )
overrideprotectedvirtual

Do architecture and mode specific initialization on top of common initialization done by initialize();

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >.

◆ initializePseudoCallInstructionIDs()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::initializePseudoCallInstructionIDs ( )
overrideprotectedvirtual

If possible, initialize _callInsnIds, _returnInsnIds, _branchInsnIds, _condBranchInsnIds, _condBranchInsnIds sets.

For some architectures, it is not possible to initialize all the instructions that may generate control flow change. E.g. Any kind of ARM instruction that writes to PC is changing control flow.

This is not ideal, because each time some instruction that generates one of these is added, or removed, its ID must also be manualy added, or removed, here. This could be easily forgotten. Right now, I do not know how to solve this better (i.e. automatic update).

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >.

◆ initializeRegistersParentMap()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::initializeRegistersParentMap ( )
protected

◆ initializeRegistersParentMap16()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::initializeRegistersParentMap16 ( )
protected

◆ initializeRegistersParentMap32()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::initializeRegistersParentMap32 ( )
protected

◆ initializeRegistersParentMap64()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::initializeRegistersParentMap64 ( )
protected

◆ initializeRegistersParentMapToOther()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::initializeRegistersParentMapToOther ( const std::vector< x86_reg > &  rs,
x86_reg  other 
)
protected

◆ initializeRegNameMap()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::initializeRegNameMap ( )
overrideprotectedvirtual

Initialize _reg2name. See comment for _reg2name to know what must be initialized, and what may or may not be initialized.

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >.

◆ initializeRegTypeMap()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::initializeRegTypeMap ( )
overrideprotectedvirtual

Initialize _reg2type. See comment for _reg2type to know what must be initialized, and what may or may not be initialized.

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >.

◆ isAllowedBasicMode()

bool retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::isAllowedBasicMode ( cs_mode  m)
overridevirtual

x86 is special.

If the original basic mode was not set yet (CS_MODE_LITTLE_ENDIAN), this returns all the modes that can be used to initialize x86 translator.

If it was set, x86 allows to change basic mode only to modes lower than the original initialization mode an back to original mode (CS_MODE_16 < CS_MODE_32 < CS_MODE_64). This is because the original mode is used to initialize module's environment with registers and other specific features. It is possible to simulate lower modes in environments created for higher modes (e.g. get ax register from eax), but not the other way around (e.g. get rax from eax).

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslator.

◆ isAllowedExtraMode()

bool retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::isAllowedExtraMode ( cs_mode  m)
overridevirtual

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.

Returns
True if mode is allowed, false otherwise.

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslator.

◆ isAnyPseudoFunction()

bool retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::isAnyPseudoFunction ( llvm::Function *  f) const
overridevirtual

Is the passed LLVM function f any kind of pseudo function generated by capstone2llvmir (e.g. call/return/br/... function).

Reimplemented from retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >.

◆ isAnyPseudoFunctionCall()

bool retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::isAnyPseudoFunctionCall ( llvm::CallInst *  c) const
overridevirtual

Is the passed LLVM call c any kind of pseudo call generated by capstone2llvmir (e.g. call/return/br/... function call).

Reimplemented from retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >.

◆ isOperandRegister()

bool retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::isOperandRegister ( cs_x86_op &  op)
overrideprotectedvirtual

◆ isX87DataLoadFunction()

bool retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::isX87DataLoadFunction ( llvm::Function *  f) const
overridevirtual

Is the passed LLVM function f the special pseudo function whose call represents a load of fp value from the x87 fpu stack slot?

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86.

◆ isX87DataLoadFunctionCall()

bool retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::isX87DataLoadFunctionCall ( llvm::CallInst *  c) const
overridevirtual

Is the passed LLVM call instruction c a special pseudo call instruction representing a load of fp value from the x87 fpu stack slot?

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86.

◆ isX87DataRegister()

bool retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::isX87DataRegister ( uint32_t  r)
protected

◆ isX87DataStoreFunction()

bool retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::isX87DataStoreFunction ( llvm::Function *  f) const
overridevirtual

Is the passed LLVM function f the special pseudo function whose call represents a store of fp value to the x87 fpu stack slot?

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86.

◆ isX87DataStoreFunctionCall()

bool retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::isX87DataStoreFunctionCall ( llvm::CallInst *  c) const
overridevirtual

Is the passed LLVM call instruction c a special pseudo call instruction representing a store of fp value to the x87 fpu stack slot?

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86.

◆ loadOp()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::loadOp ( cs_x86_op &  op,
llvm::IRBuilder<> &  irb,
llvm::Type *  ty = nullptr,
bool  lea = false 
)
overrideprotectedvirtual

◆ loadOpFloatingBinaryTop()

std::tuple< llvm::Value *, llvm::Value *, llvm::Value *, llvm::Value * > retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::loadOpFloatingBinaryTop ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected
Returns
(op0, op1, top, idx)

◆ loadOpFloatingNullaryOrUnaryTop()

std::tuple< llvm::Value *, llvm::Value * > retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::loadOpFloatingNullaryOrUnaryTop ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected
Returns
(op0, top)

◆ loadRegister()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::loadRegister ( uint32_t  r,
llvm::IRBuilder<> &  irb,
llvm::Type *  dstType = nullptr,
eOpConv  ct = eOpConv::THROW 
)
overrideprotectedvirtual

◆ loadX87DataReg()

llvm::CallInst * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::loadX87DataReg ( llvm::IRBuilder<> &  irb,
llvm::Value *  rNum 
)
protected

◆ loadX87Top()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::loadX87Top ( llvm::IRBuilder<> &  irb)
protected

◆ loadX87TopDec()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::loadX87TopDec ( llvm::IRBuilder<> &  irb)
protected

◆ loadX87TopDecStore()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::loadX87TopDecStore ( llvm::IRBuilder<> &  irb)
protected

◆ loadX87TopInc()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::loadX87TopInc ( llvm::IRBuilder<> &  irb)
protected

◆ loadX87TopIncStore()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::loadX87TopIncStore ( llvm::IRBuilder<> &  irb)
protected

This returns TOP value before the incrementation.

◆ storeOp()

llvm::Instruction * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::storeOp ( cs_x86_op &  op,
llvm::Value *  val,
llvm::IRBuilder<> &  irb,
eOpConv  ct = eOpConv::ZEXT_TRUNC_OR_BITCAST 
)
overrideprotectedvirtual

◆ storeRegister()

llvm::StoreInst * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::storeRegister ( uint32_t  r,
llvm::Value *  val,
llvm::IRBuilder<> &  irb,
eOpConv  ct = eOpConv::ZEXT_TRUNC_OR_BITCAST 
)
overrideprotectedvirtual

◆ storeRegisters()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::storeRegisters ( llvm::IRBuilder<> &  irb,
const std::vector< std::pair< uint32_t, llvm::Value * >> &  regs 
)
protected

◆ storeRegistersPlusSflags()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::storeRegistersPlusSflags ( llvm::IRBuilder<> &  irb,
llvm::Value *  sflagsVal,
const std::vector< std::pair< uint32_t, llvm::Value * >> &  regs 
)
protected

◆ storeX87DataReg()

llvm::CallInst * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::storeX87DataReg ( llvm::IRBuilder<> &  irb,
llvm::Value *  rNum,
llvm::Value *  val 
)
protected

◆ translateAaa()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateAaa ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_AAA, X86_INS_AAS

◆ translateAad()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateAad ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_AAD According to Ollydbg, CF, OF, and possibly AF are also set (undef in specs).

◆ translateAam()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateAam ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_AAM

◆ translateAdc()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateAdc ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_ADC, X86_INS_ADCX, X86_INS_ADOX http://stackoverflow.com/questions/29747508/what-is-the-difference-between-the-adc-and-adcx-instructions-on-ia32-ia64 X86_INS_ADC == X86_INS_ADCX : carry-in/out == CF X86_INS_ADOX : carry-in/out == OF

◆ translateAdd()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateAdd ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_ADD, X86_INS_XADD

◆ translateAnd()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateAnd ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_TEST, X86_INS_AND

◆ translateBsf()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateBsf ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_BSF, X86_INS_BSR

◆ translateBswap()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateBswap ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_BSWAP

◆ translateBt()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateBt ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_BT

◆ translateBtc()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateBtc ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_BTC

◆ translateBtr()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateBtr ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_BTR

◆ translateBts()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateBts ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_BTS

◆ translateCall()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCall ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CALL

◆ translateCbw()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCbw ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CBW

◆ translateCdq()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCdq ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CDQ

◆ translateCdqe()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCdqe ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CDQE

◆ translateClc()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateClc ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CLC

◆ translateCld()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCld ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CLD

◆ translateCli()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCli ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CLI

◆ translateCmc()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCmc ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CMC

◆ translateCMovCc()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCMovCc ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CMOVAE, X86_INS_CMOVA, X86_INS_CMOVBE, X86_INS_CMOVB, X86_INS_CMOVE, X86_INS_CMOVGE, X86_INS_CMOVG, X86_INS_CMOVLE, X86_INS_CMOVL, X86_INS_CMOVNE, X86_INS_CMOVNO, X86_INS_CMOVNP, X86_INS_CMOVNS, X86_INS_CMOVO, X86_INS_CMOVP, X86_INS_CMOVS

◆ translateCmpxchg()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCmpxchg ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CMPXCHG cmpxchg accum={al, ax, eax}, op0, op1 if (accum == op0) then op0 <- op1 else accum <- op0

◆ translateCmpxchg16b()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCmpxchg16b ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CMPXCHG16B

◆ translateCmpxchg8b()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCmpxchg8b ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CMPXCHG8B

◆ translateCompareString()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCompareString ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CMPSB, X86_INS_CMPSW, X86_INS_CMPSD, X86_INS_CMPSQ TODO: rep variant is a strncmp-type operation, maybe we could convert it to such psuedo call. IDA does not do it (do while is generated) so maybe there is some problem.

◆ translateCpuid()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCpuid ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CPUID

◆ translateCqo()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCqo ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CQO

◆ translateCwd()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCwd ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CWD

◆ translateCwde()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateCwde ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_CWDE

◆ translateDaaDas()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateDaaDas ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_DAA, X86_INS_DAS

◆ translateDec()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateDec ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_DEC

◆ translateDiv()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateDiv ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_DIV, X86_INS_IDIV

◆ translateEnter()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateEnter ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_ENTER

◆ translateF2xm1()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateF2xm1 ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_F2XM1

◆ translateFabs()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFabs ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FABS

◆ translateFadd()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFadd ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FADD, X86_INS_FADDP, X86_INS_FIADD

◆ translateFatan()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFatan ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FPATAN

◆ translateFbld()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFbld ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FBLD

◆ translateFbstp()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFbstp ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FBSTP

◆ translateFchs()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFchs ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FCHS

◆ translateFCMovCc()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFCMovCc ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FCMOVB, X86_INS_FCMOVE, X86_INS_FCMOVBE, X86_INS_FCMOVU, X86_INS_FCMOVNB, X86_INS_FCMOVNE, X86_INS_FCMOVNBE, X86_INS_FCMOVNU

◆ translateFcos()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFcos ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FCOS

◆ translateFdecstp()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFdecstp ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FDECSTP

◆ translateFdiv()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFdiv ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FDIV, X86_INS_FDIVP, X86_INS_FIDIV

◆ translateFdivr()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFdivr ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FDIVR, X86_INS_FDIVRP, X86_INS_FIDIVR

◆ translateFfree()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFfree ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FFREE

◆ translateFincstp()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFincstp ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FINCSTP

◆ translateFist()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFist ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FIST, X86_INS_FISTP, X86_INS_FISTPP

◆ translateFld()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFld ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FLD, X86_INS_FILD

◆ translateFloadConstant()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFloadConstant ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FLD1, X86_INS_FLDL2T, X86_INS_FLDL2E, X86_INS_FLDPI, X86_INS_FLDLG2, X86_INS_FLDLN2, X86_INS_FLDZ

◆ translateFmul()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFmul ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FMUL, X86_INS_FMULP, X86_INS_FIMUL

◆ translateFnclex()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFnclex ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FNCLEX

◆ translateFninit()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFninit ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FNINIT This was modeled as empty (nop) instruction in an old semantics, but it does set some values. Not all of the set objects are represented in our current environment, and therefore we are not able to set them all.

◆ translateFnsave()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFnsave ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FNSAVE

◆ translateFnstenv()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFnstenv ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FNSTENV

◆ translateFnstsw()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFnstsw ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FNSTSW

◆ translateFprem()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFprem ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FPREM, X86_INS_FPREM1

◆ translateFrndint()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFrndint ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FRNDINT

◆ translateFrstor()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFrstor ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FRSTOR

◆ translateFscale()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFscale ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FSCALE

◆ translateFsin()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFsin ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FSIN

◆ translateFsincos()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFsincos ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FSINCOS

◆ translateFsqrt()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFsqrt ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FSQRT

◆ translateFst()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFst ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FST, X86_INS_FSTP

◆ translateFsub()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFsub ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FSUB, X86_INS_FSUBP, X86_INS_FISUB

◆ translateFsubr()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFsubr ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FSUBR, X86_INS_FSUBRP, X86_INS_FISUBR

◆ translateFtan()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFtan ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FPTAN

◆ translateFucomPop()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFucomPop ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FUCOM, X86_INS_FUCOMP, X86_INS_FUCOMPP X86_INS_FCOM, X86_INS_FCOMP, X86_INS_FCOMPP X86_INS_FUCOMI, X86_INS_FUCOMIP X86_INS_FCOMI, X86_INS_FCOMIP X86_INS_FTST X86_INS_FICOM, X86_INS_FICOMP

◆ translateFxam()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFxam ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FXAM

◆ translateFxch()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFxch ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FXCH

◆ translateFxsave()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFxsave ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FXSAVE, X86_INS_FXSAVE64

◆ translateFxstor()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFxstor ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FXRSTOR, X86_INS_FXRSTOR64

◆ translateFxtract()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFxtract ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FXTRACT

◆ translateFyl2x()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateFyl2x ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_FYL2X, X86_INS_FYL2X1

◆ translateImul()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateImul ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_IMUL

◆ translateInc()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateInc ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_INC

◆ translateIns()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateIns ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_INSB, X86_INS_INSW, X86_INS_INSD

◆ translateInstruction()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateInstruction ( cs_insn *  i,
llvm::IRBuilder<> &  irb 
)
overrideprotectedvirtual

Translate single Capstone instruction.

Implements retdec::capstone2llvmir::Capstone2LlvmIrTranslator_impl< cs_x86, cs_x86_op >.

◆ translateJCc()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateJCc ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_JAE, X86_INS_JA, X86_INS_JBE, X86_INS_JB, X86_INS_JE, X86_INS_JGE, X86_INS_JG, X86_INS_JLE, X86_INS_JL, X86_INS_JNE, X86_INS_JNO, X86_INS_JNP, X86_INS_JNS, X86_INS_JO, X86_INS_JP, X86_INS_JS

◆ translateJecxz()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateJecxz ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_JCXZ, X86_INS_JECXZ, X86_INS_JRCXZ

◆ translateJmp()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateJmp ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_JMP

◆ translateLahf()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateLahf ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_LAHF

◆ translateLcall()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateLcall ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_LCALL e.g. lcall ptr [ecx + 0x78563412]

◆ translateLea()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateLea ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_LEA

◆ translateLeave()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateLeave ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_LEAVE

◆ translateLjmp()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateLjmp ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_LJMP

◆ translateLoadFarPtr()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateLoadFarPtr ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_LDS, X86_INS_LES, X86_INS_LFS, X86_INS_LGS, X86_INS_LSS There is some more shit going on when instruction executed in protected mode.

◆ translateLoadString()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateLoadString ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_LODSB, X86_INS_LODSW, X86_INS_LODSD, X86_INS_LODSQ

  • REP prefix variants

◆ translateLoop()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateLoop ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_LOOP, X86_INS_LOOPE (LOOPZ), X86_INS_LOOPNE (LOOPNZ)

◆ translateMov()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateMov ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_MOV, X86_INS_MOVSX, X86_INS_MOVSXD, X86_INS_MOVZX, X86_INS_MOVABS

◆ translateMoveString()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateMoveString ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_MOVSB, X86_INS_MOVSW, X86_INS_MOVSD, X86_INS_MOVSQ

  • REP prefix variants

◆ translateMul()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateMul ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_MUL, X86_INS_IMUL (only unary form)

◆ translateNeg()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateNeg ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_NEG

◆ translateNop()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateNop ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_NOP, X86_INS_UD2, X86_INS_UD2B, X86_INS_FNOP, X86_INS_FDISI8087_NOP, X86_INS_FENI8087_NOP

X86_INS_FNSTCW - ignore FPU control word store. X86_INS_FLDCW - ignore FPU control word load.

Complete list from the old semantics: IRETD, IRET, STI, CLI, VERR, VERW, LMSW, LTR, SMSW, CLTS, INVD, LOCK, RSM, RDMSR, WRMSR, RDPMC, SYSENTER, SYSEXIT, XGETBV, LAR, LSL, INVPCID, SLDT, LLDT, SGDT, SIDT, LGDT, LIDT, XSAVE, XRSTOR, XSAVEOPT, INVLPG, FLDENV, ARPL, STR, FWAIT, FNOP

◆ translateNot()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateNot ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_NOT

◆ translateOr()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateOr ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_OR

◆ translateOuts()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateOuts ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_OUTSB, X86_INS_OUTSD, X86_INS_OUTSW

◆ translatePop()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translatePop ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_POP

◆ translatePopa()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translatePopa ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_POPAL == POPAD (32-bit), X86_INS_POPAW == POPA (16-bit)

◆ translatePopEflags()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translatePopEflags ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_POPF, X86_INS_POPFD, X86_INS_POPFQ This currently does only what original model did. The operations are more complicated, setting of some flags is conditoned by some runtime CPU modes. I don't know if we can/need to solve this.

◆ translatePush()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translatePush ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_PUSH

◆ translatePusha()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translatePusha ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_PUSHAL = PUSHAD (32-bit), X86_INS_PUSHAW = PUSHA (16-bit)

◆ translatePushEflags()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translatePushEflags ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_PUSHF, X86_INS_PUSHFD, X86_INS_PUSHFQ See translatePopEflags() comment.

◆ translateRcl()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateRcl ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_RCL

◆ translateRcr()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateRcr ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_RCR

◆ translateRdtsc()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateRdtsc ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_RDTSC

◆ translateRdtscp()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateRdtscp ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_RDTSCP

◆ translateRet()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateRet ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_RET, X86_INS_RETF, X86_INS_RETFQ

◆ translateRol()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateRol ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_ROL

◆ translateRor()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateRor ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_ROR

◆ translateSahf()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateSahf ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_SAHF

◆ translateSalc()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateSalc ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_SALC

◆ translateSbb()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateSbb ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_SBB op0 = op0 - (op1 + CF)

◆ translateScanString()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateScanString ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_SCASB, X86_INS_SCASW, X86_INS_SCASD, X86_INS_SCASQ TODO: rep variant is a strchr-type operation, maybe we could convert it to such psuedo call. IDA does not do it (do while is generated) so maybe there is some problem. TODO: this is strlen only if (according to IDA):

  • X86_INS_SCASB
  • X86_PREFIX_REPNE
  • eax == 0 => searches for terminating '\0' in string and returns its position = length. other constants in eax || X86_PREFIX_REPE || SCASD || ... => do while cycle

◆ translateSetCc()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateSetCc ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_SETAE, X86_INS_SETA, X86_INS_SETBE, X86_INS_SETB, X86_INS_SETE, X86_INS_SETGE, X86_INS_SETG, X86_INS_SETLE, X86_INS_SETL, X86_INS_SETNE, X86_INS_SETNO, X86_INS_SETNP, X86_INS_SETNS, X86_INS_SETO, X86_INS_SETP, X86_INS_SETS

◆ translateShiftLeft()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateShiftLeft ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_SHL == X86_INS_SAL

◆ translateShiftRight()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateShiftRight ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_SHR, X86_INS_SAR

◆ translateShld()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateShld ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_SHLD

◆ translateShrd()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateShrd ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_SHRD

◆ translateStc()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateStc ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_STC

◆ translateStd()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateStd ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_STD

◆ translateStoreString()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateStoreString ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_STOSB, X86_INS_STOSW, X86_INS_STOSD, X86_INS_STOSQ

  • REP prefix variants

◆ translateSub()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateSub ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_SUB, X86_INS_CMP

◆ translateXchg()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateXchg ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_XCHG

◆ translateXlatb()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateXlatb ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_XLATB

◆ translateXor()

void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::translateXor ( cs_insn *  i,
cs_x86 *  xi,
llvm::IRBuilder<> &  irb 
)
protected

X86_INS_XOR

◆ x87DecTop()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::x87DecTop ( llvm::IRBuilder<> &  irb,
llvm::Value *  top = nullptr 
)
protected

◆ x87IncTop()

llvm::Value * retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::x87IncTop ( llvm::IRBuilder<> &  irb,
llvm::Value *  top = nullptr 
)
protected

Member Data Documentation

◆ _i2fm

std::map< std::size_t, void(Capstone2LlvmIrTranslatorX86_impl::*)(cs_insn *i, cs_x86 *, llvm::IRBuilder<> &)> retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::_i2fm
staticprotected

Mapping of Capstone instruction IDs to their translation functions.

◆ _reg2parentMap

std::vector<uint32_t> retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::_reg2parentMap
protected

Maps register numbers to numbers of their parents depending on the original basic mode (e.g. X86_REG_AH to X86_REG_EAX in 32-bit mode, or to X86_REG_RAX in 64-bit mode). Unhandled mappings are set to X86_REG_INVALID (e.g. mapping of X86_REG_EAX in 16-bit mode). Once generated, it does not change. Register's number is a key into the array of parent number values. Only values of the Capstone's original x86_reg enum are handled, our added enums (e.g. x86_reg_rflags) are not. Always use getParentRegister() method to get values from this map – it will deal with added enums.

◆ _x87DataLoadFunction

llvm::Function* retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::_x87DataLoadFunction = nullptr
protected

◆ _x87DataStoreFunction

llvm::Function* retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::_x87DataStoreFunction = nullptr
protected

◆ idx

llvm::Value* retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::idx = nullptr
protected

◆ top

llvm::Value* retdec::capstone2llvmir::Capstone2LlvmIrTranslatorX86_impl::top = nullptr
protected

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