X-Git-Url: https://git.siccegge.de//index.cgi?a=blobdiff_plain;f=src%2Fdisassembler%2Fllvm%2FLLVMDisassembler.hxx;h=95e961fb5656804ef745e4dc073ed496a41fe7ff;hb=6375df7c896a8a0e4be6959392848f28b021073c;hp=906318103bfd61aa87d67082c344f3ad13adad5b;hpb=cb4e14fde0ee90cf5986f2a15b95acb98b04045c;p=frida%2Ffrida.git diff --git a/src/disassembler/llvm/LLVMDisassembler.hxx b/src/disassembler/llvm/LLVMDisassembler.hxx index 9063181..95e961f 100644 --- a/src/disassembler/llvm/LLVMDisassembler.hxx +++ b/src/disassembler/llvm/LLVMDisassembler.hxx @@ -20,7 +20,8 @@ template class LLVMDisassembler : public Disassembler { public: - LLVMDisassembler(const std::string& filename, InformationManager* manager); + LLVMDisassembler(const std::string& filename, InformationManager* manager, + llvm::object::ELFObjectFile* file = NULL); virtual ~LLVMDisassembler(); void start(); @@ -29,7 +30,8 @@ public: void forEachFunction(std::function callback); void printEachInstruction(uint64_t start, uint64_t end, - std::function fun); + std::function fun); BasicBlock * getBasicBlock(uint64_t address) { return blocks[address]; @@ -42,6 +44,8 @@ protected: bool isJump(uint64_t address) {return false;} private: + typedef llvm::object::ELFFile ELFO; + // http://llvm.org/docs/doxygen/html/MCObjectDisassembler_8cpp_source.html +197 void disassembleFunction(LLVMFunction* function); void splitBlocks(LLVMFunction* fun); @@ -49,6 +53,7 @@ private: void readSymbols(); void readSections(); + void readDynamicSymbols(); log4cxx::LoggerPtr logger; std::map blocks; @@ -58,7 +63,7 @@ private: std::shared_ptr binary; const llvm::Target * target; - llvm::object::ObjectFile * o; + llvm::object::ELFObjectFile * o; std::unique_ptr MRI; std::unique_ptr AsmInfo;