1 #ifndef INCLUDE__LLVMDisassembler_hxx
2 #define INCLUDE__LLVMDisassembler_hxx
6 #include <log4cxx/logger.h>
8 #include "include_llvm.hxx"
10 #include "disassembler/Disassembler.hxx"
11 #include "disassembler/BasicBlock.hxx"
12 #include "disassembler/Function.hxx"
13 #include "disassembler/llvm/LLVMBasicBlock.hxx"
14 #include "disassembler/llvm/LLVMFunction.hxx"
17 class LLVMDisassembler
18 : public Disassembler {
20 LLVMDisassembler(const std::string& filename, InformationManager* manager);
21 virtual ~LLVMDisassembler();
25 uint64_t entryAddress() {}
27 void forEachFunction(std::function<void (uint64_t, Function*)> callback);
28 void printEachInstruction(uint64_t start, uint64_t end,
29 std::function<void (uint8_t*, size_t, const std::string&)> fun);
31 BasicBlock * getBasicBlock(uint64_t address) {
32 return blocks[address];
35 Function * disassembleFunctionAt(uint64_t address, const std::string& name = "");
38 bool isFunctionCall(uint64_t address) {return false;}
39 bool isJump(uint64_t address) {return false;}
42 // http://llvm.org/docs/doxygen/html/MCObjectDisassembler_8cpp_source.html +197
43 void disassembleFunction(LLVMFunction* function);
50 log4cxx::LoggerPtr logger;
51 std::map<uint64_t, LLVMBasicBlock*> blocks;
52 std::map<uint64_t, LLVMFunction*> functions;
55 std::shared_ptr<llvm::object::Binary> binary;
57 const llvm::Target * target;
58 llvm::object::ObjectFile * o;
60 std::unique_ptr<const llvm::MCRegisterInfo> MRI;
61 std::unique_ptr<const llvm::MCAsmInfo> AsmInfo;
62 std::unique_ptr<llvm::MCModule> Mod;
63 std::unique_ptr<llvm::MCInstPrinter> IP;
64 std::unique_ptr<llvm::MCDisassembler> DisAsm;
65 std::unique_ptr<const llvm::MCObjectFileInfo> MOFI;
66 std::unique_ptr<llvm::MCContext> Ctx;
67 std::unique_ptr<const llvm::MCInstrAnalysis> MIA;
68 std::unique_ptr<const llvm::MCSubtargetInfo> STI;
69 std::unique_ptr<const llvm::MCInstrInfo> MII;
70 std::unique_ptr<llvm::MCRelocationInfo> RelInfo;
71 std::unique_ptr<llvm::MCSymbolizer> Symzer;
73 std::map<std::string, llvm::object::SectionRef> sections;
74 std::map<std::string, llvm::object::SymbolRef> symbols;
75 InformationManager * manager;