Orange Labs MAPS/DVC 2 avenue Pierre Marzin Lannion. Sous la responsabilité de : Pierre Crégut, Orange Labs Olivier Barais, Istic

Dimension: px
Commencer à balayer dès la page:

Download "Orange Labs MAPS/DVC 2 avenue Pierre Marzin 22307 Lannion. Sous la responsabilité de : Pierre Crégut, Orange Labs Olivier Barais, Istic"

Transcription

1 Rapport de stage Orange Labs MAPS/DVC 2 avenue Pierre Marzin Lannion Master Informatique (2e année) Julien Névo Sous la responsabilité de : Pierre Crégut, Orange Labs Olivier Barais, Istic Adaptation de la bibliothèque ASM pour Dalvik Stage e ectué du 7 mars au 6 septembre 2011 à Orange Labs, Lannion. Soutenance à Rennes le 29 août istic-contact@univ-rennes1.fr istic-stages-info@univ-rennes1.fr istic-stages-elec@univ-rennes1.fr ISTIC - UFR Informatique et Électronique Université de Rennes 1, Campus de Beaulieu 263, avenue Général Leclerc CS 74205, Rennes CEDEX, France

2 Résumé Mon stage en entreprise s'est déroulé du 7 mars au 6 septembre 2011 à Orange Labs à Lannion. Mon travail a consisté à adapter au bytecode Android la bibliothèque ASM, dont le but est de manipuler du bytecode Java. Cette nouvelle bibliothèque est nommée AsmDex. Bien que la plate-forme Android soit également basée sur Java, le bytecode de la machine virtuelle qu'elle utilise a été entièrement repensé. Malgré cette diérence, il me fallait rester au plus près des interfaces proposées par ASM, an d'une part que les développeurs connaissant déjà ASM puissent trouver facilement leurs marques, mais surtout an que les programmes utilisant ASM aient le moins de modications possible à subir pour utiliser AsmDex. Les deux axes principaux de la bibliothèque ont été adaptés : le premier permet la lecture et production du bytecode de manière linéaire, tandis que l'autre le fait à la manière d'un arbre. ASM dispose de plusieurs outils annexes, nous étudierons celui qui a été adapté dans la nouvelle bibliothèque. Abstract My internship started on 7 March and ended on 6 September of 2011 at Orange Labs in Lannion. My work consisted in adapting the library called ASM to the Android bytecode. ASM allows to manipulate the Java bytecode. The new library is called AsmDex. Although the Android platform is also based on Java, the bytecode its virtual machine uses has been fully reorganised. However, in spite of this dierence, I had to stay as close as possible to the original interface so that developpers experienced with ASM could easily switch to AsmDex, but mostly for the programs using ASM not to need modications when working with AsmDex. The two main axis of the library have been adapted : the rst allows the reading and the production of bytecode in a linear way, whereas the other allows to do it as a random, tree-based access. ASM provides several tools and we'll study the one I adapted to the new library.

3 Remerciements Je tiens à remercier M. Yves-Marie Quémener pour m'avoir accepté au sein de son équipe. Je remercie également M. Pierre Crégut pour son aide technique, pour avoir pris le temps de répondre pertinemment à toutes mes questions, mais aussi pour la relecture et les corrections de ce rapport. Enn, je remercie l'équipe DVC pour son accueil.

4 TABLE DES MATIÈRES Table des matières I Introduction 1 II Présentation de l'entreprise 2 1 L'entreprise Le groupe France Télécom Orange Labs Activité Organisation Le laboratoire Devices III Présentation de ASM 4 1 Présentation générale 4 2 La Core API Génération d'une classe Génération de code à partir d'un chier compilé existant Exemple d'utilisation de ltre La Tree API Génération d'une classe Génération de code à partir d'un chier compilé Exemple de transformation Les outils annexes 12 IV Présentation de Dalvik 13 1 Présentation de la machine virtuelle Dalvik Contexte de Dalvik : Android Architecture Les instructions Comparaison entre le bytecode de Dalvik et de Java Le format dex Présentation Compilation d'un chier.dex Les diérents éléments à encoder Le Constant Pool Les descripteurs La structure d'un chier.dex Ordonnancement, alignement et unicité Les chiers.odex Les chiers.apk Génération d'un chier.apk i

5 TABLE DES MATIÈRES 4 Comparaison entre la JVM et Dalvik 22 V Présentation de AsmDex 23 1 Présentation générale Changements par rapport à ASM Réutilisation de l'existant Adaptation de la Core API Lecture Écriture Adaptation de la Tree API 31 4 Création de l'outil AsmDexier Présentation de AsmDexier Implémentation Tests Le test de l'applicationreader Le test de l'applicationwriter Le test des Adapter Le test de l'asmdexifier Performances Comparaison entre les Reader Comparaison entre les Writer Comparaison entre le Reader et le Writer d'asm et d'asmdex Core API vs Tree API Utilisation du court-circuit Conclusion sur les performances L'avenir d'asmdex 36 VI Conclusion 37 VII Annexes 38 1 Patron de conception Visiteur 38 2 Exemple d'utilisation de AsmDexier 38 3 Diagramme de classes de ASM 41 4 Organisation du test de l'applicationreader 42 ii

6 Première partie Introduction Mon travail au cours de ce stage a consisté à adapter la bibliothèque ASM pour le système d'exploitation Android. ASM est à l'origine prévue pour manipuler du bytecode Java. Il existe déjà plusieurs bibliothèques similaires, mais ASM dispose de nombreux atouts, comme sa rapidité, sa faible consommation en mémoire et sa simplicité d'utilisation. Orange Labs souhaite pouvoir manipuler le bytecode Android de leurs applications de manière ecace. L'entreprise a logiquement porté son choix sur une adaptation d'asm pour le bytecode de Dalvik, la machine virtuelle des appareils utilisant Android. La nouvelle bibliothèque, baptisée AsmDex, devra réutiliser les mêmes interfaces que la bibliothèque dont elle est issue et si possible en garder tous les avantages. On veillera également à réutiliser son code au maximum. Je vous présenterai d'abord ASM, à quoi la bibliothèque peut servir, son architecture et comment l'utiliser. Ensuite, après une brève présentation du système d'exploitation Android, je vous présenterai la machine virtuelle Dalvik et la manière dont elle stocke et gère ses données. Nous étudierons alors le format dex qui regroupe tout le bytecode que la machine virtuelle devra exécuter. Puis nous étudierons en détail AsmDex, la bibliothèque que j'ai développée, sous ses deux aspects principaux : d'une part, la génération de bytecode de manière linéaire, d'autre part grâce à un parcours d'arbre. Je parlerai des principales dicultés techniques que j'ai rencontrées, des diérentes solutions envisagées et de celle que j'ai nalement choisie. Une dernière partie concernera AsmDexier, l'un des outils dont dispose ASM et qui est le seul qu'orange Labs avait besoin de retrouver dans AsmDex. Enn, je vous parlerai de l'élaboration des tests de notre nouvelle bibliothèque et établirai une comparaison entre ses performances et celles d'asm. 1

