X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fdisassembler%2Fllvm%2FLLVMDisassembler.cxx;h=a8c2867f50784255a27246bb10be5db9312d2e87;hp=7bce1cf6ab2107d4ff9d237149919769b8431a0f;hb=1d66010fc38eab99ec29d25606e3d44a3297e6e6;hpb=f5b948bf38d8757f4e9a0d7af4edaa4a6fffec27 diff --git a/src/disassembler/llvm/LLVMDisassembler.cxx b/src/disassembler/llvm/LLVMDisassembler.cxx index 7bce1cf..a8c2867 100644 --- a/src/disassembler/llvm/LLVMDisassembler.cxx +++ b/src/disassembler/llvm/LLVMDisassembler.cxx @@ -121,6 +121,9 @@ LLVMDisassembler::~LLVMDisassembler() { }); } +/* + * 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; @@ -131,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; @@ -214,6 +214,7 @@ void LLVMDisassembler::disassemble() { if (blocks.find(jmptarget) == blocks.end()) { LLVMBasicBlock * block = new LLVMBasicBlock(jmptarget); blocks.insert(std::make_pair(block->getStartAddress(), block)); + current_block->setNextBlock(0, block->getStartAddress()); remaining_blocks.push(block); } if (MIA->isConditionalBranch(inst)) { @@ -221,7 +222,9 @@ void LLVMDisassembler::disassemble() { if (blocks.find(jmptarget) == blocks.end()) { LLVMBasicBlock * block = new LLVMBasicBlock(jmptarget); blocks.insert(std::make_pair(block->getStartAddress(), block)); + current_block->setNextBlock(1, block->getStartAddress()); remaining_blocks.push(new LLVMBasicBlock(jmptarget)); + } } } } @@ -235,7 +238,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; @@ -280,9 +282,3 @@ void LLVMDisassembler::forEachFunction(std::function callback(x.first, x.second); }); } - - - -void LLVMDisassembler::generateControlFlowGraph(uint64_t address) { - -}