VOID fn_call(CONTEXT *ctxt, FID fid) { trace_enter(); call_stack.push(fid); UINT64 sp; PIN_GetContextRegval(ctxt, REG_RSP, (UINT8*) &sp); sp_stack.push(sp); nb_call[fid]++; unsigned int param_val_size = 1 + nb_param_int[fid] + nb_param_int_stack[fid]; for (unsigned int pid = 1; pid < param_val_size; pid++) { if (!param_is_not_addr[fid][pid]) add_val(fid, ctxt, pid, sp); } trace_leave(); }
VOID fn_call(CONTEXT *ctxt, FID fid, bool is_jump) { trace_enter(); call_stack.push(fid); is_jump_stack.push(is_jump); counter += 1; bool param_pushed = false; if (!is_instrumented[fid]) { trace_leave(); return; } for (unsigned int i = 1; i <= nb_p[fid]; i++) { if (!param_addr[fid][i]) continue; param_t *new_param = (param_t *) malloc(sizeof(param_t)); new_param->fid = fid; new_param->counter = counter; new_param->val = val_from_reg(ctxt, i); new_param->is_addr = param_addr[fid][i]; new_param->pos = i; param_in->push_front(new_param); param_pushed = true; } /* If the function is instrumented (ie for instance has an ADDR as a return value) AND was not logged yet, create a special entry to log the date of call */ if (!param_pushed) { param_t *new_addr = (param_t *) malloc(sizeof(param_t)); new_addr->fid = fid; new_addr->counter = counter; new_addr->val = 0; // val_from_reg(ctxt, i); new_addr->pos = 0; new_addr->is_addr = false; // true; param_in->push_front(new_addr); } trace_leave(); return; }