version 1.51, 2011/06/20 17:54:48 |
version 1.52, 2011/07/04 06:44:52 |
|
|
"PT_KILL", "PT_ATTACH", "PT_DETACH", "PT_IO", |
"PT_KILL", "PT_ATTACH", "PT_DETACH", "PT_IO", |
}; |
}; |
|
|
|
static int narg; |
|
static register_t *ap; |
|
static char sep; |
|
|
static int fread_tail(void *, size_t, size_t); |
static int fread_tail(void *, size_t, size_t); |
static void dumpheader(struct ktr_header *); |
static void dumpheader(struct ktr_header *); |
static void ktrcsw(struct ktr_csw *); |
static void ktrcsw(struct ktr_csw *); |
|
|
printf(")"); |
printf(")"); |
} |
} |
|
|
#define print_number(i, n, c) do { \ |
static void |
if (c) \ |
ptracedecode(void) |
(void)putchar(c); \ |
{ |
if (decimal) \ |
if (*ap >= 0 && *ap < |
(void)printf("%ld", (long)*i); \ |
sizeof(ptrace_ops) / sizeof(ptrace_ops[0])) |
else \ |
(void)printf("%s", ptrace_ops[*ap]); |
(void)printf("%#lx", (long)*i); \ |
else switch(*ap) { |
i++; \ |
#ifdef PT_GETFPREGS |
n--; \ |
case PT_GETFPREGS: |
c = ','; \ |
(void)printf("PT_GETFPREGS"); |
} while (0); |
break; |
|
#endif |
|
case PT_GETREGS: |
|
(void)printf("PT_GETREGS"); |
|
break; |
|
#ifdef PT_SETFPREGS |
|
case PT_SETFPREGS: |
|
(void)printf("PT_SETFPREGS"); |
|
break; |
|
#endif |
|
case PT_SETREGS: |
|
(void)printf("PT_SETREGS"); |
|
break; |
|
#ifdef PT_STEP |
|
case PT_STEP: |
|
(void)printf("PT_STEP"); |
|
break; |
|
#endif |
|
#ifdef PT_WCOOKIE |
|
case PT_WCOOKIE: |
|
(void)printf("PT_WCOOKIE"); |
|
break; |
|
#endif |
|
default: |
|
(void)printf("%ld", (long)*ap); |
|
break; |
|
} |
|
sep = ','; |
|
ap++; |
|
narg--; |
|
} |
|
|
static void |
static void |
|
pn(void (*f)(int)) |
|
{ |
|
if (sep) |
|
(void)putchar(sep); |
|
if (fancy && f != NULL) |
|
f((int)*ap); |
|
else if (decimal) |
|
(void)printf("%ld", (long)*ap); |
|
else |
|
(void)printf("%#lx", (long)*ap); |
|
ap++; |
|
narg--; |
|
sep = ','; |
|
} |
|
|
|
#ifdef __LP64__ |
|
#define plln() pn(NULL) |
|
#elif _BYTE_ORDER == _LITTLE_ENDIAN |
|
static void |
|
plln(void) |
|
{ |
|
long long val = ((long long)*ap) & 0xffffffff; |
|
ap++; |
|
val |= ((long long)*ap) << 32; |
|
ap++; |
|
narg -= 2; |
|
if (sep) |
|
(void)putchar(sep); |
|
if (decimal) |
|
(void)printf("%lld", val); |
|
else |
|
(void)printf("%#llx", val); |
|
sep = ','; |
|
} |
|
#else |
|
static void |
|
plln(void) |
|
{ |
|
long long val = ((long long)*ap) << 32; |
|
ap++; |
|
val |= ((long long)*ap) & 0xffffffff; |
|
ap++; |
|
narg -= 2; |
|
if (sep) |
|
(void)putchar(sep); |
|
if (decimal) |
|
(void)printf("%lld", val); |
|
else |
|
(void)printf("%#llx", val); |
|
sep = ','; |
|
} |
|
#endif |
|
|
|
static void |
ktrsyscall(struct ktr_syscall *ktr) |
ktrsyscall(struct ktr_syscall *ktr) |
{ |
{ |
int narg = ktr->ktr_argsize / sizeof(register_t); |
narg = ktr->ktr_argsize / sizeof(register_t); |
register_t *ap; |
sep = '\0'; |
|
|
if (ktr->ktr_code >= current->nsysnames || ktr->ktr_code < 0) |
if (ktr->ktr_code >= current->nsysnames || ktr->ktr_code < 0) |
(void)printf("[%d]", ktr->ktr_code); |
(void)printf("[%d]", ktr->ktr_code); |
|
|
(void)printf("%s", current->sysnames[ktr->ktr_code]); |
(void)printf("%s", current->sysnames[ktr->ktr_code]); |
ap = (register_t *)((char *)ktr + sizeof(struct ktr_syscall)); |
ap = (register_t *)((char *)ktr + sizeof(struct ktr_syscall)); |
(void)putchar('('); |
(void)putchar('('); |
if (narg) { |
|
char c = '\0'; |
|
if (fancy) { |
|
switch (ktr->ktr_code) { |
|
case SYS_ioctl: { |
|
const char *cp; |
|
|
|
if (decimal) |
switch (ktr->ktr_code) { |
(void)printf("%ld", (long)*ap); |
case SYS_ioctl: { |
else |
const char *cp; |
(void)printf("%#lx", (long)*ap); |
|
ap++; |
|
narg--; |
|
if ((cp = ioctlname(*ap)) != NULL) |
|
(void)printf(",%s", cp); |
|
else |
|
ioctldecode(*ap); |
|
c = ','; |
|
ap++; |
|
narg--; |
|
break; |
|
} |
|
case SYS___sysctl: { |
|
int *np, n; |
|
|
|
n = ap[1]; |
pn(NULL); |
if (n > CTL_MAXNAME) |
if (!fancy) |
n = CTL_MAXNAME; |
break; |
np = (int *)(ap + 6); |
if ((cp = ioctlname(*ap)) != NULL) |
for (; n--; np++) { |
(void)printf(",%s", cp); |
if (c) |
else |
putchar(c); |
ioctldecode(*ap); |
printf("%d", *np); |
ap++; |
c = '.'; |
narg--; |
} |
break; |
|
} |
|
case SYS___sysctl: { |
|
int *np, n; |
|
|
c = ','; |
if (!fancy) |
ap += 2; |
break; |
narg -= 2; |
n = ap[1]; |
break; |
if (n > CTL_MAXNAME) |
} |
n = CTL_MAXNAME; |
case SYS_ptrace: |
np = (int *)(ap + 6); |
if (*ap >= 0 && *ap < |
for (; n--; np++) { |
sizeof(ptrace_ops) / sizeof(ptrace_ops[0])) |
if (sep) |
(void)printf("%s", ptrace_ops[*ap]); |
putchar(sep); |
else switch(*ap) { |
printf("%d", *np); |
#ifdef PT_GETFPREGS |
sep = '.'; |
case PT_GETFPREGS: |
|
(void)printf("PT_GETFPREGS"); |
|
break; |
|
#endif |
|
case PT_GETREGS: |
|
(void)printf("PT_GETREGS"); |
|
break; |
|
#ifdef PT_SETFPREGS |
|
case PT_SETFPREGS: |
|
(void)printf("PT_SETFPREGS"); |
|
break; |
|
#endif |
|
case PT_SETREGS: |
|
(void)printf("PT_SETREGS"); |
|
break; |
|
#ifdef PT_STEP |
|
case PT_STEP: |
|
(void)printf("PT_STEP"); |
|
break; |
|
#endif |
|
#ifdef PT_WCOOKIE |
|
case PT_WCOOKIE: |
|
(void)printf("PT_WCOOKIE"); |
|
break; |
|
#endif |
|
default: |
|
(void)printf("%ld", (long)*ap); |
|
break; |
|
} |
|
c = ','; |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_access: |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
accessmodename((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_chmod: |
|
case SYS_fchmod: |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
modename((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_fcntl: { |
|
int cmd; |
|
int arg; |
|
print_number(ap, narg, c); |
|
cmd = *ap; |
|
arg = *++ap; |
|
(void)putchar(','); |
|
fcntlcmdname(cmd, arg, decimal); |
|
ap++; |
|
narg -= 2; |
|
break; |
|
} |
|
case SYS_flock: |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
flockname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_getrlimit: |
|
case SYS_setrlimit: |
|
rlimitname((int)*ap); |
|
ap++; |
|
narg--; |
|
c = ','; |
|
break; |
|
case SYS_getsockopt: |
|
case SYS_setsockopt: |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
sockoptlevelname((int)*ap, decimal); |
|
if ((int)*ap == SOL_SOCKET) { |
|
ap++; |
|
narg--; |
|
(void)putchar(','); |
|
sockoptname((int)*ap); |
|
} |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_kill: |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
signame((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_lseek: |
|
print_number(ap, narg, c); |
|
/* skip padding */ |
|
ap++; |
|
narg--; |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
whencename((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_madvise: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
madvisebehavname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_minherit: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
minheritname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_mlockall: |
|
mlockallname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_mmap: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
mmapprotname((int)*ap); |
|
(void)putchar(','); |
|
ap++; |
|
narg--; |
|
mmapflagsname((int)*ap); |
|
ap++; |
|
narg--; |
|
print_number(ap, narg, c); |
|
/* skip padding */ |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_mprotect: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
mmapprotname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_mquery: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
mmapprotname((int)*ap); |
|
ap++; |
|
narg--; |
|
(void)putchar(','); |
|
mmapflagsname((int)*ap); |
|
ap++; |
|
narg--; |
|
print_number(ap, narg, c); |
|
/* skip padding */ |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_msync: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
msyncflagsname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_msgctl: |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
shmctlname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_open: { |
|
int flags; |
|
int mode; |
|
print_number(ap, narg, c); |
|
flags = *ap; |
|
mode = *++ap; |
|
(void)putchar(','); |
|
flagsandmodename(flags, mode, decimal); |
|
ap++; |
|
narg -= 2; |
|
break; |
|
} |
|
case SYS_pread: |
|
case SYS_preadv: |
|
case SYS_pwrite: |
|
case SYS_pwritev: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
/* skip padding */ |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_recvmsg: |
|
case SYS_sendmsg: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
sendrecvflagsname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_recvfrom: |
|
case SYS_sendto: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
sendrecvflagsname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS___semctl: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
semctlname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_semget: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
semgetname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_shmat: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
shmatname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_shmctl: |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
shmctlname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_sigaction: |
|
signame((int)*ap); |
|
ap++; |
|
narg--; |
|
c = ','; |
|
break; |
|
case SYS_sigprocmask: |
|
sigprocmaskhowname((int)*ap); |
|
ap++; |
|
narg--; |
|
c = ','; |
|
break; |
|
case SYS_socket: { |
|
int sockdomain = (int)*ap; |
|
sockdomainname(sockdomain); |
|
ap++; |
|
narg--; |
|
(void)putchar(','); |
|
socktypename((int)*ap); |
|
ap++; |
|
narg--; |
|
if (sockdomain == PF_INET || |
|
sockdomain == PF_INET6) { |
|
(void)putchar(','); |
|
sockipprotoname((int)*ap); |
|
ap++; |
|
narg--; |
|
} |
|
c = ','; |
|
break; |
|
} |
|
case SYS_socketpair: |
|
sockdomainname((int)*ap); |
|
ap++; |
|
narg--; |
|
(void)putchar(','); |
|
socktypename((int)*ap); |
|
ap++; |
|
narg--; |
|
c = ','; |
|
break; |
|
case SYS_truncate: |
|
case SYS_ftruncate: |
|
print_number(ap, narg, c); |
|
/* skip padding */ |
|
ap++; |
|
narg--; |
|
break; |
|
case SYS_wait4: |
|
print_number(ap, narg, c); |
|
print_number(ap, narg, c); |
|
(void)putchar(','); |
|
wait4optname((int)*ap); |
|
ap++; |
|
narg--; |
|
break; |
|
} |
|
} |
} |
while (narg) { |
|
if (c) |
sep = ','; |
putchar(c); |
ap += 2; |
if (decimal) |
narg -= 2; |
(void)printf("%ld", (long)*ap); |
break; |
else |
} |
(void)printf("%#lx", (long)*ap); |
case SYS_ptrace: |
c = ','; |
if (!fancy) |
ap++; |
break; |
narg--; |
ptracedecode(); |
} |
break; |
|
case SYS_access: |
|
pn(NULL); |
|
pn(accessmodename); |
|
break; |
|
case SYS_chmod: |
|
case SYS_fchmod: |
|
pn( NULL); |
|
pn(modename); |
|
break; |
|
case SYS_fcntl: { |
|
int cmd; |
|
int arg; |
|
pn(NULL); |
|
if (!fancy) |
|
break; |
|
cmd = ap[0]; |
|
arg = ap[1]; |
|
(void)putchar(','); |
|
fcntlcmdname(cmd, arg); |
|
ap += 2; |
|
narg -= 2; |
|
break; |
|
} |
|
case SYS_flock: |
|
pn(NULL); |
|
pn(flockname); |
|
break; |
|
case SYS_getrlimit: |
|
case SYS_setrlimit: |
|
pn(rlimitname); |
|
break; |
|
case SYS_getsockopt: |
|
case SYS_setsockopt: { |
|
int level; |
|
|
|
pn(NULL); |
|
level = *ap; |
|
pn(sockoptlevelname); |
|
if (level == SOL_SOCKET) |
|
pn(sockoptname); |
|
break; |
|
} |
|
case SYS_kill: |
|
pn(NULL); |
|
pn(signame); |
|
break; |
|
case SYS_lseek: |
|
pn(NULL); |
|
/* skip padding */ |
|
ap++; |
|
narg--; |
|
plln(); |
|
pn(whencename); |
|
break; |
|
case SYS_madvise: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(madvisebehavname); |
|
break; |
|
case SYS_minherit: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(minheritname); |
|
break; |
|
case SYS_mlockall: |
|
pn(mlockallname); |
|
break; |
|
case SYS_mmap: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(mmapprotname); |
|
pn(mmapflagsname); |
|
pn(NULL); |
|
/* skip padding */ |
|
ap++; |
|
narg--; |
|
plln(); |
|
break; |
|
case SYS_mprotect: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(mmapprotname); |
|
break; |
|
case SYS_mquery: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(mmapprotname); |
|
pn(mmapflagsname); |
|
pn(NULL); |
|
/* skip padding */ |
|
ap++; |
|
narg--; |
|
plln(); |
|
break; |
|
case SYS_msync: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(msyncflagsname); |
|
break; |
|
case SYS_msgctl: |
|
pn(NULL); |
|
pn(shmctlname); |
|
break; |
|
case SYS_open: { |
|
int flags; |
|
int mode; |
|
|
|
pn(NULL); |
|
if (!fancy) |
|
break; |
|
flags = ap[0]; |
|
mode = ap[1]; |
|
(void)putchar(','); |
|
flagsandmodename(flags, mode); |
|
ap += 2; |
|
narg -= 2; |
|
break; |
|
} |
|
case SYS_pread: |
|
case SYS_preadv: |
|
case SYS_pwrite: |
|
case SYS_pwritev: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(NULL); |
|
/* skip padding */ |
|
ap++; |
|
narg--; |
|
plln(); |
|
break; |
|
case SYS_recvmsg: |
|
case SYS_sendmsg: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(sendrecvflagsname); |
|
break; |
|
case SYS_recvfrom: |
|
case SYS_sendto: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(NULL); |
|
pn(sendrecvflagsname); |
|
break; |
|
case SYS___semctl: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(semctlname); |
|
break; |
|
case SYS_semget: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(semgetname); |
|
break; |
|
case SYS_shmat: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(shmatname); |
|
break; |
|
case SYS_shmctl: |
|
pn(NULL); |
|
pn(shmctlname); |
|
break; |
|
case SYS_sigaction: |
|
pn(signame); |
|
break; |
|
case SYS_sigprocmask: |
|
pn(sigprocmaskhowname); |
|
break; |
|
case SYS_socket: { |
|
int sockdomain = *ap; |
|
|
|
pn(sockdomainname); |
|
pn(socktypename); |
|
if (sockdomain == PF_INET || sockdomain == PF_INET6) |
|
pn(sockipprotoname); |
|
break; |
|
} |
|
case SYS_socketpair: |
|
pn(sockdomainname); |
|
pn(socktypename); |
|
break; |
|
case SYS_truncate: |
|
case SYS_ftruncate: |
|
pn(NULL); |
|
/* skip padding */ |
|
ap++; |
|
narg--; |
|
plln(); |
|
break; |
|
case SYS_wait4: |
|
pn(NULL); |
|
pn(NULL); |
|
pn(wait4optname); |
|
break; |
|
} |
|
|
|
while (narg) { |
|
if (sep) |
|
putchar(sep); |
|
if (decimal) |
|
(void)printf("%ld", (long)*ap); |
|
else |
|
(void)printf("%#lx", (long)*ap); |
|
sep = ','; |
|
ap++; |
|
narg--; |
} |
} |
(void)printf(")\n"); |
(void)printf(")\n"); |
} |
} |