• Non ci sono risultati.

6.1 Verifica verbosa: JavaPurse, method number 8 Risultati ottenuti 6

N/A
N/A
Protected

Academic year: 2021

Condividi "6.1 Verifica verbosa: JavaPurse, method number 8 Risultati ottenuti 6"

Copied!
13
0
0

Testo completo

(1)

C A P I T O L O

6

Risultati ottenuti

Vengono proposti ora due dump di una verifica verbosa (per comodità sono state

riportate solo le parti “interessanti” dell’output, cioè i punti in cui si devono

applicare le regole enunciate nel capitolo 3 della tesi) ed una tabella riepilogativa di

verifiche effettuate con il tool implementato; nella tabella viene visualizzata la

dimensione massima del dizionario per il verificatore standard, cioè il numero di

massimo di frames di targets differenti, e la dimensione massima per il verificatore

basato sull’ipd, con e senza frames duplicati.

6.1 Verifica

verbosa:

JavaPurse, method number 8

Caratteristica: tableswitch che falsa la "reale" dimensione del dizionario. package com.sun.javacard.samples.JavaPurse.JavaPurse

method number 8 ['private void processCompleteUpdate(javacard.framework.APDU apdu)'] Ipd:

97: tableswitch[170](67) -> {278, 164, 180, 278, ...} IPD = 284: aload_0[42](1) Instruction list: .... 97: tableswitch[170](67) -> {278, 164, 180, 278, ...} 164: aload_0[42](1) 165: aload_1[43](1) 166: aload_0[42](1) 167: getfield[180](3) 22 170: invokespecial[183](3) 62 173: aload_0[42](1) 174: invokespecial[183](3) 63 177: goto[167](3) -> 284: aload_0 180: aload_0[42](1) 181: aload_1[43](1) 182: aload_0[42](1) 183: getfield[180](3) 23 186: invokespecial[183](3) 62 189: goto[167](3) -> 284: aload_0 192: aload_0[42](1) 193: aload_1[43](1) 194: aload_0[42](1) 195: getfield[180](3) 5 198: invokespecial[183](3) 64 201: goto[167](3) -> 284: aload_0

(2)

CAPITOLO 6:RISULTATI OTTENUTI 204: aload_0[42](1) 205: aload_1[43](1) 206: aload_0[42](1) 207: getfield[180](3) 4 210: invokespecial[183](3) 64 213: goto[167](3) -> 284: aload_0 216: aload_0[42](1) 217: aload_1[43](1) 218: iconst_2[5](1) 219: invokespecial[183](3) 65 222: goto[167](3) -> 284: aload_0 225: aload_0[42](1) 226: aload_1[43](1) 227: iconst_4[7](1) 228: invokespecial[183](3) 65 231: goto[167](3) -> 284: aload_0 234: aload_0[42](1) 235: aload_1[43](1) 236: invokespecial[183](3) 66 239: goto[167](3) -> 284: aload_0 242: aload_0[42](1) 243: aload_1[43](1) 244: iconst_0[3](1) 245: invokespecial[183](3) 67 248: goto[167](3) -> 284: aload_0 251: aload_0[42](1) 252: aload_1[43](1) 253: iconst_1[4](1) 254: invokespecial[183](3) 67 257: goto[167](3) -> 284: aload_0 260: aload_0[42](1) 261: aload_1[43](1) 262: iconst_2[5](1) 263: invokespecial[183](3) 67 266: goto[167](3) -> 284: aload_0 269: aload_0[42](1) 270: aload_1[43](1) 271: iconst_3[6](1) 272: invokespecial[183](3) 67 275: goto[167](3) -> 284: aload_0 278: sipush[17](3) 27265 281: invokestatic[184](3) 39 284: aload_0[42](1) 285: getfield[180](3) 19 288: iconst_0[3](1) 289: aload_0[42](1) 290: getfield[180](3) 19 293: arraylength[190](1) 294: i2s[147](1) 295: iconst_0[3](1) 296: invokestatic[184](3) 54 299: pop[87](1) 300: aload_0[42](1) 301: getfield[180](3) 19 304: iconst_0[3](1) 305: aload_2[44](1) 306: iconst_0[3](1) 307: bipush[16](2) 8 309: invokestatic[184](3) 48 312: pop[87](1) 313: aload_1[43](1) 314: iconst_0[3](1) 315: bipush[16](2) 8 317: invokevirtual[182](3) 49 320: aload_0[42](1) 321: getfield[180](3) 16 324: iconst_1[4](1) 325: iconst_0[3](1)

(3)

