Traducteur de byte code Java en byte code .Net - PowerPoint PPT Presentation

1 / 38
About This Presentation
Title:

Traducteur de byte code Java en byte code .Net

Description:

Traducteur de byte code Java en byte code .Net Sylvain Pasche EPFL 2003 – PowerPoint PPT presentation

Number of Views:134
Avg rating:3.0/5.0
Slides: 39
Provided by: sypasche
Category:

less

Transcript and Presenter's Notes

Title: Traducteur de byte code Java en byte code .Net


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 Java
Fichiers .exe .Net
3
Déroulement
  1. Partie théorique algorithmes de traduction
  2. Partie implémentation réalisation du traducteur

4
Les deux plates-formes
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
5
Partie théorique approche  Top down 
  • Paquetages en assemblages
  • Classes
  • Méthodes et champs
  • Instructions

6
Traduction des paquetages
Java .Net
Classes organisées en paquetages Classes organisées en assemblages
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

java.lang.Long
java.lang.Long
  • Cas spéciaux
  • Objets auxiliaires pour rediriger les méthodes

java.lang.Object
System.Object
java.lang.String
System.String
java.lang.String trim()
JavaStringWrapper trim()
8
Traduction des instructions
  • Algorithme général traduction locale
  • On peut catégoriser les instructions en deux
    classes
  • Triviales traduction locale directe
  • 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 locales paramètres variables locales
paramètre
0
int
0
int
double
1
double
1
float
String
instructions ldarg, starg
variables locales
2
float
char
0
float
int
1
String
instructions load, store
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
  • Analyse des types stockés dans les slots
  • Allocation des variables locales et arguments
    .Net
  • Lors de la production du code, sélectionner la
    bonne instruction (variable loc / argument) le
    slot .Net

13
Exceptions
Un bloc Java Un 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
facile à calculer
catch start catch end
finally start finally end
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
Partie 2 implémentation
Java .Net
Librairie lecture bytecode Java JikesBt gnu.bytecode BCEL Ø
librairie écriture bytecode .Net Msil System.Refle-ction.Emit
Scénario 1
Scénario 2
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
  • http//java2il.sourceforge.net
  • 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
(facultatif) nom de lassemblage traduit
java2il --assembly Hello --entrypoint Main
Hello.class java.util.Date myjar.jar
nom des classes à traduire Fichiers
.class Fichiers .jar nom de classes Java
(facultatif) nom de la classe du point dentrée
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
Scénario choisi
java.lang.Object
System.Object
java.lang.String
System.String
Il faudra rediriger les méthodes appelées sur ces
objets avec des classes auxiliaires
java.lang.String trim()
JavaStringWrapper trim()
28
Traduction des classes cas de java.lang.Object
System.Object
scénario 1
?
java.lang.Object
System.Object
scénario 2
java.lang.Object
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
Instructions de création dobjets
Java .Net
new java.util.Date dup invokespecial java.util.Date.ltinitgt newobj java.util.Date
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

Forme 1
1
1
1
1
bas de la pile
1
1/2
1
haut de la pile
Forme 2
2
1
1
34
Instructions de manipulation de la pile exemple
(2)
  • instruction dup_x2 (forme 1)

Forme 1
bas de la pile
haut de la pile
1
1
1
1
1
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

écriture bc. .Net System.Reflection.Emit
lecture bc. Java Ø
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

Assembleur bytecode .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
Write a Comment
User Comments (0)
About PowerShow.com