7 #ifndef RETDEC_CAPSTONE2LLVMIR_RETDEC_CAPSTONE2LLVMIR_H
8 #define RETDEC_CAPSTONE2LLVMIR_RETDEC_CAPSTONE2LLVMIR_H
14 #include <capstone/capstone.h>
15 #include <llvm/IR/IRBuilder.h>
16 #include <llvm/IR/Instruction.h>
17 #include <llvm/IR/Instructions.h>
18 #include <llvm/IR/Module.h>
19 #include <llvm/Support/raw_ostream.h>
32 namespace capstone2llvmir {
58 static std::unique_ptr<Capstone2LlvmIrTranslator>
createArch(
61 cs_mode basic = CS_MODE_LITTLE_ENDIAN,
62 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
72 static std::unique_ptr<Capstone2LlvmIrTranslator>
createArm(
74 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
84 static std::unique_ptr<Capstone2LlvmIrTranslator>
createThumb(
86 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
95 static std::unique_ptr<Capstone2LlvmIrTranslator>
createArm64(
97 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
108 static std::unique_ptr<Capstone2LlvmIrTranslator>
createMips32(
110 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
121 static std::unique_ptr<Capstone2LlvmIrTranslator>
createMips64(
123 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
134 static std::unique_ptr<Capstone2LlvmIrTranslator>
createMips3(
136 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
149 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
159 static std::unique_ptr<Capstone2LlvmIrTranslator>
createX86_16(
161 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
171 static std::unique_ptr<Capstone2LlvmIrTranslator>
createX86_32(
173 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
183 static std::unique_ptr<Capstone2LlvmIrTranslator>
createX86_64(
185 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
195 static std::unique_ptr<Capstone2LlvmIrTranslator>
createPpc32(
197 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
207 static std::unique_ptr<Capstone2LlvmIrTranslator>
createPpc64(
209 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
219 static std::unique_ptr<Capstone2LlvmIrTranslator>
createPpcQpx(
221 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
229 static std::unique_ptr<Capstone2LlvmIrTranslator>
createSparc(
231 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
239 static std::unique_ptr<Capstone2LlvmIrTranslator>
createSysz(
241 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
249 static std::unique_ptr<Capstone2LlvmIrTranslator>
createXcore(
251 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
358 std::list<std::pair<llvm::StoreInst*, cs_insn*>>
insns;
387 const uint8_t* bytes,
390 llvm::IRBuilder<>& irb,
391 std::size_t count = 0,
392 bool stopOnBranch =
false) = 0;
432 const uint8_t*& bytes,
435 llvm::IRBuilder<>& irb) = 0;
734 virtual llvm::GlobalVariable*
isRegister(llvm::Value* v)
const = 0;
Additional (on top of Capstone) definitions for ARM64 translator.
Additional (on top of Capstone) definitions for ARM translator.
Definitions of exceptions used in capstone2llmvir library.
Definition: capstone2llvmir.h:42
virtual bool isReturnFunction(llvm::Function *f) const =0
static std::unique_ptr< Capstone2LlvmIrTranslator > createMips3(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:114
virtual bool isAnyPseudoFunction(llvm::Function *f) const =0
virtual std::size_t getDelaySlot(uint32_t id) const =0
virtual bool isReturnInstruction(cs_insn &i) const =0
virtual cs_mode getExtraMode() const =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 llvm::BranchInst * isInConditionCallFunctionCall(llvm::CallInst *c) const =0
virtual bool isSpecialAsm2LlvmMapGlobal(llvm::Value *v) const =0
virtual bool isCallFunctionCall(llvm::CallInst *c) const =0
virtual void modifyBasicMode(cs_mode m)=0
virtual void setIgnoreUnhandledInstructions(bool f)=0
virtual bool hasDelaySlot(uint32_t id) const =0
virtual std::string getRegisterName(uint32_t r) const =0
static std::unique_ptr< Capstone2LlvmIrTranslator > createSysz(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:178
virtual llvm::GlobalVariable * getRegister(uint32_t r)=0
virtual bool isCondBranchInstruction(cs_insn &i) const =0
static std::unique_ptr< Capstone2LlvmIrTranslator > createSparc(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:170
static std::unique_ptr< Capstone2LlvmIrTranslator > createX86_32(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:135
virtual bool isCallFunction(llvm::Function *f) const =0
virtual bool isAnyPseudoFunctionCall(llvm::CallInst *c) const =0
virtual bool isCondBranchFunction(llvm::Function *f) const =0
virtual llvm::BranchInst * isInConditionBranchFunctionCall(llvm::CallInst *c) const =0
virtual uint32_t getCapstoneRegister(llvm::GlobalVariable *gv) const =0
static std::unique_ptr< Capstone2LlvmIrTranslator > createPpc32(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:149
virtual bool isPseudoAsmFunction(llvm::Function *f) const =0
static std::unique_ptr< Capstone2LlvmIrTranslator > createMips64(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:107
virtual llvm::Function * getCondBranchFunction() const =0
virtual bool isPseudoAsmFunctionCall(llvm::CallInst *c) const =0
virtual bool isCondBranchFunctionCall(llvm::CallInst *c) const =0
static std::unique_ptr< Capstone2LlvmIrTranslator > createPpcQpx(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:163
virtual const csh & getCapstoneEngine() const =0
virtual uint32_t getArchBitSize()=0
virtual const std::set< llvm::Function * > & getPseudoAsmFunctions() const =0
static std::unique_ptr< Capstone2LlvmIrTranslator > createMips32(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:100
virtual llvm::GlobalVariable * getAsm2LlvmMapGlobalVariable() const =0
virtual llvm::BranchInst * isInConditionReturnFunctionCall(llvm::CallInst *c) const =0
static std::unique_ptr< Capstone2LlvmIrTranslator > createX86_64(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:142
static std::unique_ptr< Capstone2LlvmIrTranslator > createXcore(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:186
virtual llvm::BranchInst * isInConditionCondBranchFunctionCall(llvm::CallInst *c) const =0
virtual cs_mode getBasicMode() const =0
virtual bool isIgnoreUnexpectedOperands() const =0
virtual void modifyExtraMode(cs_mode m)=0
static std::unique_ptr< Capstone2LlvmIrTranslator > createPpc64(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:156
virtual bool isAllowedBasicMode(cs_mode m)=0
virtual llvm::StoreInst * isSpecialAsm2LlvmInstr(llvm::Value *v) const =0
static std::unique_ptr< Capstone2LlvmIrTranslator > createX86_16(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:128
virtual llvm::Function * getBranchFunction() const =0
virtual uint32_t getRegisterBitSize(uint32_t r) const =0
virtual llvm::Function * getCallFunction() const =0
virtual bool isBranchFunctionCall(llvm::CallInst *c) const =0
static std::unique_ptr< Capstone2LlvmIrTranslator > createThumb(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:86
static std::unique_ptr< Capstone2LlvmIrTranslator > createMips32R6(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:121
virtual void setGeneratePseudoAsmFunctions(bool f)=0
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)
Definition: capstone2llvmir.cpp:18
virtual llvm::GlobalVariable * isRegister(llvm::Value *v) const =0
virtual uint32_t getRegisterByteSize(uint32_t r) const =0
virtual bool isCallInstruction(cs_insn &i) const =0
virtual llvm::Type * getRegisterType(uint32_t r) const =0
virtual llvm::Function * getReturnFunction() const =0
virtual bool hasDelaySlotTypical(uint32_t id) const =0
virtual bool isReturnFunctionCall(llvm::CallInst *c) const =0
virtual bool isGeneratePseudoAsmFunctions() const =0
virtual bool isControlFlowInstruction(cs_insn &i) const =0
static std::unique_ptr< Capstone2LlvmIrTranslator > createArm(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:79
virtual cs_arch getArchitecture() const =0
virtual bool isBranchInstruction(cs_insn &i) const =0
virtual bool isBranchFunction(llvm::Function *f) const =0
static std::unique_ptr< Capstone2LlvmIrTranslator > createArm64(llvm::Module *m, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: capstone2llvmir.cpp:93
virtual uint32_t getArchByteSize()=0
virtual bool hasDelaySlotLikely(uint32_t id) const =0
virtual llvm::Module * getModule() const =0
virtual ~Capstone2LlvmIrTranslator()=default
virtual bool isIgnoreUnhandledInstructions() const =0
virtual TranslationResultOne translateOne(const uint8_t *&bytes, std::size_t &size, retdec::common::Address &a, llvm::IRBuilder<> &irb)=0
virtual void setIgnoreUnexpectedOperands(bool f)=0
virtual bool isAllowedExtraMode(cs_mode m)=0
Address, address pair and other derived class representation.
Additional (on top of Capstone) definitions for MIPS translator.
Definition: archive_wrapper.h:19
Additional (on top of Capstone) definitions for PowerPC translator.
Definition: capstone2llvmir.h:395
cs_insn * capstoneInsn
Definition: capstone2llvmir.h:407
std::size_t size
Byte size of the translated binary chunk.
Definition: capstone2llvmir.h:409
bool inCondition
Definition: capstone2llvmir.h:416
llvm::StoreInst * llvmInsn
Definition: capstone2llvmir.h:403
bool failed() const
Definition: capstone2llvmir.h:396
llvm::CallInst * branchCall
Definition: capstone2llvmir.h:413
Definition: capstone2llvmir.h:346
std::size_t size
Byte size of the translated binary chunk.
Definition: capstone2llvmir.h:360
std::size_t count
Number of translated assembly instructions.
Definition: capstone2llvmir.h:362
std::list< std::pair< llvm::StoreInst *, cs_insn * > > insns
Definition: capstone2llvmir.h:358
bool failed() const
Definition: capstone2llvmir.h:347
llvm::CallInst * branchCall
Definition: capstone2llvmir.h:366
bool inCondition
Definition: capstone2llvmir.h:369
Additional (on top of Capstone) definitions for x86 translator.