diff --git a/tools/watch_syscall/wsc_instrument.cpp b/tools/watch_syscall/wsc_instrument.cpp index 17cc8954edf71e6f5121d4feb248dd1632959e0b..fbc5b890f817af6d259a0136d0635ade897e5ad7 100644 --- a/tools/watch_syscall/wsc_instrument.cpp +++ b/tools/watch_syscall/wsc_instrument.cpp @@ -673,17 +673,25 @@ bool WSC_Instrument::add_segfault_checking(Instruction_t* insn, const CSO_Warnin m_num_segfault_instrumentations++; + if (DoReverseSandboxing()) + { +std::cerr << "Reverse sandboxing: " << hex << "0x" << insn->GetAddress()->GetVirtualOffset() << ": " << std::string(d.CompleteInstr) << std::endl; + return true; + } + else + { // cout<<"Adding callback to "<<d.CompleteInstr<<endl; - if (insn->GetAddress()) - cout<<"# ATTRIBUTE instrumented=0x"<<hex<<insn->GetAddress()->GetVirtualOffset() << ":sandboxed" << endl; + if (insn->GetAddress()) + cout<<"# ATTRIBUTE instrumented=0x"<<hex<<insn->GetAddress()->GetVirtualOffset() << ":sandboxed" << endl; - insertAssemblyBefore(firp,insn,"pusha"); - sprintf(tmpbuf,"lea eax, %s", get_memory_addr(d).c_str()); - tmp=insertAssemblyAfter(firp,tmp,tmpbuf); // lea addr, [ expression ] - tmp=insertAssemblyAfter(firp,tmp,"call 0x0", callback); - tmp=insertAssemblyAfter(firp,tmp,"popa"); + insertAssemblyBefore(firp,insn,"pusha"); + sprintf(tmpbuf,"lea eax, %s", get_memory_addr(d).c_str()); + tmp=insertAssemblyAfter(firp,tmp,tmpbuf); // lea addr, [ expression ] + tmp=insertAssemblyAfter(firp,tmp,"call 0x0", callback); + tmp=insertAssemblyAfter(firp,tmp,"popa"); - return true; + return true; + } } @@ -968,7 +976,7 @@ bool WSC_Instrument::execute() if (DoReverseSandboxing()) { - success = success && add_reverse_sandboxing(); + success = success && add_segfault_checking(); } if (DoInputFiltering())