28.04.2013 Views

Ingineria inversă

Ingineria inversă

Ingineria inversă

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Exemple: ingineria <strong>inversă</strong> a programelor Java<br />

Observăm că avem următoarea execuţie:<br />

i<br />

this<br />

i<br />

this.snows<br />

i<br />

Instrucţiunea if_icmplt 191 efectuează testul i < snows şi în caz afirmativ execuţia va continua de la<br />

offset-ul 191. Această întoarcere sugerează existenţa unei structuri de ciclare. Datorită lui goto de la<br />

188, este vorba de o structură while sau o structură for. Poate fi utilizată oricare dintre acestea.<br />

Deoarece este implicată o variabilă întreagă, incrementată cu 1 pe poziţia 257, înainte de test,<br />

preferăm structura for. Prin urmare, putem scrie:<br />

for(int i = 0; i < snows; i++){<br />

}<br />

Trecem mai departe la blocul de cod al acestei structuri.<br />

191 aload_0<br />

192 getfield snow/snowX [I<br />

195 iload_2<br />

196 aload_0<br />

197 getfield snow/rand Ljava/util/Random;<br />

Evoluţia stivei în timpul execuţiei instrucţiunilor de mai sus:<br />

this<br />

this.snowX<br />

i<br />

this.snowX<br />

200 invokevirtual java/util/Random/nextInt ()I<br />

203 aload_0<br />

204 getfield snow/dim Ljava/awt/Dimension;<br />

207 getfield java/awt/Dimension/width I<br />

210 iconst_2<br />

Evoluţia stivei în timpul execuţiei instrucţiunilor de mai sus:<br />

- 33 -<br />

this<br />

i<br />

this.snowX<br />

this.rand<br />

i<br />

this.snowX

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!