Esempio n. 1
0
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, ", ");
    }
}
Esempio n. 2
0
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, ", ");
    }

}