void print_syscall_args(pid_t child, int num) { struct syscall_entry *ent = NULL; int nargs = SYSCALL_MAXARGS; int i; char *strval; if (num <= MAX_SYSCALL_NUM && syscalls[num].name) { ent = &syscalls[num]; nargs = ent->nargs; } for (i = 0; i < nargs; i++) { long arg = get_syscall_arg(child, i); int type = ent ? ent->args[i] : ARG_PTR; switch (type) { case ARG_INT: fprintf(stderr, "%ld", arg); break; case ARG_STR: strval = read_string(child, arg); fprintf(stderr, "\"%s\"", strval); free(strval); break; default: fprintf(stderr, "0x%lx", arg); break; } if (i != nargs - 1) fprintf(stderr, ", "); } }
void print_syscall_args(pid_t child) { int nargs = SYSCALL_MAXARGS; int i; char *strval; for (i = 0; i < nargs; i++) { long arg = get_syscall_arg(child, i); strval = read_string(child, arg); if(strlen(strval) > 0){ if(strlen(strval) > 100){ strval[100] = '\0'; } fprintf(stderr, "\"%s\"", strval); }else{ fprintf(stderr, "%ld", arg); } free(strval); if (i != nargs - 1) fprintf(stderr, ", "); } }