Exemplo n.º 1
0
// 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;
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
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;
}
Exemplo n.º 4
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;
}