diff --git a/src/devirt_t.cpp b/src/devirt_t.cpp index 20c3d18..75805e6 100644 --- a/src/devirt_t.cpp +++ b/src/devirt_t.cpp @@ -128,10 +128,13 @@ namespace vm for ( auto idx = 0u; idx < vmp_rtn->vmp2_code_blocks.size(); ++idx ) { + ir_builder->SetInsertPoint( vmp_rtn->llvm_code_blocks[ idx ].second ); if ( vmp_rtn->vmp2_code_blocks[ idx ].vinstrs.size() < 35 ) + { + ir_builder->CreateRetVoid(); continue; + } - ir_builder->SetInsertPoint( vmp_rtn->llvm_code_blocks[ idx ].second ); for ( auto &vinstr : vmp_rtn->vmp2_code_blocks[ idx ].vinstrs ) { if ( !lifters->lift( this, vmp_rtn->vmp2_code_blocks[ idx ], vinstr, ir_builder.get() ) ) diff --git a/src/lifters/jmp.cpp b/src/lifters/jmp.cpp index 385bbb0..d23f62b 100644 --- a/src/lifters/jmp.cpp +++ b/src/lifters/jmp.cpp @@ -6,7 +6,10 @@ namespace vm [ & ]( vm::devirt_t *rtn, const vm::instrs::code_block_t &vm_code_block, const vm::instrs::virt_instr_t &vinstr, llvm::IRBuilder<> *ir_builder ) { if ( !vm_code_block.jcc.has_jcc ) + { + ir_builder->CreateRetVoid(); return; + } auto &vmp_rtn = rtn->vmp_rtns.back(); switch ( vm_code_block.jcc.type )