Exemple #1
0
// Execute taint ops
int after_block_exec(CPUState *env, TranslationBlock *tb,
        TranslationBlock *next_tb){
    if (taintJustEnabled){
        // need to wait until the next TB to start executing taint ops
        taintJustEnabled = false;
        return 0;
    }
    if (taintJustDisabled){
        taintJustDisabled = false;
        execute_llvm = 0;
        generate_llvm = 0;
        panda_do_flush_tb();
        panda_disable_memcb();
        return 0;
    }
    if (taintEnabled){
        DynValBuffer *dynval_buffer = PIFP->PIV->getDynvalBuffer();
        rewind_dynval_buffer(dynval_buffer);

        //printf("%s\n", tb->llvm_function->getName().str().c_str());
        //PTFP->debugTaintOps();
        //printf("\n\n");
        execute_taint_ops(PTFP->ttb, shadow, dynval_buffer);

        // Make sure there's nothing left in the buffer
        assert(dynval_buffer->ptr - dynval_buffer->start == dynval_buffer->cur_size);
    }
    return 0;
}
Exemple #2
0
int cb_cpu_restore_state(CPUState *env, TranslationBlock *tb){
    printf("EXCEPTION - logging\n");
    DynValBuffer *dynval_buffer = PIFP->PIV->getDynvalBuffer();
    log_exception(dynval_buffer);

    // Then execute taint ops up until the exception occurs.  Execution of taint
    // ops will stop at the point of the exception.
    rewind_dynval_buffer(dynval_buffer);
    execute_taint_ops(PTFP->ttb, shadow, dynval_buffer);

    // Make sure there's nothing left in the buffer
    assert(dynval_buffer->ptr - dynval_buffer->start == dynval_buffer->cur_size);
    return 0;
}
Exemple #3
0
// Execute taint ops
int after_block_exec(CPUState *env, TranslationBlock *tb,
        TranslationBlock *next_tb){
    DynValBuffer *dynval_buffer = PIFP->PIV->getDynvalBuffer();
    rewind_dynval_buffer(dynval_buffer);

    //printf("%s\n", tb->llvm_function->getName().str().c_str());
    //PTFP->debugTaintOps();
    //printf("\n\n");
    execute_taint_ops(PTFP->ttb, shadow, dynval_buffer);

    // Make sure there's nothing left in the buffer
    assert(dynval_buffer->ptr - dynval_buffer->start == dynval_buffer->cur_size);
    return 0;
}