X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fdisassembler%2Fllvm%2FLLVMDisassembler.hxx;h=a64dc2c66e451131f9187ab82ca5a70342a9e1ab;hp=848b20e4a7cff206c66c7ba4e78ef5f16e1be39f;hb=4443ad3e38327c776dcc68538591456d37c9ed6f;hpb=1d66010fc38eab99ec29d25606e3d44a3297e6e6 diff --git a/src/disassembler/llvm/LLVMDisassembler.hxx b/src/disassembler/llvm/LLVMDisassembler.hxx index 848b20e..a64dc2c 100644 --- a/src/disassembler/llvm/LLVMDisassembler.hxx +++ b/src/disassembler/llvm/LLVMDisassembler.hxx @@ -8,63 +8,67 @@ #include "include_llvm.hxx" #include "disassembler/Disassembler.hxx" -#include "disassembler/BasicBlock.hxx" -#include "disassembler/Function.hxx" -#include "disassembler/llvm/LLVMBasicBlock.hxx" -#include "disassembler/llvm/LLVMFunction.hxx" +class Function; +class BasicBlock; +Disassembler * createLLVMDisassembler(const std::string& filename, InformationManager* manager); + +template class LLVMDisassembler - : public Disassembler { + : public Disassembler { public: - LLVMDisassembler(const std::string& filename); - virtual ~LLVMDisassembler(); + LLVMDisassembler(const std::string& filename, InformationManager* manager, + llvm::object::ObjectFile* file = NULL); + virtual ~LLVMDisassembler(); - void getSymbols(); + void start(); + void getSymbols() {} uint64_t entryAddress(); - void forEachFunction(std::function callback); - BasicBlock * getBasicBlock(uint64_t address) { - return blocks[address]; - } + void printEachInstruction(uint64_t start, uint64_t end, + std::function fun); -protected: - bool isFunctionCall(uint64_t address) {return false;} - bool isJump(uint64_t address) {return false;} + Function * disassembleFunctionAt(uint64_t address, const std::string& name = ""); + std::list getInstructions(const BasicBlock* block); private: - // http://llvm.org/docs/doxygen/html/MCObjectDisassembler_8cpp_source.html +197 + // http://llvm.org/docs/doxygen/html/MCObjectDisassembler_8cpp_source.html +197 + void disassembleFunction(Function* function); + void splitBlocks(Function* fun); void disassemble(); + llvm::object::SectionRef getTextSection(); void readSymbols(); void readSections(); - - log4cxx::LoggerPtr logger; - std::map blocks; - std::map functions; - - llvm::Triple triple; - std::shared_ptr binary; - - - const llvm::Target * target; - llvm::object::ObjectFile * o; - - std::unique_ptr MRI; - std::unique_ptr AsmInfo; - std::unique_ptr Mod; - std::unique_ptr IP; - std::unique_ptr DisAsm; - std::unique_ptr MOFI; - std::unique_ptr Ctx; - std::unique_ptr MIA; - std::unique_ptr STI; - std::unique_ptr MII; - llvm::OwningPtr RelInfo; - llvm::OwningPtr Symzer; - - std::map sections; - std::map symbols; + void readDynamicSymbols(); + + log4cxx::LoggerPtr logger; + + llvm::Triple triple; + std::shared_ptr binary; + + const llvm::Target * target; + llvm::object::ObjectFile * o; + + std::unique_ptr MRI; + std::unique_ptr AsmInfo; + std::unique_ptr Mod; + std::unique_ptr IP; + std::unique_ptr DisAsm; + std::unique_ptr MOFI; + std::unique_ptr Ctx; + std::unique_ptr MIA; + std::unique_ptr STI; + std::unique_ptr MII; + std::unique_ptr RelInfo; + std::unique_ptr Symzer; + + std::map sections; + std::map symbols; + InformationManager * manager; + uint64_t _entryAddress; }; #endif