Traducteur de byte code Java en byte code.Net Sylvain Pasche EPFL 2003.

  • Published on
    03-Apr-2015

  • View
    103

  • Download
    1

Transcript

  • Page 1
  • Traducteur de byte code Java en byte code.Net Sylvain Pasche EPFL 2003
  • Page 2
  • Introduction But: Raliser un traducteur de byte code Java en byte code.Net Fichiers.class JavaFichiers.exe.Net
  • Page 3
  • Droulement 1. Partie thorique: algorithmes de traduction 2. Partie implmentation: ralisation du traducteur
  • Page 4
  • Java.Net Sun en 1995 Format intermdiaire: byte code Java Machine pile Byte code conu pour le langage Java 8 types Microsoft en 2001 Format intermdiaire: byte code.Net Machine pile Byte code conu pour tre indpendant du langage (C#, J#, VB.net, ). 17 types Les deux plates-formes
  • Page 5
  • Partie thorique: approche Top down Paquetages en assemblages Classes Mthodes et champs Instructions
  • Page 6
  • Java.Net Classes organises en paquetages Classes organises en assemblages Traduction des paquetages package org.epfl; class Foo class Bar Assembly MyAssembly class Foo class Bar org.epfl MyAssembly
  • Page 7
  • Traduction des classes Cas gnral: gardent le mme nom Cas spciaux: Objets auxiliaires pour rediriger les mthodes java.lang.ObjectSystem.Object java.lang.StringSystem.String java.lang.String trim() JavaStringWrapper trim() java.lang.Long
  • Page 8
  • Traduction des instructions Algorithme gnral: traduction locale On peut catgoriser les instructions en deux classes: 1. Triviales: traduction locale directe 2. non triviales iadd, ladd add iinc ??? (pas dquivalent)
  • Page 9
  • Instructions traduction triviale arithmtiques *add, *sub, *mul, *div, *rem, conversion i2l, i2f,... comparaison *cmpg, *cmpg autres nop, monitorenter, monitorexit, exemple: traduction de imul: imul mul
  • Page 10
  • Instructions non triviales Instructions daccs aux paramtres et variables locales Exceptions Aperu des autres algorithmes
  • Page 11
  • Instructions daccs aux paramtres et variables locales Java.Net paramtres + variables localesparamtres variables locales 0 int double 1 floatString 2 float int char paramtre variables locales 0 int 0 float 1 String 1 double instructions: *load, *store instructions: ldarg, starg instructions: ldloc, stloc
  • Page 12
  • Paramtres et variables locales: algorithme Les slots Java ne sont pas typs, alors quils le sont en.Net Java mmes slots pour arguments et variables locales 1. Analyse des types stocks dans les slots 2. Allocation des variables locales et arguments.Net 3. Lors de la production du code, slectionner la bonne instruction (variable loc / argument) + le slot.Net
  • Page 13
  • Exceptions Un bloc JavaUn bloc.Net try start = 0x12 try end = 0x21 catch start = 0x23 catch end = ??? finally start = 0x34 finally end = ??? try start = 0x14 try end = 0x20 catch start = 0x22 catch end = 0x27 finally start = 0x30 finally end = 0x40 Java contient moins dinformation sur les blocs dexception. Il faut retrouver cette information
  • Page 14
  • Reconstituer les blocs: tche difficile Java pose trs peu de contraintes sur lemplacement des blocs Lalgorithme gnral trs complexe Simplification: blocs dans lordre try start try end catch start catch end finally start finally end facile calculer plus difficile trouver
  • Page 15
  • Algorithme de reconstitution des blocs Algorithme bas sur des exprimentations Principe: analyser les sauts pour en dduire la fin des blocs Marche bien dans la plupart des cas, moins bien dans les situations complexes (imbrications, )
  • Page 16
  • Autres algorithmes Pas de temps pour tous les voir: instructions de cration dobjets instructions dappel de mthodes instructions daccs aux champs instructions de branchement instructions de manipulation de la pile
  • Page 17
  • Scnario 1 Scnario 2 Partie 2: implmentation Java.Net Librairie lecture bytecode Java JikesBt gnu.bytecode BCEL librairie criture bytecode.Net MsilSystem.Refle- ction.Emit
  • Page 18
  • Librairie BCEL Byte Code Engineering Library Offre beaucoup de fonctionnalits avances Un vrificateur, mais ne permet pas daccder aux informations des types: Modifications de la librairie pour permettre d extraire ces informations
  • Page 19
  • Libraire Msil (1) Dveloppe par Laurent Rolaz au LAMP Sinspire de System.Reflection.Emit, mais crite en Java Petit sous ensemble des fonctionnalits de System.Reflection.Emit Gnre un fichier texte dinstructions qui doit ensuite tre assembl
  • Page 20
  • Librairie Msil (2) Librairie peu teste: Corrections des bugs faire Fonctionnalits limites: Ajout de nouvelles fonctionnalits pour le traducteur
  • Page 21
  • Le traducteur: Java2il http://java2il.sourceforge.net Implmente tous les algorithmes partie thorique Gre plusieurs formats en entre (.jar,.class, ) Interface ligne de commande simple et intuitive Fichiers de configuration pour grer les paramtres
  • Page 22
  • Interface ligne de commande java2il --assembly Hello --entrypoint Main Hello.class java.util.Date myjar.jar (facultatif) nom de lassemblage traduit (facultatif) nom de la classe du point dentre nom des classes traduire: Fichiers.class Fichiers.jar nom de classes Java
  • Page 23
  • Fichiers de configuration Correspondance paquetages Java et assemblages.Net spcifie pour chaque paquetage Java le nom de lassemblage.Net traduit Options de traduction: Niveau de dboguage Quels sont les objets qui redirigent les mthodes de java.lang.Object et java.lang.String
  • Page 24
  • Limitations Les limitations sont celles poses par les algorithmes La traduction des exceptions pose parfois problme ne parvient pas trouver les bornes des blocs dexception dans les cas compliqus (imbrications multiples) La traduction de certaines instructions pourrait tre optimise
  • Page 25
  • Conclusion Succs ! le but est atteint Tests concluants effectus sur le compilateur Misc La traduction peut paratre simple, mais des problme complexes se posent
  • Page 26
  • Questions ?
  • Page 27
  • Traduction des classes: cas de java.lang.Object et java.lang.String java.lang.ObjectSystem.Object Scnario choisi: java.lang.StringSystem.String java.lang.String trim() JavaStringWrapper trim() Il faudra rediriger les mthodes appeles sur ces objets avec des classes auxiliaires:
  • Page 28
  • Traduction des classes: cas de java.lang.Object java.lang.Object System.Object java.lang.Object System.Object ? scnario 1 scnario 2
  • Page 29
  • Traduction des mthodes Cas gnral: mme nom Si on traduit java.lang.String en System.String, il faut rediriger certaines mthodes. De mme pour java.lang.Object Pour se faire, on utilise des classes auxiliaire: java.lang.String trim() JavaStringWrapper trim()
  • Page 30
  • Java.Net new java.util.Date dup invokespecial java.util.Date. newobj java.util.Date Instructions de cration dobjets Lalgorithme simpliste consiste ignorer les instructions new et dup, et traduire inovkespecial en newobj
  • Page 31
  • Cas particuliers: les objets dans les slots Java ldstr a_string astore 1 new java.util.Date astore 1 Faut-il utiliser deux slots.Net ? 1 java.lang.String 2 java.util.Date
  • Page 32
  • Instructions de manipulation de la pile Java comporte beaucoup dinstructions de manipulation de la pile, absente en.Net pop, dup, pop2, dup_x1, dup_x2, dup2, dup2_x1, dup2_x2, swap Comment les traduire ? Une solution est dutiliser les variables locales, et faire des empilements et dpilements
  • Page 33
  • Instructions de manipulation de la pile: exemple (1) instruction dup_x2 Il faut dabord analyser quelle forme considrer 11/21 11 2 11 11 haut de la pile bas de la pile Forme 1 Forme 2
  • Page 34
  • Instructions de manipulation de la pile: exemple (2) instruction dup_x2 (forme 1) 1111111 haut de la pile bas de la pile Forme 1 1)stockage variables locales stloc 1 stloc 2 stloc 3 2) dpilement sur la pile ldloc 1 ldloc 3 ldloc 2 ldloc 1 tat des variables locales: 1 2 3
  • Page 35
  • Autres algorithmes Pas de temps pour tous les voir: instructions de cration dobjets Java: 2 phases: new et appel mthode initialisation.Net : linstruction newobj initialise lobjet en une tape instructions dappel de mthodes invoke* peuvent se traduire diffremment selon le contexte instructions daccs au champs smantique diffrente entre les deux plates-formes instructions de branchement la traduction dpend de si lon se trouve dans une exception ou non instructions de manipulation de la pile Java possde beaucoup plus dinstructions que.Net
  • Page 36
  • Les exceptions de la machine virtuelle Que se passe-t-il lors dune division par zro ? Java: lance java.lang.ArithmeticException.Net: lance System.DivideByZeroException Une simple traduction du bloc catch ne va pas intercepter lexception.Net Algorithme: utiliser les blocs filter de.Net pour reconstruire une exception Java
  • Page 37
  • Scnario 1 Java.Net lecture bc. Java criture bc..Net System.Reflection.Emit Dsavantage: il faut implmenter une librairie de lecture de bytecode Java Avantage: System.Reflection.Emit permet accs informations des classes.Net
  • Page 38
  • Scnario 2 Java.Net lecture bt. Java BCEL criture bt..Net Msil Dsavantage: pas daccs aux informations des classes.Net, Msil non mature Avantage: pas de librairie implmenter partir de rien Assembleur bytecode.Net

Recommended

View more >