Dtracing gethostbyname I'm trying to read the h_alias array and all the entries
it points to however every time I copyin an entry pointed to by the first entry
in teh h_alias array the other entries in the array get corrupted.
So I have ended up with this script:
#!/usr/bin/dtrace -CZs
#include <netdb.h>
pid$target::gethostbyname_r:return
{
self->r = (struct hostent *)copyin(arg1, sizeof (struct hostent));
printf("%d Host: %s", pid, copyinstr((uintptr_t)self->r->h_name));
printf(" h_aliases %p ", self->r->h_aliases);
self->a = (char **)copyin((uintptr_t)self->r->h_aliases,
4*sizeof (char *));
}
#define ALIAS(X) \
pid$target::gethostbyname_r:return \
/ self->a[X] != 0 / \
{ \
printf("%d h_alias[%d]: %p", pid, X, (uintptr_t)(self->a[X])); \
self->my_counter++; \
}
#define XSALIAS(X)
#define SALIAS(X) \
pid$target::gethostbyname_r:return \
/ self->a[X] != 0 / \
{ \
printf(" X+1 %p\n", self->a[X+1]); \
printf("%d h_alias[%d]: %s", pid, X, \
copyinstr((uintptr_t)self->a[X])); \
printf("\nX %p", self->a[X]); \
printf(" X+1 %p", self->a[X+1]); \
self->my_counter--; \
}
ALIAS(0)
ALIAS(1)
ALIAS(2)
ALIAS(3)
SALIAS(0)
SALIAS(1)
SALIAS(2)
SALIAS(3)
pid$target::gethostbyname_r:return
/self->my_counter/
{
printf("Stopping...\n");
stop(); exit(0);
}
/* END OF SCRIPT */
This should print out the array of (upto 4) pointers to h_aliases and then
dereference each one. However if it fails to derefrence them is stops the
target program and exits.
: va64-v40zh-gmp03.eu TS 14 $; getent hosts va64-v40zh-gmp03
129.156.213.204 va64-v40zh-gmp03 loghost spamhost
: va64-v40zh-gmp03.eu TS 15 $; pfexec /usr/sbin/dtrace -32 -wZCs gethostbynam>
dtrace: script 'gethostbyname.d' matched 0 probes
dtrace: allowing destructive actions
CPU ID FUNCTION:NAME
0 55085 gethostbyname_r:return 4489 Host: va64-v40zh-gmp03
h_aliases 80646ac
0 55085 gethostbyname_r:return 4489 h_alias[0]: 80667a3
0 55085 gethostbyname_r:return 4489 h_alias[1]: 806679a
0 55085 gethostbyname_r:return 0+1 806679a
4489 h_alias[0]: loghost
X 0 0+1 0
0 55085 gethostbyname_r:return Stopping...
: va64-v40zh-gmp03.eu TS 16 $; mdb -p 4489
Loading modules: [ ld.so.1 libc.so.1 ]
> 80646ac/4X
0x80646ac: 80667a3 806679a 0 0
> 80667a3/s
0x80667a3: loghost
> 806679a/s
0x806679a: spamhost
>
>From the debugging bits I have added to the SALIAS macro it appear that the
>copyinstr is causing the values in self->a[X] and self->a[X+1] to be zerod but
>why?
--
This message posted from opensolaris.org
_______________________________________________
dtrace-discuss mailing list
[email protected]