// 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; }
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; }
// 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; }