´Vers l’interpretation abstraite de Jimple´Semantique standard et domaine abstraitPromoteur : B. LE CHARLIER´ ´Etendre le cadre d’interpretation`abstraite a Java´ ´ `References : These d’Isabelle Pollet, Towards a generic frame work for the abstract interpretation of JavaThe Java Language Specification Second EditionM. Van de Reyd & N. BaertsååPlan de la presentation´ Introduction Jimple´ Elaboration de la semantique´ standardexemple du formalisme utilise´- appel virtuel- implementation´ des regles` de returninterpreteur´ Jimple´ Elaboration du domaine abstrait- booleans- tableaux Conclusion` `- vers une extension de la these a JavaM. Van de Reyd & N. Baerts 1åååååååIntroduction - Jimple - Semantique´ standard - Domaine abstrait - ConclusionIntroduction Cadre theor´ ique pour l’analyse par interpretation´ abstraite de Java[These` d’Isabelle Pollet]concepts les plus importants de Javasyntaxe abstraite : LASbut de notre memoire´ : etendre´ le cadre theor´ ique a` Java tout entier Remplacer LAS par un langage plus etendu,´ Jimple.´redefinir la syntaxe de Jimple´ ` `adapter la semantique concrete a Jimplevalider la s´modifier le domaine abstrait la semantique´ abstraiteM. Van de Reyd & N. Baerts 2ååååIntroduction - Jimple - Semantique´ standard - Domaine abstrait - ConclusionJimple Jimple’ bytecode Java sans pile explicite´ ´semantique operationnelle’ celle du bytecode Java(cfr. spec. de la JVM)´ ´ ` ´developpe dans ...
å concepts les plus importants de Java å syntaxe abstraite : LAS
but denotrem´emoire:e´tendrelecadreth´eoriqueaJavatoutentier
• RemplacerLASparunlangageplus´etendu,Jimple. å red´enirlasyntaxedeJimple er a sem å adaptl´antiqueconcreteaJimple å validerlas´emantique å modier le domaine abstrait å modierlase´mantiqueabstraite
• Jimple ' bytecode Java sans pile explicite ´ å se´mantiqueoperationnelle ' celle du bytecode Java (cfr. spec. de la JVM) å d´eveloppe´danslecadreduprojetSootal’universite´McGill å ´elabor´edanslebutd’analyseretd’optimiserdubytecode ´ å communauted’utilisateursetdede´veloppeursactifs
• Outils : Java To Jimple Bytecode To Jimple ) cfr. Soot
• Lad´enitiond’unese´mantiquen´ecessiteunformalismeadapte´ å pasd’ambigu¨´et å permet de justier la correction de l’analyse å permetuneimpl´ementationpartraduction“directedelad´enition
• Etapedeformalisationdelase´mantique å nede´coulepasdirectementdesde´nitionsofcielles å adapterunese´mantique(celledeJava)aunautrelangage(Jimple) å processuslent,complique´etde´licat
˜ τ Nmethod Obtenir un MethTypeClass (signature de la me´ thode ainsi que la classe dans laquelleellesetrouver´eellement)delam´ethodeidentie´eparunesignature donne´epouruneclassedonn´eeentenantcomptedel’he´ritageetduconcept d’ overriding :
τ ˜ Nmethod : Nclass → Nclass 9 ( Nmethod × declTypeList ) 9 MethTypeClass dom ( τ ˜ Nmethod ) = dom ( τ Nmethod ) , dom ( τ ˜ Nmethod nclass 1 ) = C one ( nclass 1 ) , dom ( τ ˜ Nmethod nclass 1 nclass 2 ) = dom ( τ Nmethod nclass 1 ) , ∀ nclass 2 ∈ dom ( τ ˜ Nmethod nclass 2 ) , if s ∈ dom ( τ Nmethod nclass 2 ) ∧ Overrides ( s, nclass 2 , nclass 1 ) then τ ˜ Nmethod nclass 1 nclass 2 s = τ Nmethod nclass 2 s else if nclass 2 ∈ dom ( π ) then τ ˜ Nmethod nclass 1 nclass 2 s = τ ˜ Nmethod nclass 1 π ( nclass 2 ) s
h lab , S, d i v − i − rt − ua − li − nv − o − k − e − nv − ar − . − < − nc − la − ss −− : t − yp − e − R − es − ul − t − nm − e − th − o − d − ( [ − de − cl − Ty − p − eL − is − t ] − ) > − ( [ − n − pa − r − am − L − is − t ] ) → ; h lab 0 , S 0 , d 0 i p 5 ( d ) = false V al ( nvar ) d 6 = null v @ this = V al ( nvar ) d v ∗ = V alList ( nparamList ) d T ype ( v @ this ) d = nclass 2 ∈ Nclass methTypeClass = τ ˜ Nmethod nclass 2 nclass ( nmethod , declTypeList ) d 0 = S tart J methTypeClass K ( v s , v ∗ ) d @ thi l S a 0 b 0 == S in + it (( nmeextth ( lTaybp ) e , C p l 1 a ( s d s )))
h lab, S, d i re − tu − rn h lab’, S’, d’ i − → public void makeOneStep( JReturnStmt stmt) { S 0 + ( lab’ , e 0 ) Object el = ( Object ) s.pop() ; dS ==( e, s, ste , ic , em ) StackElementTwo setw = ( StackElementTwo ) el ; if (el instanceof StackElementTwo ) { d e 0 m ==( f e 0 a , ls s, este , ic , em ) l = setw.getLabel() ; d.setEnvironment(setw.getEnvironment()) ; } Return avec assignation else { StackElementThree setr = ( StackElementThree ) el ; h l b, S, d i return immedi − ate → h lab’, S’, d i l = setr.getLabel() ; a −−−−−−−− Value immediate = stmt.getOp() ; Value val = d.val(immediate) ; 0 d.setEnvironment(setr.getEnvironment()) ; dS ==( Se 0 + ( tlea , bi’c ,,e e , mle ) ftExpr ) d = d.assign(setr.getLeftExpr(), val) ; , s, s } em = false } d 0 = ( e 0 , s, gsnt ( el , eifct , Eexmpr ) , v ) d 0 dv 00 == VA als ( siimmediate ) d
• Impl´ementation=traductionaussidirectequepossibledelad´ition e n (premiereversion)delasemantiquedeJimple ´ å interpre´ teur non complet
• Phase de validation : å comparaisonentrelesre´sultatsd’exe´cutiondeprogrammesJava et de leur traduction en Jimple å difcult´eimportante:concevoirdesjeuxdetests“sufsants - non complet ⇒ e´laborationdestestsparnous-meˆme -destestssurdesprogrammesre´elsauraient´et´eint´eressants