]> git.siccegge.de Git - frida/frida.git/blobdiff - src/disassembler/llvm/LLVMDisassembler.cxx
Always add following blocks even if it is already created
[frida/frida.git] / src / disassembler / llvm / LLVMDisassembler.cxx
index 7980a9e1377a315dd97fbe1fb945b64edf8ead8e..1067fcc1f02bebcefd01969fbd99142902a59c54 100644 (file)
@@ -193,18 +193,18 @@ void LLVMDisassembler::disassemble() {
                                     remaining_functions.push(fun);
                                 }
                             } else {
+                                                               current_block->setNextBlock(0, jmptarget);
                                 if (blocks.find(jmptarget) == blocks.end()) {
                                     LLVMBasicBlock * block = new LLVMBasicBlock(jmptarget, this);
                                     blocks.insert(std::make_pair(block->getStartAddress(), block));
-                                    current_block->setNextBlock(0, block->getStartAddress());
                                     remaining_blocks.push(block);
                                 }
                                 if (MIA->isConditionalBranch(inst)) {
                                     jmptarget = base_address + current_address + inst_size;
+                                                                       current_block->setNextBlock(1, jmptarget);
                                     if (blocks.find(jmptarget) == blocks.end()) {
                                         LLVMBasicBlock * block = new LLVMBasicBlock(jmptarget, this);
                                         blocks.insert(std::make_pair(block->getStartAddress(), block));
-                                        current_block->setNextBlock(1, block->getStartAddress());
                                         remaining_blocks.push(block);
                                     }
                                 }
@@ -324,6 +324,7 @@ void LLVMDisassembler::printEachInstruction(uint64_t start, uint64_t end,
             IP->printInst(&inst, s, "");
                        fun(bytes, inst_size, s.str());
         } else {
+                       LOG4CXX_WARN(logger, "Invalid byte at" << std::hex << current_address + base_address);
                        fun(NULL, 0, "Invalid Byte");
                        inst_size = 1;
                }