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.
2.1. Modelli <strong>control</strong> <strong>flow</strong> 11<br />
con una coppia (si, pi). Ogni evento contiene due informazioni e in particolare la<br />
chiamata di sistema che è stata eseguita e <strong>il</strong> punto del programma dal quale è stata<br />
eseguita.<br />
L’automa è rappresentab<strong>il</strong>e come un grafo G = (V ∪ {end}, E = V × V × L)<br />
e, dati due eventi consecutivi (si, pi) e (si+1, pi+1) di una traccia di lunghezza k, la<br />
costruzione avviene nel seguente modo:<br />
• <strong>per</strong> 0 ≤ i ≤ k: V = V ∪ {pi}<br />
• <strong>per</strong> 0 ≤ i ≤ k: E = E ∪ {(pi, pi+1, si)}<br />
• infine: E = E ∪ {(pk, end, sk)}<br />
L’idea dietro a questo automa è che <strong>per</strong> passare da uno stato ad un altro del pro-<br />
gramma deve avvenire una transizione causata da una chiamata di sistema. In-<br />
tuitivamente, questa costruzione porta quindi ad un automa in cui gli stati sono<br />
etichettati con <strong>il</strong> punto del programma dal quale viene eseguita la system call e gli<br />
archi con la chiamata di sistema coinvolta nella transizione. Vediamo un esempio.<br />
1 void f(int cond)<br />
2 {<br />
3 open();<br />
4 if (cond % 2)<br />
5 read();<br />
6 else<br />
7 write();<br />
8 close();<br />
9 }<br />
10<br />
11 int main(void)<br />
12 {<br />
13 int i = 3;<br />
14 wh<strong>il</strong>e (i--)<br />
15 f(i);<br />
16 }<br />
La traccia di una esecuzione del programma d’esempio sarebbe la seguente:<br />
(open, 3), (write, 7), (close, 8), (open, 3), (read, 5),<br />
(close, 8), (open, 3), (write, 7), (close, 8)