La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Traducteur de byte code Java en byte code.Net Sylvain Pasche EPFL 2003."— Transcription de la présentation:

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

2 Introduction But: Réaliser un traducteur de byte code Java en byte code.Net Fichiers.class JavaFichiers.exe.Net

3 Déroulement 1. Partie théorique: algorithmes de traduction 2. Partie implémentation: réalisation du traducteur

4 Java.Net Sun en 1995 Format intermédiaire: byte code Java Machine à pile Byte code conçu pour le langage Java 8 types Microsoft en 2001 Format intermédiaire: byte code.Net Machine à pile Byte code conçu pour être indépendant du langage (C#, J#, VB.net, …). 17 types Les deux plates-formes

5 Partie théorique: approche « Top down » Paquetages en assemblages Classes Méthodes et champs Instructions

6 Java.Net Classes organisées en paquetages Classes organisées en assemblages Traduction des paquetages package org.epfl; class Foo class Bar Assembly MyAssembly class Foo class Bar org.epfl MyAssembly

7 Traduction des classes Cas général: gardent le même nom Cas spéciaux: Objets auxiliaires pour rediriger les méthodes java.lang.ObjectSystem.Object java.lang.StringSystem.String java.lang.String trim() JavaStringWrapper trim() java.lang.Long

8 Traduction des instructions Algorithme général: traduction locale On peut catégoriser les instructions en deux classes: 1. Triviales: traduction locale directe 2. non triviales iadd, ladd add iinc ??? (pas déquivalent)

9 Instructions à traduction triviale arithmétiques *add, *sub, *mul, *div, *rem, … conversion i2l, i2f,... comparaison *cmpg, *cmpg autres nop, monitorenter, monitorexit, … exemple: traduction de imul: imul mul

10 Instructions non triviales Instructions daccès aux paramètres et variables locales Exceptions Aperçu des autres algorithmes

11 Instructions daccès aux paramètres et variables locales Java.Net paramètres + variables localesparamètres variables locales 0 int double 1 floatString 2 float int char paramètre variables locales 0 int 0 float 1 String 1 double instructions: *load, *store instructions: ldarg, starg instructions: ldloc, stloc

12 Paramètres et variables locales: algorithme Les « slots » Java ne sont pas typés, alors quils le sont en.Net Java mêmes slots pour arguments et variables locales 1. Analyse des types stockés dans les slots 2. Allocation des variables locales et arguments.Net 3. Lors de la production du code, sélectionner la bonne instruction (variable loc / argument) + le slot.Net

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

14 Reconstituer les blocs: tâche difficile Java pose très peu de contraintes sur lemplacement des blocs Lalgorithme général très complexe Simplification: blocs dans lordre try start try end catch start catch end finally start finally end facile à calculer plus difficile à trouver

15 Algorithme de reconstitution des blocs Algorithme basé sur des expérimentations Principe: analyser les sauts pour en déduire la fin des blocs Marche bien dans la plupart des cas, moins bien dans les situations complexes (imbrications, …)

16 Autres algorithmes Pas de temps pour tous les voir: instructions de création dobjets instructions dappel de méthodes instructions daccès aux champs instructions de branchement instructions de manipulation de la pile

17 Scénario 1 Scénario 2 Partie 2: implémentation Java.Net Librairie lecture bytecode Java JikesBt gnu.bytecode BCEL Ø librairie écriture bytecode.Net MsilSystem.Refle- ction.Emit

18 Librairie BCEL « Byte Code Engineering Library » Offre beaucoup de fonctionnalités avancées Un vérificateur, mais ne permet pas daccéder aux informations des types: Modifications de la librairie pour permettre d extraire ces informations

19 Libraire Msil (1) Développée par Laurent Rolaz au LAMP Sinspire de System.Reflection.Emit, mais écrite en Java Petit sous ensemble des fonctionnalités de System.Reflection.Emit Génère un fichier texte dinstructions qui doit ensuite être assemblé

20 Librairie Msil (2) Librairie peu testée: Corrections des bugs à faire Fonctionnalités limitées: Ajout de nouvelles fonctionnalités pour le traducteur

21 Le traducteur: Java2il Implémente tous les algorithmes partie théorique Gère plusieurs formats en entrée (.jar,.class, …) Interface ligne de commande simple et intuitive Fichiers de configuration pour gérer les paramètres

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 dentrée nom des classes à traduire: Fichiers.class Fichiers.jar nom de classes Java

23 Fichiers de configuration Correspondance paquetages Java et assemblages.Net spécifie pour chaque paquetage Java le nom de lassemblage.Net traduit Options de traduction: Niveau de déboguage Quels sont les objets qui redirigent les méthodes de java.lang.Object et java.lang.String …

24 Limitations Les limitations sont celles posées par les algorithmes La traduction des exceptions pose parfois problème ne parvient pas à trouver les bornes des blocs dexception dans les cas compliqués (imbrications multiples) La traduction de certaines instructions pourrait être optimisée

25 Conclusion Succès ! le but est atteint Tests concluants effectués sur le compilateur Misc La traduction peut paraître simple, mais des problème complexes se posent

26 Questions ?

27 Traduction des classes: cas de java.lang.Object et java.lang.String java.lang.ObjectSystem.Object Scénario choisi: java.lang.StringSystem.String java.lang.String trim() JavaStringWrapper trim() Il faudra rediriger les méthodes appelées sur ces objets avec des classes auxiliaires:

28 Traduction des classes: cas de java.lang.Object java.lang.Object System.Object java.lang.Object System.Object ? scénario 1 scénario 2

29 Traduction des méthodes Cas général: même nom Si on traduit java.lang.String en System.String, il faut rediriger certaines méthodes. De même pour java.lang.Object Pour se faire, on utilise des classes auxiliaire: java.lang.String trim() JavaStringWrapper trim()

30 Java.Net new java.util.Date dup invokespecial java.util.Date. newobj java.util.Date Instructions de création dobjets Lalgorithme simpliste consiste à ignorer les instructions new et dup, et traduire inovkespecial en newobj

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

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 dépilements

33 Instructions de manipulation de la pile: exemple (1) instruction dup_x2 Il faut dabord analyser quelle forme considérer 11/ haut de la pile bas de la pile Forme 1 Forme 2

34 Instructions de manipulation de la pile: exemple (2) instruction dup_x2 (forme 1) haut de la pile bas de la pile Forme 1 1)stockage variables locales stloc 1 stloc 2 stloc 3 2) dépilement sur la pile ldloc 1 ldloc 3 ldloc 2 ldloc 1 état des variables locales: 1 2 3

35 Autres algorithmes Pas de temps pour tous les voir: instructions de création dobjets Java: 2 phases: new et appel méthode initialisation.Net : linstruction newobj initialise lobjet en une étape instructions dappel de méthodes invoke* peuvent se traduire différemment selon le contexte instructions daccès au champs sémantique différente entre les deux plates-formes instructions de branchement la traduction dépend de si lon se trouve dans une exception ou non instructions de manipulation de la pile Java possède beaucoup plus dinstructions que.Net

36 Les exceptions de la machine virtuelle Que se passe-t-il lors dune division par zéro ? 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

37 Scénario 1 Java.Net lecture bc. Java Ø écriture bc..Net System.Reflection.Emit Désavantage: il faut implémenter une librairie de lecture de bytecode Java Avantage: System.Reflection.Emit permet accès informations des classes.Net

38 Scénario 2 Java.Net lecture bt. Java BCEL écriture bt..Net Msil Désavantage: pas daccès aux informations des classes.Net, Msil non mature Avantage: pas de librairie à implémenter à partir de rien Assembleur bytecode.Net


Télécharger ppt "Traducteur de byte code Java en byte code.Net Sylvain Pasche EPFL 2003."

Présentations similaires


Annonces Google