X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fdisassembler%2Fllvm%2FLLVMDisassembler.hxx;h=e0b26e19f7d70a430908c03c029c809ff1a44bf4;hp=d26bb126f8dee24fc592afc058a5cfd6410c7c62;hb=099f1e8222109bf7397eff6da0c511a07906c9cd;hpb=231dae075375e7d57982f5107b86294fbe726b33 diff --git a/src/disassembler/llvm/LLVMDisassembler.hxx b/src/disassembler/llvm/LLVMDisassembler.hxx index d26bb12..e0b26e1 100644 --- a/src/disassembler/llvm/LLVMDisassembler.hxx +++ b/src/disassembler/llvm/LLVMDisassembler.hxx @@ -8,48 +8,42 @@ #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: - LLVMDisassembler(const std::string& filename, InformationManager* manager); + LLVMDisassembler(const std::string& filename, InformationManager* manager, + llvm::object::ObjectFile* file = NULL); virtual ~LLVMDisassembler(); void start(); void getSymbols() {} - uint64_t entryAddress() {} + uint64_t entryAddress(); - void forEachFunction(std::function callback); void printEachInstruction(uint64_t start, uint64_t end, - std::function fun); - - BasicBlock * getBasicBlock(uint64_t address) { - return blocks[address]; - } + std::function fun); Function * disassembleFunctionAt(uint64_t address, const std::string& name = ""); -protected: - bool isFunctionCall(uint64_t address) {return false;} - bool isJump(uint64_t address) {return false;} - private: // http://llvm.org/docs/doxygen/html/MCObjectDisassembler_8cpp_source.html +197 - void disassembleFunction(LLVMFunction* function); - void splitBlocks(); + void disassembleFunction(Function* function); + void splitBlocks(Function* fun); void disassemble(); + llvm::object::SectionRef getTextSection(); void readSymbols(); void readSections(); + void readDynamicSymbols(); log4cxx::LoggerPtr logger; - std::map blocks; - std::map functions; llvm::Triple triple; std::shared_ptr binary; @@ -73,6 +67,7 @@ private: std::map sections; std::map symbols; InformationManager * manager; + uint64_t _entryAddress; }; #endif