Ingineria inversă
Ingineria inversă
Ingineria inversă
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