// Derive taint ops int before_block_exec(CPUState *env, TranslationBlock *tb){ //printf("%s\n", tcg_llvm_get_func_name(tb)); taintfpm->run(*(tb->llvm_function)); DynValBuffer *dynval_buffer = PIFP->PIV->getDynvalBuffer(); clear_dynval_buffer(dynval_buffer); return 0; }
int after_block_exec(CPUState *env, TranslationBlock *tb, TranslationBlock *next_tb){ if (tubtf_on == 0) { // flush dynlog to file assert(memlog); DynValBuffer *dynval_buffer = PIFP->PIV->getDynvalBuffer(); fwrite(dynval_buffer->start, dynval_buffer->cur_size, 1, memlog); clear_dynval_buffer(dynval_buffer); } return 0; }
// Derive taint ops int before_block_exec(CPUState *env, TranslationBlock *tb){ shadow->asid = panda_current_asid(env); //printf("%s\n", tcg_llvm_get_func_name(tb)); if (taintEnabled){ // process taint ops in io thread taint op buffer // NB: we don't need a dynval buffer here. tob_process(tob_io_thread, shadow, NULL); tob_clear(tob_io_thread); taintfpm->run(*(tb->llvm_function)); DynValBuffer *dynval_buffer = PIFP->PIV->getDynvalBuffer(); clear_dynval_buffer(dynval_buffer); } return 0; }
int before_block_exec(CPUState *env, TranslationBlock *tb){ if (tubtf_on) { char *llvm_fn_name = (char *) tcg_llvm_get_func_name(tb); uint32_t pc, unk; sscanf(llvm_fn_name, "tcg-llvm-tb-%d-%x", &unk, &pc); env->panda_guest_pc = pc; tubtf_write_el_64(panda_current_asid(env), pc, TUBTFE_LLVM_FN, unk, 0, 0, 0); } else { fprintf(funclog, "%s\n", tcg_llvm_get_func_name(tb)); DynValBuffer *dynval_buffer = PIFP->PIV->getDynvalBuffer(); if (dynval_buffer->cur_size > 0){ // Buffer wasn't flushed before, have to flush it now fwrite(dynval_buffer->start, dynval_buffer->cur_size, 1, memlog); } clear_dynval_buffer(dynval_buffer); } return 0; }