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 />
()Ljava/awt/Dimension;, adică nu are parametri şi returnează o referinţă la un obiect Dimension. Prin<br />
urmare vom încărca în stiva noastră abstractă acest obiect, reprezentat prin codul this.size().<br />
Instrucţiunea putfield generează cod sursă, deci obţinem:<br />
this.dim = this.size();<br />
instrucţiune echivalentă cu<br />
dim = size();<br />
19 aload_0<br />
20 aload_0<br />
21 aload_0<br />
22 getfield snow/dim Ljava/awt/Dimension;<br />
25 getfield java/awt/Dimension/width I<br />
28 aload_0<br />
29 getfield snow/dim Ljava/awt/Dimension;<br />
32 getfield java/awt/Dimension/height I<br />
35 invokevirtual java/awt/Component/createImage (II)Ljava/awt/Image;<br />
38 putfield snow/offScrn Ljava/awt/Image;<br />
Evoluţia stivei în timpul execuţiei instrucţiunilor de mai sus este:<br />
this<br />
this<br />
this.dim.width<br />
this<br />
this<br />
this<br />
this<br />
this.dim<br />
this.dim.width<br />
this<br />
this<br />
this<br />
this<br />
this<br />
this.dim.height<br />
this.dim.width<br />
this<br />
this<br />
this.createImage(this.dim.width, this.dim.height)<br />
this<br />
this.dim<br />
this<br />
this<br />
this.dim.width<br />
Instrucţiunea getfield încarcă în stivă valoarea unui atribut; în cazul decompilării vom încărca în stivă<br />
numele atributului. De exemplu, instrucţiunea getfield de la offset-ul 25 trebuie să găsească în stivă<br />
referinţa la un obiect de tip Dimension, referinţă folosită pentru a obţine atributul width din acest<br />
obiect. Instrucţiunea invokevirtual de la offset-ul 35 apelează metoda createImage din obiectul this,<br />
identificată la nivel superior, în clasa Component, metodă care are 2 parametri de tipul int. Deci<br />
- 25 -<br />
this<br />
this