X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fdisassembler%2Fllvm%2FLLVMDisassembler.cxx;h=96d08830e4f26087df5cd3feb373f5f47a781bf5;hp=3d969ef211975fde131ec83514beb561f220d5af;hb=cab6494b97d1626c7b9285b69df324d9c9953614;hpb=61fee0e142cbd73869f21e1a79e4038bb5c61335 diff --git a/src/disassembler/llvm/LLVMDisassembler.cxx b/src/disassembler/llvm/LLVMDisassembler.cxx index 3d969ef..96d0883 100644 --- a/src/disassembler/llvm/LLVMDisassembler.cxx +++ b/src/disassembler/llvm/LLVMDisassembler.cxx @@ -58,7 +58,7 @@ LLVMDisassembler::LLVMDisassembler(const std::string& filename, InformationManager* manager, ObjectFile* file) : Disassembler() - , logger(log4cxx::Logger::getLogger("LLVMDisassembler")) + , logger(log4cxx::Logger::getLogger("disassembler.LLVMDisassembler")) , triple("unknown-unknown-unknown") , manager(manager) { @@ -199,7 +199,6 @@ Function* LLVMDisassembler::disassembleFunctionAt(uint64_t address, const function->setName(name); } disassembleFunction(function); - manager->finishFunction(function); } return function; @@ -207,6 +206,7 @@ Function* LLVMDisassembler::disassembleFunctionAt(uint64_t address, const template void LLVMDisassembler::disassembleFunction(Function* function) { + std::vector called_functions; std::stack remaining_blocks; /* TODO: * Do all blocks get added properly? We should take care to remove @@ -250,7 +250,7 @@ void LLVMDisassembler::disassembleFunction(Function* function) { if (!MIA->isIndirectBranch(inst)) { if (MIA->isCall(inst)) { if (NULL == manager->getFunction(jmptarget)) - disassembleFunctionAt(jmptarget); + called_functions.push_back(jmptarget); } else { current_block->setNextBlock(0, jmptarget); if (new_blocks.find(jmptarget) == new_blocks.end()) { @@ -298,7 +298,9 @@ void LLVMDisassembler::disassembleFunction(Function* function) { } splitBlocks(function); LOG4CXX_DEBUG(logger, "Finished function " << function->getName()); - manager->signal_new_function(function); + manager->finishFunction(function); + for (uint64_t address : called_functions) + disassembleFunctionAt(address); } template