int main(int argc, char *argv[]) { #if DEBUG_PRINT if (argc < 3) error_msg_and_fail("Not enough arguments. " "Usage: %s STRACE_NAME DEBUG_OUT_FD", argv[0]); strace_name = argv[1]; errno = 0; int debug_out_fd = strtol(argv[2], NULL, 0); if (errno) error_msg_and_fail("Not a number: %s", argv[2]); debug_out = fdopen(debug_out_fd, "a"); if (!debug_out) perror_msg_and_fail("fdopen: %d", debug_out_fd); #endif test_syscall(ARRAY_SIZE(syscallent)); (void) syscallent; /* workaround for clang bug #33068 */ #ifdef SYS_socket_subcall test_syscall(SYS_socket_subcall + 1); #endif #ifdef SYS_ipc_subcall test_syscall(SYS_ipc_subcall + 1); #endif puts("+++ exited with 0 +++"); return 0; }
void test_create_process(long num_fork, long size){ long num_filled; int state; pid_t pid; long i, ret; assert(num_fork >= 0); if (num_fork == 0){ ret = test_syscall(size, &num_filled); return; } // Create Process pid = fork(); if (pid != 0){ waitpid(pid, &state, 0); return; } for (i=1; i<num_fork; i++){ pid = fork(); if (pid != 0){ waitpid(pid, &state, 0); exit(0); } } if (pid == 0){ ret = test_syscall(size, &num_filled); exit(0); } }
int main(int argc, char **argv) { srand(time(NULL)); if (argc>1 && strcmp(argv[1], "intercept") == 0) return do_intercept(atoi(argv[2]), atoi(argv[3])); if (argc>1 && strcmp(argv[1], "release") == 0) return do_release(atoi(argv[2]), atoi(argv[3])); if (argc>1 && strcmp(argv[1], "nonroot") == 0) return do_nonroot(atoi(argv[2])); test("insmod interceptor.ko %s", "", system("insmod interceptor.ko") == 0); test("bad MY_CUSTOM_SYSCALL args%s", "", vsyscall_arg(MY_CUSTOM_SYSCALL, 3, 100, 0, 0) == -EINVAL); do_intercept(MY_CUSTOM_SYSCALL, -EINVAL); do_release(MY_CUSTOM_SYSCALL, -EINVAL); do_intercept(-1, -EINVAL); do_release(-1, -EINVAL); do_intercept(__NR_exit, 0); do_release(__NR_exit, 0); test_syscall(SYS_open); /* The above line of code tests SYS_open. * Feel free to add more tests here for other system calls, * once you get everything to work; check Linux documentation * for other syscall number definitions. */ test("rmmod interceptor.ko %s", "", system("rmmod interceptor") == 0); return 0; }
int main(void) { test_syscall(ARRAY_SIZE(syscallent)); #ifdef SYS_socket_subcall test_syscall(SYS_socket_subcall + 1); #endif #ifdef SYS_ipc_subcall test_syscall(SYS_ipc_subcall + 1); #endif puts("+++ exited with 0 +++"); return 0; }
int main(int argc, char **argv) { srand(time(NULL)); if (argc > 1 && strcmp(argv[1], "intercept") == 0) return do_intercept(atoi(argv[2]), atoi(argv[3])); if (argc > 1 && strcmp(argv[1], "release") == 0) return do_release(atoi(argv[2]), atoi(argv[3])); if (argc > 1 && strcmp(argv[1], "start") == 0) return do_start(atoi(argv[2]), atoi(argv[3]), atoi(argv[4])); if (argc > 1 && strcmp(argv[1], "stop") == 0) return do_stop(atoi(argv[2]), atoi(argv[3]), atoi(argv[4])); if (argc > 1 && strcmp(argv[1], "monitor") == 0) return test_monitor(atoi(argv[2]), TRUE); if (argc > 1 && strcmp(argv[1], "nonroot") == 0) return do_nonroot(atoi(argv[2])); struct sigaction sa; sa.sa_flags = SA_SIGINFO; sigemptyset(&sa.sa_mask); sa.sa_sigaction = on_quit; if (sigaction(SIGQUIT, &sa, NULL) == -1) perror("Cannot register signal handler"); test("insmod interceptor.ko %s", "", system("insmod interceptor.ko") == 0); test("bad MY_SYSCALL args%s", "", vsyscall_arg(MY_CUSTOM_SYSCALL, 3, 100, 0, 0) == -EINVAL); do_intercept(MY_CUSTOM_SYSCALL, -EINVAL); do_release(MY_CUSTOM_SYSCALL, -EINVAL); do_intercept(-1, -EINVAL); do_release(-1, -EINVAL); do_intercept(__NR_exit, 0); do_release(__NR_exit, 0); test_syscall(SYS_open); /* The above line of code tests SYS_open. Feel free to add more tests here for other system calls, once you get everything to work; check Linux documentation for other syscall number definitions. */ do_intercept(SYS_open, 0); do_start(SYS_open, -1, 0); test_monitor(SYS_open, TRUE); test("rmmod interceptor.ko %s", "", system("rmmod interceptor") == 0); test_monitor(SYS_open, FALSE); return 0; }
int main(int argc, char *argv[]) { printf("==== start\n"); if (sthread_init()) err(1, "sthread_init()"); printf("==== Basic sthread\n"); test_sthread(); test_sthread(); printf("==== Globals\n"); _global = 2; test_global(); if (_global != 2) errx(1, "global in master %d\n", _global); test_global(); printf("==== Stack\n"); test_stack(); test_stack(); printf("==== smalloc\n"); test_smalloc(); printf("==== fd\n"); test_fd(); printf("==== syscall\n"); test_syscall(); printf("==== parallel\n"); test_parallel(); printf("==== end\n"); exit(0); }