CAPITOLO 6:RISULTATI OTTENUTI 326: bastore[84](1) 327: return[177](1) .... Verifica verbosa: ... ...

Istruzione eseguita: 97: tableswitch[170](67) -> {278, 164, 180, 278, ...} apertura salto condizionato: aggiorno dizionario

/***** inizio aggiornamento dizionario ****************/ Aggiunta una entry al dizionario: 278: sipush[17](3) 27265 Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:1 Dimensione reale del dizionario:1

Aggiunta una entry al dizionario: 180: aload_0[42](1) Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:2 Dimensione reale del dizionario:1

Aggiunta una entry al dizionario: 192: aload_0[42](1) Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:3 Dimensione reale del dizionario:1

Aggiunta una entry al dizionario: 204: aload_0[42](1) Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:4 Dimensione reale del dizionario:1

(4)

CAPITOLO 6:RISULTATI OTTENUTI

Aggiunta una entry al dizionario: 216: aload_0[42](1) Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:5 Dimensione reale del dizionario:1

Aggiunta una entry al dizionario: 225: aload_0[42](1) Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:6 Dimensione reale del dizionario:1

Aggiunta una entry al dizionario: 234: aload_0[42](1) Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:7 Dimensione reale del dizionario:1

Aggiunta una entry al dizionario: 242: aload_0[42](1) Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:8 Dimensione reale del dizionario:1

Aggiunta una entry al dizionario: 251: aload_0[42](1) Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:9 Dimensione reale del dizionario:1

Aggiunta una entry al dizionario: 260: aload_0[42](1) Frame:

(5)

CAPITOLO 6:RISULTATI OTTENUTI Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:10 Dimensione reale del dizionario:1

Aggiunta una entry al dizionario: 269: aload_0[42](1) Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:11 Dimensione reale del dizionario:1

/***** fine aggiornamento dizionario *****************/ Istruzione eseguita: 164: aload_0[42](1)

Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 1 MaxStack: 6.

com.sun.javacard.samples.JavaPurse.JavaPurse (Size: 1) ....

....

Istruzione eseguita: 177: goto[167](3) -> 284: aload_0 Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

/********************************************************************/ Aggiornata una entry del dizionario: 284: aload_0[42](1)

Dimensione apparente del dizionario:12 Dimensione reale del dizionario:1

Raggiunto ipd ma restano ancora rami da esaminare: esecuzione rimandata /********************************************************************/ ....

....

Istruzione eseguita: 278: sipush[17](3) 27265 Frame:

Local Variables:

0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU

(6)

CAPITOLO 6:RISULTATI OTTENUTI

2: byte[] 3: int 4: int OperandStack:

Slots used: 1 MaxStack: 6. int (Size: 1)

Istruzione eseguita: 281: invokestatic[184](3) 39 Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 0 MaxStack: 6.

/********************************************************************/ Aggiornata una entry del dizionario: 284: aload_0[42](1)

Dimensione apparente del dizionario:12 Dimensione reale del dizionario:1

Raggiunto ipd e tutti rami eseguiti: aggiorno currentInFrame Rimozione entries non necessarie:

[ 278: sipush[17](3) 27265, 180: aload_0[42](1), 192: aload_0[42](1), 204: aload_0[42](1), 216: aload_0[42](1), 225: aload_0[42](1), 234: aload_0[42](1), 242: aload_0[42](1), 251: aload_0[42](1), 260: aload_0[42](1), 269: aload_0[42](1), 284: aload_0[42](1) ] Dimensione apparente del dizionario:0

Dimensione reale del dizionario:0

/********************************************************************/ Istruzione eseguita: 284: aload_0[42](1)

Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: int 4: int OperandStack:

Slots used: 1 MaxStack: 6.

com.sun.javacard.samples.JavaPurse.JavaPurse (Size: 1) ....

(7)

CAPITOLO 6:RISULTATI OTTENUTI

6.2 Verifica

verbosa:

JavaPurse, method number 6

Caratteristica: blocchi sequenziali che consentono di rimuovere entries dal dizionario package com.sun.javacard.samples.JavaPurse.JavaPurse

method number 6 ['private void processCompleteTransaction(javacard.framework.APDU apdu)']

Ipds:

6: ifne[154](3) -> 15: aload_1 IPD = 15: aload_1[43](1) 25: if_icmpeq[159](3) -> 34: aload_2 IPD = 34: aload_2[44](1) Instruction list: .... 5: baload[51](1) 6: ifne[154](3) -> 15: aload_1 9: sipush[17](3) -28412 12: invokestatic[184](3) 39 15: aload_1[43](1) 16: invokevirtual[182](3) 34 19: astore_2[77](1) 20: aload_2[44](1) 21: iconst_4[7](1) 22: baload[51](1) 23: bipush[16](2) 13 25: if_icmpeq[159](3) -> 34: aload_2 28: sipush[17](3) 26368 31: invokestatic[184](3) 39 34: aload_2[44](1) .... Verifica verbosa: ... ...

