Hy!

I have a problem with my script:
# cat process_ps.d
#!/usr/sbin/dtrace -qs
#pragma D option quiet

syscall::open:entry
/ (arg0 != NULL) && ( execname == "ps" ) && ( copyinstr(arg0) ==
"/proc/1305/psinfo" ) /
{
        printf("%s:%s:%s:%s\t->\t%s (%d)\n", probeprov, probemod,
probefunc, probename, copyinstr(arg0), strlen(copyinstr(arg0)));
}

The output of this script:

# ./process_ps.d
syscall::open:entry     ->      /proc/1305/psinfo (17)
syscall::open:entry     ->      /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
syscall::open:entry     ->      /proc/1305/psinfo (17)
syscall::open:entry     ->      /proc/1305/psinfo (17)
syscall::open:entry     ->      /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
syscall::open:entry     ->      /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
syscall::open:entry     ->      /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
syscall::open:entry     ->      /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
syscall::open:entry     ->      /proc/1305/psinfo (17)
syscall::open:entry     ->      /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
syscall::open:entry     ->      /proc/1305/psinfo (17)
...

1. question:
I doesn't understand why are there these "invalid address (0xff358000)
in predicate at DIF offset 120" errors.

If i modify my script:
# cat process_ps.d
#!/usr/sbin/dtrace -qs
#pragma D option quiet

BEGIN {
        printf("Your parameter(s):\t%s\n", $$1);
        self->pida = strjoin(strjoin("/proc/",$$1),"/psinfo");
        printf("New variable(s):\t%s (%d)\n", self->pida, strlen(self->pida));
}

syscall::open:entry
/ (arg0 != NULL) && ( execname == "ps" ) && ( copyinstr(arg0) == self->pida ) /
{
        printf("%s:%s:%s:%s\t->\t%s (%d)\n", probeprov, probemod,
probefunc, probename, copyinstr(arg0), strlen(copyinstr(arg0)));
}

# ./process_ps.d 1305
Your parameter(s):      1305
New variable(s):        /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 2 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
dtrace: error on enabled probe ID 2 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
... and write nothing ...

2. question
I don't understand why it is happen, i think the error is in "(
copyinstr(arg0) == self->pida )" but i think the syntax is ok.

Thanks a lot.

Br.:
Cni
_______________________________________________
dtrace-discuss mailing list
[email protected]

Reply via email to