X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fdisassembler%2Fllvm%2FLLVMDisassembler.cxx;fp=src%2Fdisassembler%2Fllvm%2FLLVMDisassembler.cxx;h=5dc7f3a0489d265dc70383c35255ac3dde2eae6b;hp=049f1fc90477b82d1a30427bbd7352a9d7a98cf3;hb=87cd2baa79a6bbfaaad9d0c69bbf1fdb7462c20a;hpb=5d65588185f3d19fc6fa311f642cc5fd78966087 diff --git a/src/disassembler/llvm/LLVMDisassembler.cxx b/src/disassembler/llvm/LLVMDisassembler.cxx index 049f1fc..5dc7f3a 100644 --- a/src/disassembler/llvm/LLVMDisassembler.cxx +++ b/src/disassembler/llvm/LLVMDisassembler.cxx @@ -322,6 +322,15 @@ void LLVMDisassembler::disassembleFunction(Function* function) { if (NULL == manager->getFunction(jmptarget)) called_functions.push_back(jmptarget); } else { + if(jmptarget < base_address || jmptarget > base_address + size) { + if (MIA->isConditionalBranch(inst)) { + LOG4CXX_WARN(logger, "Conditional jump out of the text segment. This should never happen!"); + } else { + LOG4CXX_INFO(logger, "Unconditional jump to PLT. Assuming Tail-Call to some library"); + current_address += inst_size; + continue; + } + } current_block->setNextBlock(0, jmptarget); if (new_blocks.find(jmptarget) == new_blocks.end()) { BasicBlock * block = manager->newBasicBlock(jmptarget);