Istruzione eseguita: 5: baload[51](1) Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: <unknown object> 3: <unknown object> 4: <unknown object> 5: <unknown object> 6: <unknown object> 7: <unknown object> 8: <unknown object> 9: <unknown object> 10: <unknown object> OperandStack:

Slots used: 1 MaxStack: 6. int (Size: 1)

Istruzione eseguita: 6: ifne[154](3) -> 15: aload_1 Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: <unknown object> 3: <unknown object> 4: <unknown object> 5: <unknown object> 6: <unknown object> 7: <unknown object> 8: <unknown object>

(8)

CAPITOLO 6:RISULTATI OTTENUTI

9: <unknown object> 10: <unknown object> OperandStack:

Slots used: 0 MaxStack: 6.

apertura salto condizionato: aggiorno dizionario

/***** inizio aggiornamento dizionario ****************/ Aggiunta una entry al dizionario: 15: aload_1[43](1) Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: <unknown object> 3: <unknown object> 4: <unknown object> 5: <unknown object> 6: <unknown object> 7: <unknown object> 8: <unknown object> 9: <unknown object> 10: <unknown object> OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:1 Dimensione reale del dizionario:1

/***** fine aggiornamento dizionario *****************/ Istruzione eseguita: 9: sipush[17](3) -28412

Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: <unknown object> 3: <unknown object> 4: <unknown object> 5: <unknown object> 6: <unknown object> 7: <unknown object> 8: <unknown object> 9: <unknown object> 10: <unknown object> OperandStack:

Slots used: 1 MaxStack: 6. int (Size: 1)

Istruzione eseguita: 12: invokestatic[184](3) 39 Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: <unknown object> 3: <unknown object> 4: <unknown object> 5: <unknown object> 6: <unknown object> 7: <unknown object> 8: <unknown object> 9: <unknown object> 10: <unknown object> OperandStack:

(9)

CAPITOLO 6:RISULTATI OTTENUTI

/*****************************************************************/ Aggiornata una entry del dizionario: 15: aload_1[43](1)

Dimensione apparente del dizionario:1 Dimensione reale del dizionario:1

Raggiunto ipd e tutti rami eseguiti: aggiorno currentInFrame Rimozione entries non necessarie:[ 15: aload_1[43](1)] Dimensione apparente del dizionario:0

Dimensione reale del dizionario:0

/*****************************************************************/ ...

...

Istruzione eseguita: 23: bipush[16](2) 13 Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: <unknown object> 4: <unknown object> 5: <unknown object> 6: <unknown object> 7: <unknown object> 8: <unknown object> 9: <unknown object> 10: <unknown object> OperandStack:

Slots used: 2 MaxStack: 6. int (Size: 1)

int (Size: 1)

Istruzione eseguita: 25: if_icmpeq[159](3) -> 34: aload_2 Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: <unknown object> 4: <unknown object> 5: <unknown object> 6: <unknown object> 7: <unknown object> 8: <unknown object> 9: <unknown object> 10: <unknown object> OperandStack:

Slots used: 0 MaxStack: 6.

apertura salto condizionato: aggiorno dizionario

/***** inizio aggiornamento dizionario ****************/ Aggiunta una entry al dizionario: 34: aload_2[44](1) Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: <unknown object> 4: <unknown object> 5: <unknown object> 6: <unknown object> 7: <unknown object> 8: <unknown object> 9: <unknown object> 10: <unknown object> OperandStack:

Slots used: 0 MaxStack: 6.

Dimensione apparente del dizionario:1 Dimensione reale del dizionario:1

(10)

CAPITOLO 6:RISULTATI OTTENUTI

/***** fine aggiornamento dizionario *****************/ Istruzione eseguita: 28: sipush[17](3) 26368

Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: <unknown object> 4: <unknown object> 5: <unknown object> 6: <unknown object> 7: <unknown object> 8: <unknown object> 9: <unknown object> 10: <unknown object> OperandStack:

Slots used: 1 MaxStack: 6. int (Size: 1)

Istruzione eseguita: 31: invokestatic[184](3) 39 Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: <unknown object> 4: <unknown object> 5: <unknown object> 6: <unknown object> 7: <unknown object> 8: <unknown object> 9: <unknown object> 10: <unknown object> OperandStack:

Slots used: 0 MaxStack: 6.

