static void test_reg_system(const size_t n, const size_t p, const gsl_rng *r) { gsl_matrix *X = gsl_matrix_alloc(n, p); gsl_vector *y = gsl_vector_alloc(n); gsl_vector *c = gsl_vector_alloc(p); gsl_vector *wts = gsl_vector_alloc(n); gsl_multifit_linear_workspace *w = gsl_multifit_linear_alloc(n, p); gsl_multifit_linear_workspace *wbig = gsl_multifit_linear_alloc(n + 10, p + 5); gsl_vector *diagL = gsl_vector_alloc(p); gsl_matrix *Lsqr = gsl_matrix_alloc(p, p); gsl_matrix *Ltall = gsl_matrix_alloc(5*p, p); gsl_matrix *L1 = gsl_matrix_alloc(p - 1, p); gsl_matrix *L2 = gsl_matrix_alloc(p - 2, p); gsl_matrix *L3 = gsl_matrix_alloc(p - 3, p); gsl_matrix *L5 = gsl_matrix_alloc(p - 5, p); size_t i; /* generate random weights */ test_random_vector(wts, r, 0.0, 1.0); /* generate well-conditioned system and test against OLS solution */ test_random_matrix(X, r, -1.0, 1.0); test_random_vector(y, r, -1.0, 1.0); test_reg1(X, y, NULL, 1.0e-10, w, "unweighted"); test_reg1(X, y, wts, 1.0e-10, w, "weighted"); /* generate ill-conditioned system */ test_random_matrix_ill(X, r); test_random_vector(c, r, -1.0, 1.0); /* compute y = X c + noise */ gsl_blas_dgemv(CblasNoTrans, 1.0, X, c, 0.0, y); test_random_vector_noise(r, y); /* random diag(L) vector */ test_random_vector(diagL, r, -2.0, 2.0); /* random square and tall L matrices */ test_random_matrix(Lsqr, r, -2.0, 2.0); test_random_matrix(Ltall, r, -2.0, 2.0); gsl_multifit_linear_Lk(p, 1, L1); gsl_multifit_linear_Lk(p, 2, L2); gsl_multifit_linear_Lk(p, 3, L3); gsl_multifit_linear_Lk(p, 5, L5); for (i = 0; i < 3; ++i) { /* * can't make lambda too small or normal equations * approach won't work well */ double lambda = pow(10.0, -(double) i); /* test unweighted */ test_reg2(lambda, X, y, NULL, 1.0e-6, w, "unweighted"); test_reg3(lambda, diagL, X, y, NULL, 1.0e-6, w, "unweighted"); test_reg4(lambda, Lsqr, X, y, NULL, 1.0e-8, w, "Lsqr unweighted"); test_reg4(lambda, Ltall, X, y, NULL, 1.0e-8, w, "Ltall unweighted"); test_reg4(lambda, L1, X, y, NULL, 1.0e-6, w, "L1 unweighted"); test_reg4(lambda, L2, X, y, NULL, 1.0e-6, w, "L2 unweighted"); test_reg4(lambda, L3, X, y, NULL, 1.0e-5, w, "L3 unweighted"); test_reg4(lambda, L5, X, y, NULL, 1.0e-4, w, "L5 unweighted"); /* test weighted */ test_reg2(lambda, X, y, wts, 1.0e-6, w, "weighted"); test_reg3(lambda, diagL, X, y, wts, 1.0e-6, w, "weighted"); test_reg4(lambda, Lsqr, X, y, wts, 1.0e-8, w, "Lsqr weighted"); test_reg4(lambda, L1, X, y, wts, 1.0e-6, w, "L1 weighted"); test_reg4(lambda, L2, X, y, wts, 1.0e-6, w, "L2 weighted"); test_reg4(lambda, L3, X, y, wts, 1.0e-5, w, "L3 weighted"); test_reg4(lambda, L5, X, y, wts, 1.0e-4, w, "L5 weighted"); /* test again with larger workspace */ test_reg2(lambda, X, y, NULL, 1.0e-6, wbig, "unweighted big"); test_reg3(lambda, diagL, X, y, NULL, 1.0e-6, wbig, "unweighted big"); test_reg4(lambda, Lsqr, X, y, NULL, 1.0e-8, wbig, "Lsqr unweighted big"); test_reg4(lambda, L1, X, y, NULL, 1.0e-6, wbig, "L1 unweighted big"); test_reg4(lambda, L2, X, y, NULL, 1.0e-6, wbig, "L2 unweighted big"); test_reg4(lambda, L3, X, y, NULL, 1.0e-5, wbig, "L3 unweighted big"); test_reg4(lambda, L5, X, y, NULL, 1.0e-4, wbig, "L5 unweighted big"); test_reg2(lambda, X, y, wts, 1.0e-6, wbig, "weighted big"); test_reg3(lambda, diagL, X, y, wts, 1.0e-6, wbig, "weighted big"); test_reg4(lambda, Lsqr, X, y, wts, 1.0e-8, wbig, "Lsqr weighted big"); test_reg4(lambda, L1, X, y, wts, 1.0e-6, wbig, "L1 weighted big"); test_reg4(lambda, L2, X, y, wts, 1.0e-6, wbig, "L2 weighted big"); test_reg4(lambda, L3, X, y, wts, 1.0e-5, wbig, "L3 weighted big"); test_reg4(lambda, L5, X, y, wts, 1.0e-4, wbig, "L5 weighted big"); } gsl_matrix_free(X); gsl_vector_free(y); gsl_vector_free(c); gsl_vector_free(wts); gsl_vector_free(diagL); gsl_matrix_free(Lsqr); gsl_matrix_free(Ltall); gsl_matrix_free(L1); gsl_matrix_free(L2); gsl_matrix_free(L3); gsl_matrix_free(L5); gsl_multifit_linear_free(w); gsl_multifit_linear_free(wbig); }
int main(int argc, char **argv) { debug_init(stdout); save_fx(fx_orig); memcpy(&fx_orig[240], scratch_orig, 4*sizeof(long)); memcpy(&fx_orig[256], taint_orig, 8*sizeof(long)); offset = (long)taintmem_test - (long)mem_test; codeexec(NULL, 0, (long *)regs_orig); init_threads(); test_reg2(taint_copy_reg32_to_reg32, ref_copy_reg32_to_reg32); test_reg2(taint_copy_reg16_to_reg16, ref_copy_reg16_to_reg16); test_reg2(taint_copy_reg8_to_reg8, ref_copy_reg8_to_reg8); test_mem(taint_copy_mem32_to_reg32, ref_copy_mem32_to_reg32); test_mem(taint_copy_mem16_to_reg16, ref_copy_mem16_to_reg16); test_mem(taint_copy_mem8_to_reg8, ref_copy_mem8_to_reg8); test_mem(taint_copy_reg32_to_mem32, ref_copy_reg32_to_mem32); test_mem(taint_copy_reg16_to_mem16, ref_copy_reg16_to_mem16); test_mem(taint_copy_reg8_to_mem8, ref_copy_reg8_to_mem8); test_stackop(taint_copy_push_reg32, ref_copy_push_reg32); test_stackop(taint_copy_push_reg16, ref_copy_push_reg16); test_mem(taint_copy_push_mem32, ref_copy_push_mem32); test_mem(taint_copy_push_mem16, ref_copy_push_mem16); test_stackop(taint_copy_pop_reg32, ref_copy_pop_reg32); test_stackop(taint_copy_pop_reg16, ref_copy_pop_reg16); test_mem(taint_copy_pop_mem32, ref_copy_pop_mem32); test_mem(taint_copy_pop_mem16, ref_copy_pop_mem16); test_addr(taint_copy_eax_to_addr32, ref_copy_eax_to_addr32); test_addr(taint_copy_ax_to_addr16, ref_copy_ax_to_addr16); test_addr(taint_copy_al_to_addr8, ref_copy_al_to_addr8); test_addr(taint_copy_addr32_to_eax, ref_copy_addr32_to_eax); test_addr(taint_copy_addr16_to_ax, ref_copy_addr16_to_ax); test_addr(taint_copy_addr8_to_al, ref_copy_addr8_to_al); test_impl(taint_copy_eax_to_str32, ref_copy_eax_to_str32); test_impl(taint_copy_ax_to_str16, ref_copy_ax_to_str16); test_impl(taint_copy_al_to_str8, ref_copy_al_to_str8); test_impl(taint_copy_str32_to_eax, ref_copy_str32_to_eax); test_impl(taint_copy_str16_to_ax, ref_copy_str16_to_ax); test_impl(taint_copy_str8_to_al, ref_copy_str8_to_al); test_impl(taint_copy_str32_to_str32, ref_copy_str32_to_str32); test_impl(taint_copy_str16_to_str16, ref_copy_str16_to_str16); test_impl(taint_copy_str8_to_str8, ref_copy_str8_to_str8); test_reg(taint_erase_reg32, ref_erase_reg32); test_reg(taint_erase_reg16, ref_erase_reg16); test_reg(taint_erase_reg8, ref_erase_reg8); test_mem(taint_erase_mem32, ref_erase_mem32); test_mem(taint_erase_mem16, ref_erase_mem16); test_mem(taint_erase_mem8, ref_erase_mem8); test_reg(taint_erase_hireg16, ref_erase_hireg16); test_impl(taint_erase_push32, ref_erase_push32); test_impl(taint_erase_push16, ref_erase_push16); test_reg2(taint_or_reg32_to_reg32, ref_or_reg32_to_reg32); test_reg2(taint_or_reg16_to_reg16, ref_or_reg16_to_reg16); test_reg2(taint_or_reg8_to_reg8, ref_or_reg8_to_reg8); test_mem(taint_or_reg32_to_mem32, ref_or_reg32_to_mem32); test_mem(taint_or_reg16_to_mem16, ref_or_reg16_to_mem16); test_mem(taint_or_reg8_to_mem8, ref_or_reg8_to_mem8); test_mem(taint_or_mem32_to_reg32, ref_or_mem32_to_reg32); test_mem(taint_or_mem16_to_reg16, ref_or_mem16_to_reg16); test_mem(taint_or_mem8_to_reg8, ref_or_mem8_to_reg8); test_mem(taint_xor_reg32_to_mem32, ref_xor_reg32_to_mem32); test_mem(taint_xor_reg16_to_mem16, ref_xor_reg16_to_mem16); test_mem(taint_xor_reg8_to_mem8, ref_xor_reg8_to_mem8); test_mem(taint_xor_mem32_to_reg32, ref_xor_mem32_to_reg32); test_mem(taint_xor_mem16_to_reg16, ref_xor_mem16_to_reg16); test_mem(taint_xor_mem8_to_reg8, ref_xor_mem8_to_reg8); test_reg2(taint_swap_reg32_reg32, ref_swap_reg32_reg32); test_reg2(taint_swap_reg16_reg16, ref_swap_reg16_reg16); test_reg2(taint_swap_reg8_reg8, ref_swap_reg8_reg8); test_mem(taint_swap_reg32_mem32, ref_swap_reg32_mem32); test_mem(taint_swap_reg16_mem16, ref_swap_reg16_mem16); test_mem(taint_swap_reg8_mem8, ref_swap_reg8_mem8); test_reg2(taint_copy_reg16_to_reg32, ref_copy_reg16_to_reg32); test_reg2(taint_copy_reg8_to_reg32, ref_copy_reg8_to_reg32); test_reg2(taint_copy_reg8_to_reg16, ref_copy_reg8_to_reg16); test_mem(taint_copy_mem16_to_reg32, ref_copy_mem16_to_reg32); test_mem(taint_copy_mem8_to_reg32, ref_copy_mem8_to_reg32); test_mem(taint_copy_mem8_to_reg16, ref_copy_mem8_to_reg16); test_impl2(taint_erase_eax_edx, ref_erase_eax_edx); test_impl2(taint_erase_ax_dx, ref_erase_ax_dx); test_impl2(taint_erase_eax, ref_erase_eax); test_impl2(taint_erase_ax, ref_erase_ax); test_impl2(taint_erase_al, ref_erase_al); test_pushpop(taint_copy_popa32, ref_copy_popa32, (long)mem_test); test_pushpop(taint_copy_popa16, ref_copy_popa16, (long)mem_test); test_pushpop(taint_copy_pusha32, ref_copy_pusha32, 32+(long)mem_test); test_pushpop(taint_copy_pusha16, ref_copy_pusha16, 32+(long)mem_test); test_impl(taint_leave32, ref_leave32); test_impl(taint_leave16, ref_leave16); test_cmpxchg(taint_cmpxchg8_pre, taint_cmpxchg8_post, ref_cmpxchg8); test_cmpxchg(taint_cmpxchg16_pre, taint_cmpxchg16_post, ref_cmpxchg16); test_cmpxchg(taint_cmpxchg32_pre, taint_cmpxchg32_post, ref_cmpxchg32); test_cmpxchg(taint_cmpxchg8b_pre, taint_cmpxchg8b_post, ref_cmpxchg8b); mrm_generator(test_lea); exit(err); }