7 2 ORANGE LABS Deuxième partie Présentation de l'entreprise 1 L'entreprise 1.1 Le groupe France Télécom Historique du groupe France Télécom est l'opérateur historique en France. Descendant des P&T puis des PTT, l'entreprise se sépare de l'état en 1990 tout en restant nationalisée. Il faut attendre 1996 pour que France Télécom devienne une société anonyme. En 1997 une partie du capital de France Télécom est ouverte aux investisseurs et depuis 2004, l'état n'est plus actionnaire majoritaire. France Télécom est devenue une entreprise privée compétitive et leader sur ses principaux segments de marché, autour d'orange, la marque phare de France Télécom. Fig. 1 Implantation de France Télécom dans le monde Activités du groupe France Télécom est présent dans 32 pays et territoires, emploie près de salariés et comptabilise 216 millions de clients dans le monde au 31 mars Le chire d'aaires réalisé au premier trimestre 2011 s'élève à 11,2 milliards d'euros. Orange est l'un des principaux opérateurs européens du mobile et l'accès internet ADSL et l'un des leaders mondiaux des services de télécommunications aux entreprises multinationales, sous la marque Orange Business Services. 2 Orange Labs 2.1 Activité Orange Labs est le moteur de l'innovation du groupe France Télécom et de ses liales, en France et à l'étranger. Ses laboratoires sont à l'origine d'environ 80% des produits et services commercialisés par le Groupe. Avec ses ingénieurs, scientiques et chercheurs, ses implantations sur 4 continents et des investissements importants (900 millions d'euros chaque année), Orange Labs joue un rôle moteur dans la croissance du groupe France Télécom, avec pour missions principales de développer des produits et services, de dégager de nouvelles sources de croissance et d'imaginer les solutions du futur. Ainsi, tous les ans plus de 500 inventions sont brevetées, soit un total de plus de 8300 brevets déposés. 2

8 2.2 Organisation 2.2 Organisation Sous la responsabilité de Marie-Noëlle Jégo-Laveissière, Orange Labs se compose de 6 centres de recherche et développement (CRD) localisés majoritairement en France : Issy-les-Moulineaux, Lannion, Grenoble, Caen, Rennes et Sophia Antipolis. J'ai intégré le CRD Middleware et plate-formes avancées (MAPS). Ce CRD est dirigé par Nadine Foulon-Belkacémi. Il a pour mission de faire émerger des concepts innovants dans le domaine des plate-formes de services Orange. Il contribue aussi à la spécication et au développement technique des nouveaux produits du groupe. MAPS se concentre tout particulièrement sur le masquage de la complexité technologique dans les usages mobiles, multimédia et audiovisuels. Le but est d'enrichir l'expérience utilisateur avec simplicité et en lui garantissant un service de qualité et sécurisé. Fig. 2 Organisation du Centre de Recherche et Développement MAPS 2.3 Le laboratoire Devices J'ai été alié au laboratoire Devices (DVC), dont le but est de développer des applications sur mobiles. Une centaine de personnes en font parti, réparties dans divers laboratoires répartis en France (Lannion, Rennes, Caen, Paris) mais aussi à l'étranger (Angleterre, Chine, Pologne, République dominicaine). Le laboratoire se consacrait à l'origine aux mobiles équipés des systèmes d'exploitation Symbian, Windows Mobile et utilisant l'api 1 Java MIDP. Cependant, l'arrivée des iphones et des systèmes Android changea l'orientation de DVC. Les travaux du laboratoire concernent également la sécurité et la normalisation de la téléphonie mobile. 1 API : Interface de programmation (Application Programming Interface). 3

9 1 PRÉSENTATION GÉNÉRALE Troisième partie Présentation de ASM 1 Présentation générale ASM 2 est une bibliothèque développée en Java par France Télécom et l'inria à Grenoble, et diusée par ObjectWeb, un consortium visant à créer des applications middleware en open-source. ASM permet la décompilation, la modication et la recomposition de classes binaires Java grâce à une API simple qui parcourt les données compilées. Une seconde API, aposée à la première, permet le parcours en arbre. ASM peut être utilisée à de nombreuses ns : ˆ Analyser un programme an de le déboguer ou vérier son comportement. ˆ Générer du code, partiellement ou non. ˆ Obfusquer un programme. ˆ Faire du reverse-engineering. ˆ Faire de la programmation orienté aspect, en ouvrant une classe et en ajoutant du code avant, après certaines méthodes, ou appel de méthodes. Il existe déjà quelques outils permettant de manipuler du bytecode Java, notamment BCEL et Javassist. Cependant c'est sur ASM qu'orange Labs a porté son intérêt : ˆ ASM dispose d'une API simple, prend peu de mémoire avec l'api de base. ˆ BCEL est trois fois plus lent qu'asm et l'api est complexe. ˆ Javassist est lui aussi plus lent qu'asm et dispose d'un mode source qui rend la manipulation du bytecode très aisée, mais très gourmande en mémoire. ˆ Enn, ASM traite Java 6 dans son intégralité, notamment au niveau de la généricité et des annotations. Le laboratoire DVC auquel j'ai été alié souhaiterait manipuler le bytecode d'applications compilées an : ˆ d'explorer les programmes utilisés par certaines applications que DVC développe en sous-traitance mais dont il ne dispose pas des sources, à des ns de débogages. ˆ de tester et améliorer la sécurité de ces mêmes programmes. ˆ de dresser des statistiques sur un grand nombre d'applications pour voir quelles instructions sont les moins utilisées. Le but est de les remplacer par de nouvelles instructions utiles à certains traitements spéciques, comme l'optimisation de méthodes récursives. 2 ASM : 4

10 2 La Core API Comme son nom l'indique, cette API est la base d'asm et donc également de la seconde API et des outils annexes. Cette API utilise le patron de conception Visiteur (voir annexe 1 page 38) an de parcourir de manière séquentielle toutes les structures d'une classe Java compilée. Des événements sont produits par la lecture du chier. On peut faire le rapprochement avec le fonctionnement de SAX 3 pour le traitement de chiers XML. L'API se base sur les classes décrites sur le schéma 3. Elle dispose de trois pans bien distincts : La production d'événements en lisant du code : La classe ClassReader, comme son nom l'indique, lit les données d'une classe compilée et appelle les méthodes de tout visiteur héritant de ClassVisitor, donné en paramètre à sa méthode accept. Par exemple, la rencontre avec un champ appellera la méthode visitfield du visiteur, accompagné des paramètres permettant de l'identier. Les ltres : Dérivant de ClassVisitor, les ltres ne font par défaut que transmettre les événements vers un autre visiteur. L'idée est de leur ajouter du comportement an de retirer, ajouter ou transformer du code. La génération de code en recevant des événements : Le visiteur ClassWriter (héritant donc de Class Visitor) a pour rôle de transformer tout événement reçu en bytecode. En sortie, il fournira un tableau d'octets représentant un chier.class, c'est-à-dire en bytecode Java. Un visiteur donné par l'utilisateur et à qui on envoie des événements dénit le comportement à adopter : ˆ Accepter et transmettre les événements : la continuité du programme n'est pas perturbée et il demeure inchangé. ˆ Les ignorer : le programme perd des éléments. On a donc retiré du code par rapport à l'original. ˆ En ajouter de nouveaux : il y a production de code. Du nouveau code est ajouté. Fig. 3 Diagramme de classes de ASM 3 SAX (Simple API for XML) : 5

11 2 LA CORE API 2.1 Génération d'une classe Pour générer une classe, il sut d'utiliser un ClassWriter. Nous allons pour l'instant l'utiliser seul : la génération de code se fait donc de manière programmatique, à partir de rien. Regardons la petite interface suivante : public interface MyInterface { public static final int MIN = 0 ; public static final int MAX = 10 ; public int compare(int a) ; Cette interface pourra être générée par le ClassWriter grâce au programme suivant : ClassWriter cw = new ClassWriter(0) ; // Déclaration de l'interface à générer. cw.visit(v1_6, ACC_PUBLIC + ACC_ABSTRACT + ACC_INTERFACE, "nevo/myinterface", null, "java/lang/object", null) ; // Déclarations des champs que l'interface contient. cw.visitfield(acc_public + ACC_FINAL + ACC_STATIC, "MIN", "I", null, 0).visitEnd() ; cw.visitfield(acc_public + ACC_FINAL + ACC_STATIC, "MAX", "I", null, 10).visitEnd() ; // Déclarations de la méthode que l'interface contient. cw.visitmethod(acc_public + ACC_ABSTRACT, "compare", "(I)I", null, null).visitend() ; // On annonce la fin de l'interface. cw.visitend() ; // On génère le bytecode. byte[] b = cw.tobytearray() ; Les visiteurs d'asm ont chacun une interface précise et leur documentation respective dénit l'ordre dans lequel les visites doivent être eectuées. Il est très important de le respecter pour ne pas créer de sorties mal formées. L'ordre des appels d'un ClassVisitor est le suivant : visit [visitsource] [visitouterclass] (visitannotation visitattribute)* (visitinnerclass visitfield visitmethod)* visitend. Signaler le début et la n de la visite de la classe est obligatoire, tandis que visitsource (qui informe du nom du chier source de la classe) et visitouterclass (qui informe du nom de la classe qui englobe la classe actuelle dans le cas d'une classe interne) sont optionnels. Notre programme ci-dessus respecte bien l'ordre déni par l'interface. 2.2 Génération de code à partir d'un chier compilé existant La plupart du temps, on voudra modier une classe compilée existante. ASM le permet simplement en liant un ClassReader à un ClassWriter. Tous les événements déclenchés par le Reader sont traduits en bytecode pour le Writer. On obtient donc exactement le même chier en sortie, comme le montre le schéma suivant : 6

12 2.3 Exemple d'utilisation de ltre Fig. 4 Exemple simple de la Core API Le programme Java suivant montre comme eectuer cette opération : byte[] b1 =... ; // b1 est le bytecode à lire. ClassWriter cw = new ClassWriter() ; ClassReader cr = new ClassReader(b1) ; // Donne le bytecode au Reader. cr.accept(cw, 0) ; // Les événements du Reader sont transmis au Writer. byte[] b2 = cw.tobytearray() ; // On récupère le bytecode généré par le Writer. Bien sûr, le véritable intérêt consiste à ajouter des ltres an de transformer la classe. Ces ltres sont appelés des Adapter : Fig. 5 Exemple simple de transformation avec la Core API Cela se traduit par le code Java suivant : byte[] b1 =... ; ClassWriter cw = new ClassWriter() ; // L'Adapter 2 transmet les événements au Writer. ClassAdapter ca2 = new ClassAdapterAddMethods(cw) ; // L'Adapter 1 transmet les événements à l'adapter 2. ClassAdapter ca1 = new ClassAdapterSuppressMethods(ca2) ; ClassReader cr = new ClassReader(b1) ; // Donne le bytecode au Reader. cr.accept(ca1, 0) ; // Les événements du Reader sont transmis à l'adapter 1. byte[] b2 = cw.tobytearray() ; // On récupère le bytecode généré par le Writer. 2.3 Exemple d'utilisation de ltre Imaginons un ltre volontairement simpliste qui préxe tous les champs privés de la chaîne m_. Il sut de dériver ClassAdapter, qui va modier l'événement visitfield selon la nature du champ : public class ChangeFieldNameAdapter extends ClassAdapter { public ChangeFieldNameAdapter(ClassVisitor cv) { // Le constructeur sauvegarde le ClassVisitor donné afin de lui // transmettre les évènements, modifiés ou non. super(cv) public void visitfield(int access, String name, String desc, 7

13 3 LA TREE API... String signature, Object value) { if (((access & ACC_PRIVATE)!= 0) && (!name.startswith("m_"))) { name = "m_" + name ; // Transmets l'événement, modifié ou non. cv.visitfield(access, name, desc, signature, value) ; Fig. 6 Diagramme de séquence simplié pour ChangeFieldNameAdapter Bien sûr, changer le nom des champs lors de leur rencontre n'est pas susant pour produire un programme valide : il faudra aussi faire de même avec les références à ces champs, mais le but ici n'est que de montrer le principe de fonctionnement d'asm. Ce qui amène une remarque importante : il est tout à fait possible de produire un programme qui sera refusé par la JVM. Diérents outils présents dans ASM permettent de vérier la validité du bytecode généré, mais nous n'étudierons pas ces outils dans le cadre de ce rapport. Le diagramme de séquence 6 montre le cheminement des événements entre le Reader, l'adapter et le Writer. La visite des éléments se contente de donner des informations sur ce qu'elle lit immédiatement, ce qui constitue une limite de la lecture séquentielle : transformer une classe peut devenir dicile sans avoir l'application complète sur laquelle travailler. C'est pour résoudre ce problème qu'a été introduite la seconde API. 3 La Tree API Tout comme la Core API peut être rapprochée de SAX, la Tree API peut l'être de DOM 4 dans la manière de représenter tout élément comme un objet. Cette API produit un arbre de données an de pouvoir outrepasser la limite de la lecture séquentielle et permettre l'accès à n'importe quel élément n'importe quand. L'inconvénient est la quantité de mémoire nécessaire au stockage des structures de l'application complète. Cette API est également plus lente que la Core API, de par la création de nombreux éléments. Ces éléments sont appelés noeuds (nodes) et le schéma 7 page ci-contre montre leur hiérarchie. Trois choses sont à noter : 4 DOM (Document Object Model) : 8

14 Fig. 7 Diagramme de classe de la Tree API ˆ Tout d'abord, la Tree API est basée sur la Core API. En eet, chaque noeud dérive de manière directe ou indirecte d'un visiteur. ˆ Ensuite, chaque noeud dispose lui-même des attributs qui le caractérise, qui lui sont donnés lors de son instanciation. ˆ Enn, les noeuds possèdent une méthode accept qui produisent les événements nécessaires à la visite de sa structure et de ses sous-structures. La Tree API fonctionne sur ce principe : la Core API permet de paramétrer les noeuds, tandis les méthodes héritées de MemberNode gèrent l'accès et le parcours des sous-structures. Par exemple, voici le code partiel de ClassNode : public class ClassNode extends MemberNode implements ClassVisitor { public List<MethodNode> methods ; public void visit(final int version, final int access, final String name, final String signature, final String supername, final String[] interfaces) { this.version = version ; this.access = access ; this.name = name ; this.signature = signature ; this.supername = supername ; if (interfaces!= null) { this.interfaces.addall(arrays.aslist(interfaces)) ; 9

15 3 LA TREE API public MethodVisitor visitmethod(final int access, final String name, final String desc, final String signature, final String[] exceptions) { MethodNode mn = new MethodNode(access, name, desc, signature, exceptions) ; methods.add(mn) ; return mn ;... On peut voir que si exécuter la méthode visit ne fait qu'initialiser la classe, exécuter visitmethod instancie un noeud de méthode (ce qui initialise celle-ci) et la stocke dans la liste de méthodes que la classe possède. Les méthodes de visite de la classe génèrent donc l'arbre de données qui la compose. Enn, la méthode accept envoie les évènements nécessaires à la génération de l'élément courant et de ses sous-structures. Le code suivant montre comment un ClassNode génère ses évènements auprès du visiteur qui lui est donné : public void accept(classvisitor cv) { // Début de la visite de la classe. cv.visit(version, access, name, signature, supername, interfaces) ;... // Visite les champs. for (i = 0 ; i < fields.size() ; ++i) ((FieldNode) fields.get(i)).accept(cv) ; // Visite les méthodes. for (i = 0 ; i < methods.size() ; ++i) ((MethodNode) methods.get(i)).accept(cv) ; // Fin de la visite. cv.visitend() ; 3.1 Génération d'une classe Pour générer une classe telle que celle décrite par l'interface en page 6 et de manière programmatique comme en section 2.1 page 6, il sut de créer les noeuds comme le programme ci-dessous le montre. Rappelons que cette API nous permet de créer les éléments de la classe dans l'ordre désiré. ClassNode cn = new ClassNode() ; cn.version = V1_6 ; cn.access = ACC_PUBLIC + ACC_ABSTRACT + ACC_INTERFACE ; cn.name = "nevo/myinterface" ; cn.supername = "java/lang/object" ; cn.fields.add(new FieldNode(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "MIN", "I", null, 0)) ; cn.fields.add(new FieldNode(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "MAX", "I", null, 10)) ; cn.methods.add(new MethodNode(ACC_PUBLIC + ACC_ABSTRACT, "compare", "(I)I", null, null) ; ClassWriter cw = new ClassWriter(0) ; cn.accept(cw) ; // Génération du bytecode. byte[] b = cw.tobytearray() ; Comme dit précédemment, les noeuds possèdent une méthode accept. Cette méthode est appelée par l'élément hiérarchique supérieur et correspond à une demande d'envoi des événements au visiteur qui lui est donné. 10

16 3.2 Génération de code à partir d'un chier compilé Il sut par exemple qu'un programme appelle la méthode accept d'un ClassNode avec un ClassWriter en paramètre, pour que le ClassNode en question envoie les événements nécessaires à sa génération. Cela se traduit également par un appel à la méthode accept de chacune de ses sous-structures. Le diagramme de séquence 8 montre la création de la classe MyInterface décrite en page 6. Fig. 8 Diagramme de séquence d'une génération de classe avec la Tree API 3.2 Génération de code à partir d'un chier compilé Pour générer une classe à partir d'un chier.class, il faut composer la Tree API avec la Core API : byte[] b1 =... ; ClassReader cr = new ClassReader(b1) ; ClassNode cn = new ClassNode() ; cr.accept(cn, 0) ; Chaque événement produit par le Reader est envoyé au visiteur qui lui est donné, soit le ClassNode dans le cas présent. Cela a pour eet la création de la classe entière, comme le montre le schéma 9 page suivante. Notons que la visite de la méthode ne consiste que d'un visitend, car il s'agit d'une interface et ne contient aucune instruction. On peut alors maintenant générer le bytecode de la classe nouvellement créée en faisant visiter le ClassNode pour un ClassWriter : ClassWriter cw = new ClassWriter(0) ; cn.accept(cw) ; b2 = cw.tobytearray() ; 3.3 Exemple de transformation Eectuer la même transformation qu'avec la Core API (voir section 2.3 page 7) est un peu diérent. Une fois la classe visitée (et donc stockée), il faut parcourir ses éléments pour les modier. 11

17 4 LES OUTILS ANNEXES Fig. 9 Diagramme de séquence de génération de code à partir d'un chier compilé, avec la Tree API byte[] b1 =... ; ClassReader cr = new ClassReader(b1) ; // Donne le bytecode au Reader. ClassNode cn = new ClassNode() ; cr.accept(cn, 0) ; // Initialise la classe et génère ses éléments grâce au Reader. // Parcours des champs de la classe pour transformation. for (FieldNode field : (List<FieldNode>)cn.fields) { if (((field.access & Opcodes.ACC_PRIVATE)!= 0) && (!field.name.startswith("m_"))) { field.name = "m_" + field.name ; // Génération du bytecode à partir du noeud de la classe. ClassWriter cw = new ClassWriter(0) ; cn.accept(cw) ; byte[] b = cw.tobytearray() ; Le procédé est plus lent, car il s'eectue en au moins deux passes alors qu'avec la Core API, la transformation s'eectue au moment de la visite. Cependant, tous les éléments de la classe sont connus ce qui permet de faire des traitements plus conséquents. 4 Les outils annexes ASM dispose de plusieurs outils annexes mais seul l'un d'entre eux sera étudié et adapté dans notre nouvelle bibliothèque. ASMier Cet outil génère le code Java qu'il faudrait exécuter pour générer le chier de classe compilé donné à ASMier. Cet utilitaire étant adapté dans AsmDex, il sera étudié plus en détail en section 4.1 page 32. TraceClassVisitor Cet outil permet d'acher le texte des classes visitées et de leur contenu. Cela permet donc d'obtenir une trace des événements, ce qui peut être très utile pour du déboguage. CheckClassAdapter Cet utilitaire permet de valider l'ordre des événements (et leurs paramètres) qu'il reçoit et transmet, an d'assurer que le bytecode généré soit valide et ainsi accepté par la JVM. 12

18 Quatrième partie Présentation de Dalvik 1 Présentation de la machine virtuelle Dalvik 1.1 Contexte de Dalvik : Android Dalvik est la machine virtuelle du système d'exploitation Android. Celui-ci fut créé à la base par la société Android Inc. en 2003, avant que Google ne la rachète en On peut trouver Android sur de nombreux appareils mobiles tels que les SmartPhones, Netbooks et tablettes. Le nombre de mobiles équipés de cet OS dépassait les 101 millions d'unité au premier quart de 2011, représentant alors 35% du marché des mobiles. Android est basé sur Linux, diusé principalement en open-source et permet le développement d'applications en Java. Leur code compilé est interprété par une machine virtuelle appelée Dalvik 5, mais ce code est incompatible avec la machine virtuelle de Java (JVM). Dalvik permet aux applications d'accéder au middleware d'android. 1.2 Architecture La machine virtuelle Dalvik a été créée spéciquement pour Android. C'est une machine à registres, à l'inverse de la JVM qui est une machine à pile. Une étude[4] montre que, bien que plus complexe à mettre en oeuvre, une machine à registres nécessite 47% moins d'instructions qu'une machine à pile lors de l'exécution d'un programme, pour un code 26% plus large. Le gain en rapidité est notamment dû aux similitudes entre l'architecture des instructions lues et celles des processeurs exécutant Dalvik. Puisqu'elle est une machine virtuelle, Dalvik interprète le bytecode des programmes qui lui sont donnés. Ceux-ci sont compilés au format dex qui sera étudié en section 2 page 15. Depuis la version 2.2, Dalvik dispose d'un compilateur Just-In-Time (JIT), dont la stratégie est de compiler le bytecode, le mettre en cache et le réutiliser autant de fois que nécessaire. JIT permet un gain de vitesse propre à la compilation statique, avec cependant un coût en mémoire pour le stockage du code compilé et un léger temps de compilation au lancement de l'application pendant que la compilation JIT s'eectue. 1.3 Les instructions Dalvik dispose de 217 instructions[3], ce qui permet un encodage de l'opcode (le numéro qui identie l'instruction) sur 8 bits. En revanche, l'adressage se fera toujours par mot de 16 bits, ce qui permet de multiplier par 2 le champ d'adressage. En conséquence, même la plus petite instruction sera encodée sur 16 bits et les autres par multiples de 16 bits. La plupart des instructions ayant des paramètres, il n'y a que très peu d'espace mémoire perdu par cette organisation de données. Les arguments d'une instruction sont ordonnés : la destination apparaît en premier, suivi de la ou les sources. Les opérations eectuées par Dalvik sont aussi classiques que peuvent être celles de n'importe quel processeur : aectations entre registres, aectations d'une valeur à un registre, sauts conditionnels ou non, opérations arithmétiques etc. On trouve cependant des instructions de plus haut niveau qui permettent la gestion de tableaux uni-dimensionnels, de switch/case et try/catch, d'invocations de méthodes avec ou sans paramètres, et d'instanciations d'objets. Il existe également des instructions optimisées qui seront évoquées en 2.8 page Les registres Dalvik étant basée sur une machine à registres, il est logique qu'il en manipule. Ceux-ci font systématiquement 32 bits. La taille allouée à leur désignation varie selon l'instruction, mais elle peut atteindre 16 bits, soit Ce nom étrange est en fait le nom du village Islandais où auraient vécu les ancêtres du créateur de la machine virtuelle, Dan Bornstein. 13

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Télécom Nancy Année 2013-2014

Télécom Nancy Année 2013-2014 Télécom Nancy Année 2013-2014 Rapport 1A Ajout du langage C dans la Programmer's Learning Machine GIANNINI Valentin Loria 615, rue du Jardin Botanique 54600, Villers-Lès-Nancy Maître de stage : QUINSON

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

Plus en détail

Généralités sur le Langage Java et éléments syntaxiques.

Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...

Plus en détail

Conception de circuits numériques et architecture des ordinateurs

Conception de circuits numériques et architecture des ordinateurs Conception de circuits numériques et architecture des ordinateurs Frédéric Pétrot Année universitaire 2014-2015 Structure du cours C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Codage des nombres en base 2, logique

Plus en détail

Installation et prise en main

Installation et prise en main TP1 Installation et prise en main Android est le système d'exploitation pour smartphones, tablettes et autres appareils développé par Google. Pour permettre aux utilisateurs d'installer des applications

Plus en détail

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types

Plus en détail

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts E3FI ESIEE Paris Systèmes et scripts B. Perret TP : Shell Scripts 1 Remarque générale Lorsque vous cherchez des informations sur Internet, n'oubliez pas que langage de shell script que nous avons vu correspond

Plus en détail

Héritage presque multiple en Java (1/2)

Héritage presque multiple en Java (1/2) Héritage presque multiple en Java (1/2) Utiliser deux classes ou plus dans la définition d'une nouvelle classe peut se faire par composition. class Etudiant{ int numero; Diplome d; float passeexamen(examen

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

Compte-rendu de projet de Système de gestion de base de données

Compte-rendu de projet de Système de gestion de base de données Compte-rendu de projet de Système de gestion de base de données Création et utilisation d'un index de jointure LAMBERT VELLER Sylvain M1 STIC Université de Bourgogne 2010-2011 Reponsable : Mr Thierry Grison

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

2 Grad Info Soir Langage C++ Juin 2007. Projet BANQUE

2 Grad Info Soir Langage C++ Juin 2007. Projet BANQUE 2 Grad Info Soir Langage C++ Juin 2007 Projet BANQUE 1. Explications L'examen comprend un projet à réaliser à domicile et à documenter : - structure des données, - objets utilisés, - relations de dépendance

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

Cours 1: Java et les objets

Cours 1: Java et les objets Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/

Plus en détail

Annexe : La Programmation Informatique

Annexe : La Programmation Informatique GLOSSAIRE Table des matières La Programmation...2 Les langages de programmation...2 Java...2 La programmation orientée objet...2 Classe et Objet...3 API et Bibliothèque Logicielle...3 Environnement de

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

Chapitre I Notions de base et outils de travail

Chapitre I Notions de base et outils de travail Chapitre I Notions de base et outils de travail Objectifs Connaître les principes fondateurs et l historique du langage Java S informer des principales caractéristiques du langage Java Connaître l environnement

Plus en détail

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. Encapsulation L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. La visibilité dépend des membres : certains membres peuvent être visibles et d'autres

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

Initiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr

Initiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr Initiation à JAVA et à la programmation objet raphael.bolze@ens-lyon.fr O b j e c t i f s Découvrir un langage de programmation objet. Découvrir l'environnement java Découvrir les concepts de la programmation

Plus en détail

Java Licence Professionnelle 2009-2010. Cours 7 : Classes et méthodes abstraites

Java Licence Professionnelle 2009-2010. Cours 7 : Classes et méthodes abstraites Java Licence Professionnelle 2009-2010 Cours 7 : Classes et méthodes abstraites 1 Java Classes et méthodes abstraites - Le mécanisme des classes abstraites permet de définir des comportements (méthodes)

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Machines virtuelles. Brique ASC. Samuel Tardieu sam@rfc1149.net. Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Machines virtuelles. Brique ASC. Samuel Tardieu sam@rfc1149.net. Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles La compilation peut

Plus en détail

Éléments d'architecture des ordinateurs

Éléments d'architecture des ordinateurs Chapitre 1 Éléments d'architecture des ordinateurs Machines take me by surprise with great frequency. Alan Turing 1.1 Le Hardware Avant d'attaquer la programmation, il est bon d'avoir quelques connaissances

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme Rappel Ralf Treinen Université Paris Diderot UFR Informatique Laboratoire Preuves, Programmes et Systèmes treinen@pps.univ-paris-diderot.fr 6 mai 2015 Jusqu'à maintenant : un petit langage de programmation

Plus en détail

Chapitre 1 : Introduction aux bases de données

Chapitre 1 : Introduction aux bases de données Chapitre 1 : Introduction aux bases de données Les Bases de Données occupent aujourd'hui une place de plus en plus importante dans les systèmes informatiques. Les Systèmes de Gestion de Bases de Données

Plus en détail

Chapitre 2. Classes et objets

Chapitre 2. Classes et objets Chapitre 2: Classes et Objets 1/10 Chapitre 2 Classes et objets Chapitre 2: Classes et Objets 2/10 Approche Orientée Objet Idée de base de A.O.O. repose sur l'observation de la façon dont nous procédons

Plus en détail

Chapitre 10. Les interfaces Comparable et Comparator 1

Chapitre 10. Les interfaces Comparable et Comparator 1 Chapitre 10: Les interfaces Comparable et Comparator 1/5 Chapitre 10 Les interfaces Comparable et Comparator 1 1 Ce chapitre a été extrait du document "Objets, Algorithmes, Patterns" de [René Lalement],

Plus en détail

TD/TP 1 Introduction au SDK d Android

TD/TP 1 Introduction au SDK d Android TD/TP 1 Introduction au SDK d Android Romain Raveaux 1 Introduction Android est un système d'exploitation pour téléphone portable de nouvelle génération développé par Google. Celui-ci met à disposition

Plus en détail

Systeme d'exploitation

Systeme d'exploitation Introduction au dévellopement de Methodes Natives Partie I : appelle de methodes C++ sous windows Auteur: Frank Sauvage. 1 \ introduction aux methodes natives : Les methodes natives sont des methodes devellopées

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

Plus en détail

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique Institut Supérieure Aux Etudes Technologiques De Nabeul Département Informatique Support de Programmation Java Préparé par Mlle Imene Sghaier 2006-2007 Chapitre 1 Introduction au langage de programmation

Plus en détail

Programmation Orientée Objet

Programmation Orientée Objet Programmation Orientée Objet Mohamed Tounsi Institut Supérieur d'informatique et de Multimédia Sfax Septembre 2014 Mohamed Tounsi (ISIMS) Programmation Orientée Objet Septembre 2014 1 / 16 Responsable

Plus en détail

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework Gaël de Chalendar CEA LIST / LIC2M Journée de Présentation des Technologies WebContent INSTN 14/12/2009 Présentation de gsoap Plan

Plus en détail

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Polymorphisme, la classe Object, les package et la visibilité en Java... 1 Polymorphisme, la classe Object, les package et la visibilité en Java. Polymorphisme, la classe Object, les package et la visibilité en Java.... 1 Polymorphisme.... 1 Le DownCast... 4 La Classe Object....

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

La JVM. La machine virtuelle Java. La JVM. La JVM

La JVM. La machine virtuelle Java. La JVM. La JVM La machine virtuelle Java Historique et rappels Organisation mémoire de la JVM Le garbage collector Le bytecode, la machine à pile. Les threads Suivi, tracé, optimisation d un programme Java JVM embarquées

Plus en détail

TP2 - Conguration réseau et commandes utiles. 1 Généralités. 2 Conguration de la machine. 2.1 Commande hostname

TP2 - Conguration réseau et commandes utiles. 1 Généralités. 2 Conguration de la machine. 2.1 Commande hostname Département d'informatique Architecture des réseaux TP2 - Conguration réseau et commandes utiles L'objectif de ce TP est d'une part de vous présenter la conguration réseau d'une machine dans l'environnement

Plus en détail

INITIATION AU LANGAGE JAVA

INITIATION AU LANGAGE JAVA INITIATION AU LANGAGE JAVA I. Présentation 1.1 Historique : Au début des années 90, Sun travaillait sur un projet visant à concevoir des logiciels simples et performants exécutés dans des PDA (Personnal

Plus en détail

Cours Langage C/C++ Programmation modulaire

Cours Langage C/C++ Programmation modulaire Cours Langage C/C++ Programmation modulaire Thierry Vaira BTS IRIS Avignon tvaira@free.fr «v0.1 Rappel Programmation modulaire (1/2) Le découpage d'un programme en sous-programmes est appelée programmation

Plus en détail

Chapitre VI- La validation de la composition.

Chapitre VI- La validation de la composition. Chapitre VI- La validation de la composition. Objectifs du chapitre : Expliquer les conséquences de l utilisation de règles de typage souples dans SEP. Présenter le mécanisme de validation des connexions

Plus en détail

Machines Virtuelles. et bazard autour. Rémi Forax

Machines Virtuelles. et bazard autour. Rémi Forax Machines Virtuelles et bazard autour Rémi Forax Avant propos Quelle est la complexité du code ci-dessous? Avec un processeur à 1Ghz, combien de temps le calcul prendra t'il? public static void main(string[]

Plus en détail

Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations

Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations Projet Viticulture TP 3 : bases de données externes Description du thème Partie 1 : bases de données locales SQLite Partie 2 : projet H2O stockage local Partie 3 : bases de données distantes Partie 4 :

Plus en détail

SHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5

SHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 SHERLOCK 7 Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 Cette note montre comment intégrer un script Java dans une investigation Sherlock et les différents aspects de Java script. S T E M M E R I M A G I N

Plus en détail

Auteur LARDOUX Guillaume Contact guillaume.lardoux@epitech.eu Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Auteur LARDOUX Guillaume Contact guillaume.lardoux@epitech.eu Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA Auteur LARDOUX Guillaume Contact guillaume.lardoux@epitech.eu Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA Sommaire 1. Introduction 2. Installation 3. Fonctionnement 4. Développement 5. Démonstration 2

Plus en détail

Eclipse atelier Java

Eclipse atelier Java Eclipse atelier Java Table des matières 1. Introduction...2 2. Télécharger eclipse...3 3. Installer eclipse...3 4. Premier lancement d eclipse...3 5. Configurer eclipse pour faire du Java...5 6. Développer

Plus en détail

Projet de Veille Technologique

Projet de Veille Technologique Projet de Veille Technologique Programmation carte à puce - JavaCard Ing. MZOUGHI Ines (i.mzoughi@gmail.com) Dr. MAHMOUDI Ramzi (mahmoudr@esiee.fr) TEST Sommaire Programmation JavaCard Les prérequis...

Plus en détail

Java - la plateforme

Java - la plateforme Java - la plateforme Java la plateforme Java? VM GC JIT Java Aujourd'hui 3 environnements d'exécutions différents Java ME (Micro Edition) pour PDA, téléphone Android (Java SE moins certain paquetages)

Plus en détail

DA MOTA Anthony - Comparaison de technologies : PhoneGap VS Cordova

DA MOTA Anthony - Comparaison de technologies : PhoneGap VS Cordova DA MOTA Anthony - Comparaison de technologies : PhoneGap VS Cordova I. Introduction Dans une période où la plasticité peut aider à réduire les coûts de développement de projets comme des applications mobile,

Plus en détail

I. Introduction aux fonctions : les fonctions standards

I. Introduction aux fonctions : les fonctions standards Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons

Plus en détail

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/2011. 1.1 Présentation. 1.2 Ressources

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/2011. 1.1 Présentation. 1.2 Ressources Master Maths Finances 2010/2011 Data Mining janvier 2011 RapidMiner 1 Introduction 1.1 Présentation RapidMiner est un logiciel open source et gratuit dédié au data mining. Il contient de nombreux outils

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

Projet Active Object

Projet Active Object Projet Active Object TAO Livrable de conception et validation Romain GAIDIER Enseignant : M. Noël PLOUZEAU, ISTIC / IRISA Pierre-François LEFRANC Master 2 Informatique parcours MIAGE Méthodes Informatiques

Plus en détail

Exécution des instructions machine

Exécution des instructions machine Exécution des instructions machine Eduardo Sanchez EPFL Exemple: le processeur MIPS add a, b, c a = b + c type d'opération (mnémonique) destination du résultat lw a, addr opérandes sources a = mem[addr]

Plus en détail

Java Licence Professionnelle CISII, 2009-2010

Java Licence Professionnelle CISII, 2009-2010 Licence Professionnelle CISII, 2009-2010 Cours 1 : Introduction à Java A. Belaïd abelaid@loria.fr Cours disponible sur le site : http://www.loria.fr/~abelaid puis Teaching 1 Fonctionnement 12 séances :

Plus en détail

Programmation par composants (1/3) Programmation par composants (2/3)

Programmation par composants (1/3) Programmation par composants (2/3) Programmation par composants (1/3) La programmation par composant vise le développement de logiciel par aggrégation de briques logicielles existantes est indépendante de la POO La programmation par composant

Plus en détail

F. Barthélemy. 17 mai 2005

F. Barthélemy. 17 mai 2005 Typage de la généricité en Java F. Barthélemy 17 mai 2005 1 Le shéma général La g én éricit é en Java est un ajout r éalis é sur un langage existant depuis d éjà une dizaine d ann ées, avec des contraintes

Plus en détail

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour LMI 2 Programmation Orientée Objet POO - Cours 9 Said Jabbour jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour CRIL UMR CNRS 8188 Faculté des Sciences - Univ. Artois Février 2011 Les collections

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Module.NET 3 Les Assemblys.NET

Module.NET 3 Les Assemblys.NET Module.NET Chapitre 3 Les Assemblys.NET 2011/2012 Page 1 sur 13 Contenu Cours... 3 3.1 - Définition d un assembly.net... 3 3.2 - Private assembly ou assembly privé.... 3 3.3 - Shared assembly ou assembly

Plus en détail

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object) Quelques patterns pour la persistance des objets avec DAO Ce cours présente des modèles de conception utilisés pour effectuer la persistance des objets Université de Nice Sophia-Antipolis Version 1.4 30/8/07

Plus en détail

QUELQUES CONSEILS POUR LA MAINTENANCE DE VOTRE ORDINATEUR

QUELQUES CONSEILS POUR LA MAINTENANCE DE VOTRE ORDINATEUR QUELQUES CONSEILS POUR LA MAINTENANCE DE VOTRE ORDINATEUR Table des matières 1. AVANT-PROPOS...2 2.CRÉER UN POINT de RESTAURATION - RESTAURER le SYSTÈME...2 2.1 Créer un point de restauration...3 2.2 Restaurer

Plus en détail

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février 2014 17:30 à 20:30

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février 2014 17:30 à 20:30 Examen intra 20 février 2014 17:30 à 20:30 Nom, prénom : Code permanent : Répondez directement sur le questionnaire. Question #1 5% Quelle influence peut avoir le typage dynamique sur la maintenabilité

Plus en détail

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Anne Tasso Java Le livre de premier langage 10 e édition Avec 109 exercices corrigés Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Table des matières Avant-propos Organisation de l ouvrage..............................

Plus en détail

Auto-évaluation Programmation en Java

Auto-évaluation Programmation en Java Auto-évaluation Programmation en Java Document: f0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION PROGRAMMATION EN

Plus en détail

SweetyPix, mode d'emploi

SweetyPix, mode d'emploi Université de Nice Sophia-Antipolis Master 1 STIC Informatique SweetyPix, mode d'emploi Edouard Jan Mendher Merzoug Anne-Laure Radigois Amaury Tinard 2005-2006 Université de Nice Sophia-Antipolis Master

Plus en détail

Raja Bases de données distribuées A Lire - Tutoriel

Raja Bases de données distribuées A Lire - Tutoriel Université des Sciences de Montpellier Master 2 Semestre 1 Unité d'enseignement FMIN306 Raja Bases de données distribuées A Lire - Tutoriel 26 janvier 2011 Audrey Novak Romain Maneschi Jonathan Fhal Aloys

Plus en détail

Installation de IBM SPSS Modeler Server Adapter

Installation de IBM SPSS Modeler Server Adapter Installation de IBM SPSS Modeler Server Adapter Table des matières Avis aux lecteurs canadiens...... v IBM SPSS Modeler Server Installation de l'adaptateur............ 1 A propos de l'installation de

Plus en détail

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Seance 2: Complétion du code de jeu. (durée max: 2h) Mot clé const et pointeurs: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Implémentez jeu_recupere_piece

Plus en détail

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie Chapitre I : Les bases du C++ Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie du logiciel, et ce depuis

Plus en détail

Cours 3 : L'ordinateur

Cours 3 : L'ordinateur Cours 3 : L'ordinateur Abdelkrim Zehioua 2éme année Licence Gestion Faculté des sciences Économiques et sciences de Gestion Université A, Mehri - Constantine 2 Plan du cours 1.Définitions de l'ordinateur

Plus en détail

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 ) P r ob lé m a t iq u e d e la g é n é r icit é les versions de Java antérieures à 1.5 permettaient de créer des classes de structures contenant n'importe quels types d'objet : les collections (classes

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

Conduite et Gestion de Projet - Cahier des charges

Conduite et Gestion de Projet - Cahier des charges Conduite et Gestion de Projet - Cahier des charges 1 Introduction Sophie Toulouse LIPN - Université Paris 13 +33.1.49.40.40.73 99 av. Jean-Baptiste Clément toulouse@lipn.univ-paris13.fr 93430 Villetaneuse

Plus en détail

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. RMI Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. Méthode proche de RPC. Outils et classes qui rendent l'implantation d'appels de méthodes d'objets distants aussi simples

Plus en détail

Programmation par les Objets en Java

Programmation par les Objets en Java Programmation par les Objets en Java Najib TOUNSI Les classes en Java (TD 3) I. Notion de classe I.1 Classe, champs, méthodes, instanciation, this, private vs. public. Créer une classe Point (coordonnée

Plus en détail

Programmation Objet - Cours II

Programmation Objet - Cours II Programmation Objet - Cours II - Exercices - Page 1 Programmation Objet - Cours II Exercices Auteur : E.Thirion - Dernière mise à jour : 05/07/2015 Les exercices suivants sont en majorité des projets à

Plus en détail

Bernard HAMM, Évelyne LAVOISIER

Bernard HAMM, Évelyne LAVOISIER 92 MAÎTRISE DE PROGICIELS DE GESTION DE BASES DE DONNÉES ET DE TRAITEMENT DE TEXTE Compte rendu d'un stage à l'usage des professeurs de sciences sociales. Ce stage a été programmé A la demande et avec

Plus en détail

Votre premier projet Android

Votre premier projet Android 3 Votre premier projet Android Maintenant que le SDK Android est installé, il est temps de créer votre premier projet. La bonne nouvelle est qu il n exige aucune ligne de code les outils Android créent

Plus en détail

Une introduction à Java

Une introduction à Java Une introduction à Java IFT 287 (Semaine 1) UNIVERSITÉ DE SHERBROOKE 1 Java - Historique Développé par Sun Microsystems en 1994 Inventeur James Gosling (canadien!) Objectif langage sûr (fortement typé)

Plus en détail

Le chiffre est le signe, le nombre est la valeur.

Le chiffre est le signe, le nombre est la valeur. Extrait de cours de maths de 6e Chapitre 1 : Les nombres et les opérations I) Chiffre et nombre 1.1 La numération décimale En mathématique, un chiffre est un signe utilisé pour l'écriture des nombres.

Plus en détail

"! "#$ $ $ ""! %#& """! '& ( ")! )*+

! #$ $ $ ! %#& ! '& ( )! )*+ ! "! "#$ $ $ ""! %#& """! '& ( ")! )*+ "! "#$ $ $ ""! %#& """! '& ( ")! )*+, ## $ *$-./ 0 - ## 1( $. - (/$ #,-".2 + -".234-5..'"6..6 $37 89-%:56.#&(#. +6$../.4. ;-37 /. .?.@A&.!)B

Plus en détail

Langage Java. Classe de première SI

Langage Java. Classe de première SI Langage Java Table des matières 1. Premiers pas...2 1.1. Introduction...2 1.2. Mon premier programme...2 1.3. Les commentaires...2 2. Les variables et les opérateurs...2 3. La classe Scanner...3 4. Les

Plus en détail

Guide de configuration de SQL Server pour BusinessObjects Planning

Guide de configuration de SQL Server pour BusinessObjects Planning Guide de configuration de SQL Server pour BusinessObjects Planning BusinessObjects Planning XI Release 2 Copyright 2007 Business Objects. Tous droits réservés. Business Objects est propriétaire des brevets

Plus en détail

Java c est quoi? Java pourquoi?

Java c est quoi? Java pourquoi? Grandes lignes du cours Cours JAVA : Le bases du langage Java. Version 3.02 Julien Sopena 1 1 julien.sopena@lip6.fr Équipe REGAL - INRIA Rocquencourt LIP6 - Université Pierre et Marie Curie Licence professionnelle

Plus en détail

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/2012. 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/2012. 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme Java 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme 1 2 c est quoi? Technologie développée par SUN Microsystems lancée en 1995 Dans un des premiers papiers* sur le langage JAVA, SUN le décrit

Plus en détail

OPTENET DCAgent 2.01. Manuel d'utilisateur

OPTENET DCAgent 2.01. Manuel d'utilisateur OPTENET DCAgent 2.01 Manuel d'utilisateur SOMMAIRE 1. INTRODUCTION...1 2. INSTALLATION...2 3. ÉTABLISSEMENT DES PERMISSIONS...4 Pour de plus amples informations, reportez-vous aux annexes «Conditions requises

Plus en détail

Projet gestion d'objets dupliqués

Projet gestion d'objets dupliqués Projet gestion d'objets dupliqués Daniel Hagimont Daniel.Hagimont@enseeiht.fr 1 Projet Service de gestion d'objets dupliqués Mise en cohérence lors de la prise d'un verrou sur un objet Pas de verrous imbriqués

Plus en détail

Dossier. Développer en Java sur téléphone mobile. Benjamin Damécourt benjamin.damecourt@me.com. UFR SITEC Master 2 EESC 11 janvier 2012

Dossier. Développer en Java sur téléphone mobile. Benjamin Damécourt benjamin.damecourt@me.com. UFR SITEC Master 2 EESC 11 janvier 2012 Dossier Développer en Java sur téléphone mobile Benjamin Damécourt benjamin.damecourt@me.com UFR SITEC Master 2 EESC 11 janvier 2012 Table des matières Introduction 2 Pré-requis 3 Hello World! 5 Installation

Plus en détail

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS Depuis SAS 9.2 TS2M3, SAS propose un nouveau langage de programmation permettant de créer et gérer des tables SAS : le DS2 («Data Step 2»). Ces nouveautés

Plus en détail

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux. UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

TP1. Outils Java Eléments de correction

TP1. Outils Java Eléments de correction c sep. 2008, v2.1 Java TP1. Outils Java Eléments de correction Sébastien Jean Le but de ce TP, sur une séance, est de se familiariser avec les outils de développement et de documentation Java fournis par

Plus en détail

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ; CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe

Plus en détail