/*****************************************************************/ Aggiornata una entry del dizionario: 34: aload_2[44](1)

Dimensione apparente del dizionario:1 Dimensione reale del dizionario:1

Raggiunto ipd e tutti rami eseguiti: aggiorno currentInFrame Rimozione entries non necessarie:[ 34: aload_2[44](1)] Dimensione apparente del dizionario:0

Dimensione reale del dizionario:0

/*****************************************************************/ Istruzione eseguita: 34: aload_2[44](1)

Frame: Local Variables: 0: com.sun.javacard.samples.JavaPurse.JavaPurse 1: javacard.framework.APDU 2: byte[] 3: <unknown object> 4: <unknown object> 5: <unknown object> 6: <unknown object> 7: <unknown object> 8: <unknown object> 9: <unknown object> 10: <unknown object> OperandStack:

Slots used: 1 MaxStack: 6. byte[] (Size: 1)

.... ....

(11)

CAPITOLO 6:RISULTATI OTTENUTI

6.3 Tabella sintetica dei risultati

Metodo Verificatore standard Verificatore basato sull’ipd Verificatore basato sull’ipd, senza frames duplicati nel dizionario com.sun.javacard.samples.JavaPurse.JavaPurse processInitializeTransaction(...) 4 1(25%) 1(25%) processCompleteTransaction(...) 12 3(25%) 1(9%) processInitializeUpdate(...) 4 2(50%) 1(25%) processCompleteUpdate(...) 16 12(75%) 1(7%) processVerifyPIN(...) 4 3(75%) 1(25%) checkTransactionValues(...) 5 4(80%) 2(40%) setIsPersonalized() 1 1(100%) 1(100%) updateParametersFile(...) 2 2(100%) 1(50%) processSelectFile(...) 5 4(80%) 2(40%) processReadRecord(...) 22 7(32%) 2(9%) updateLoyaltyProgram(...) 3 2(67%) 2(67%) com.sun.javacard.samples.wallet.Wallet process(...) 6 5(84%) 1(17%) credit(...) 6 2(34%) 1(17%) debit(...) 6 2(34%) 1(17%) getBalance(...) 1 1(100%) 1(100%)

(12)

CAPITOLO 6:RISULTATI OTTENUTI com.sun.javacard.samples.JavaLoyalty.JavaLoyalty grantPoints(...) 4 2(50%) 1(25%) getShareableInterfaceObject(...) 1 1(100%) 1(100%) com.sun.javacard.samples.SecureRMIDemo.SecurePurseImpl debit(...) 4 1(25%) 1(25%) credit(...) 4 1(25%) 1(25%) getBalance(...) 2 1(50%) 1(50%) setAccountNumber(...) 3 1(34%) 1(34%) getAccountNumber(...) 2 1(50%) 1(50%) com.sun.javacard.samples.SecureRMIDemo.MySecurityService isCommandSecure(...) 2 2(100%) 1(50%) isAuthenticated(...) 2 2(100%) 1(50%) checkAndRemoveChecksum(...) 5 3(60%) 1(20%) com.sun.javacard.samples.JavaPurse.ParametersFile addRecord(...) 1 1(100%) 1(100%) getRecord(...) 2 2(100%) 1(50%) findRecord(...) 5 4(80%) 2(40%) com.sun.javacard.samples.ChannelsDemo.ConnectionManager process(...) 5 4(80%) 1(20%) timeTick(...) 6 2(34%) 1(17%) setConnection(...) 5 2(40%) 1(20%)

(13)

CAPITOLO 6:RISULTATI OTTENUTI com.sun.javacard.samples.HelloWorld.HelloWorld process(...) 2 2(100%) 1(50%) com.sun.javacard.samples.ChannelsDemo.AccountAccessor process(...) 4 3(75%) 1(25%) debit(...) 3 2(67%) 1(34%) credit(...) 5 2(40%) 1(20%) getBalance(...) 1 1(100%) 1(100%) com.sun.javacard.samples.odSample.packageA.A setupTransient() 4 2(50%) 1(25%) verifyTransientDeselect() 5 4(80%) 2(20%) verifyTransientReset() 5 4(80%) 2(20%) analyzeRemoveTrees() 3 1(34%) 1(34%) analyzeTransientDeselectMem() 3 1(34%) 1(34%) analyzeTransientResetMem() 2 1(50%) 1(50%) analyzeRemoveAllAttributes() 3 1(34%) 1(34%) compareWithInitial() 1 1(100%) 1(100%) getShareableRef() 2 1(50%) 1(50%) process(...) 15 15(100%) 2(14%)

Riferimenti

Documenti correlati