]> git.siccegge.de Git - frida/frida.git/blob - src/disassembler/llvm/LLVMDisassembler.hxx
ff81be55385890a7ca642d9fa7d50a469ea001ac
[frida/frida.git] / src / disassembler / llvm / LLVMDisassembler.hxx
1 #ifndef INCLUDE__LLVMDisassembler_hxx
2 #define INCLUDE__LLVMDisassembler_hxx
3
4 #include <memory>
5 #include <log4cxx/logger.h>
6
7 #include "include_llvm.hxx"
8
9 #include "disassembler/Disassembler.hxx"
10
11
12 class LLVMDisassembler
13 : public Disassembler {
14 public:
15 LLVMDisassembler(const std::string& filename);
16 virtual ~LLVMDisassembler() {};
17
18 void getSymbols();
19 uint64_t entryAddress();
20
21 void forEachInstruction(const std::string& name, std::function<void (long, std::string, std::string)> callback) {}
22
23 BasicBlock * generateControlFlowGraph(const std::string& name);
24 BasicBlock * generateControlFlowGraph(uint64_t address);
25
26 protected:
27 bool isFunctionCall(uint64_t address) {return false;}
28 bool isJump(uint64_t address) {return false;}
29
30 private:
31 log4cxx::LoggerPtr logger;
32
33 llvm::Triple triple;
34 std::shared_ptr<llvm::object::Binary> binary;
35
36
37 const llvm::Target * target;
38 llvm::object::ObjectFile * o;
39
40 std::unique_ptr<const llvm::MCRegisterInfo> MRI;
41 std::unique_ptr<const llvm::MCAsmInfo> AsmInfo;
42 std::unique_ptr<llvm::MCModule> Mod;
43 std::unique_ptr<llvm::MCInstPrinter> IP;
44 std::unique_ptr<llvm::MCDisassembler> DisAsm;
45 std::unique_ptr<const llvm::MCObjectFileInfo> MOFI;
46 std::unique_ptr<llvm::MCContext> Ctx;
47 std::unique_ptr<const llvm::MCInstrAnalysis> MIA;
48 std::unique_ptr<const llvm::MCSubtargetInfo> STI;
49 std::unique_ptr<const llvm::MCInstrInfo> MII;
50 llvm::OwningPtr<llvm::MCRelocationInfo> RelInfo;
51 llvm::OwningPtr<llvm::MCSymbolizer> Symzer;
52
53 std::map<std::string, llvm::object::SectionRef> sections;
54 std::map<std::string, llvm::object::SymbolRef> symbols;
55 };
56
57 #endif