X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fdisassembler%2Fllvm%2FLLVMDisassembler.cxx;h=287d6a06d05e3049d9ea3211ddf21b55e0457ae9;hp=3494b79bd8a370814d35eba28fec53db0e1543d6;hb=08210442ccd43d49a5799cada9997e04a352f38b;hpb=c55f9e2b5f5ff83817ab5187eb0122600a4c5cea diff --git a/src/disassembler/llvm/LLVMDisassembler.cxx b/src/disassembler/llvm/LLVMDisassembler.cxx index 3494b79..287d6a0 100644 --- a/src/disassembler/llvm/LLVMDisassembler.cxx +++ b/src/disassembler/llvm/LLVMDisassembler.cxx @@ -110,7 +110,20 @@ LLVMDisassembler::LLVMDisassembler(const std::string& filename) disassemble(); } +LLVMDisassembler::~LLVMDisassembler() { + std::for_each(functions.begin(), functions.end(), + [](std::pair it) { + delete it.second; + }); + std::for_each(blocks.begin(), blocks.end(), + [](std::pair it) { + delete it.second; + }); +} +/* + * TODO: If we jump into some Basic Block we need to split it there into two + */ void LLVMDisassembler::disassemble() { std::stack remaining_functions; std::stack remaining_blocks; @@ -121,9 +134,6 @@ void LLVMDisassembler::disassemble() { bool contains; SymbolRef::Type symbol_type; -/* - * TODO: If we jump into some Basic Block we need to split it there into two - */ if (text_section.containsSymbol(x->second, contains) || !contains) continue; @@ -212,6 +222,7 @@ void LLVMDisassembler::disassemble() { LLVMBasicBlock * block = new LLVMBasicBlock(jmptarget); blocks.insert(std::make_pair(block->getStartAddress(), block)); remaining_blocks.push(new LLVMBasicBlock(jmptarget)); + } } } } @@ -225,7 +236,6 @@ void LLVMDisassembler::disassemble() { current_block->setEndAddress(current_address + base_address); LOG4CXX_DEBUG(logger, "Finished Block at " << std::hex << current_block->getEndAddress()); - } break; } current_address += inst_size;