Un modello integrato control-flow e data-flow per il rilevamento ...
Un modello integrato control-flow e data-flow per il rilevamento ...
Un modello integrato control-flow e data-flow per il rilevamento ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
4.2. Introduzione a DTrace 55<br />
1 static int<br />
2 walk(const dtrace_agg<strong>data</strong>_t *<strong>data</strong>, void *arg)<br />
3 {<br />
4 dtrace_aggdesc_t *aggdesc = <strong>data</strong>->dtada_desc;<br />
5 dtrace_recdesc_t *ustackrec, *<strong>data</strong>rec, *namerec, *argrec;<br />
6 uint64_t *ustack, *pc, timestamp;<br />
7 char *name;<br />
8<br />
9 /* [...] */<br />
10<br />
11 /* Nome system call */<br />
12 namerec = &aggdesc->dtagd_rec[1];<br />
13 name = <strong>data</strong>->dtada_<strong>data</strong> + namerec->dtrd_offset;<br />
14<br />
15 /* Stack */<br />
16 ustackrec = &aggdesc->dtagd_rec[2];<br />
17 if (ustackrec->dtrd_action != DTRACEACT_USTACK)<br />
18 fatal("aggregation key is not a ustack\n");<br />
19 ustack = (uint64_t *)(<strong>data</strong>->dtada_<strong>data</strong> + ustackrec->dtrd_offset);<br />
20<br />
21 /* [...] */<br />
22 }<br />
Figura 4.6: Snippet di walk().<br />
ustack(), si procederà come in Figura 4.6. A questo punto è possib<strong>il</strong>e processarli<br />
in qualsiasi modo si voglia.<br />
4.2.2 Note riguardo a DTrace<br />
I primi es<strong>per</strong>imenti con i consumer custom sono stati fatti in ambiente Mac OS X,<br />
fino a quando non è emerso che, <strong>per</strong> motivi ancora non del tutto chiari, la funzione<br />
ustack() “<strong>per</strong>deva <strong>per</strong> strada” dei frame. Non solo, i frame <strong>per</strong>si non erano gli<br />
stessi su piattaforma Intel e su piattaforma PowerPC. Inizialmente si è sospettato<br />
che questo accadesse a causa di ottimizzazioni introdotte dal comp<strong>il</strong>atore (del tipo<br />
di -fomit-frame-pointer), ma andando a guardare <strong>il</strong> codice macchina generato<br />
si è visto che non era questo <strong>il</strong> caso. Si è dunque spostato lo sv<strong>il</strong>uppo su Solaris<br />
(OpenIndiana 151a), dove nessun stack frame viene <strong>per</strong>so. Questo comportamento<br />
verrà discusso a breve con gli sv<strong>il</strong>uppatori di DTrace.