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 - 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

Avant de programmer en Java DOS Set Path=C:\JDK\bin Path=C:\JDK\bin C:\JDK\bin Set Path=%Path%;C:\JDK\bin C:\JDK\bin C:\JDK\

Avant de programmer en Java DOS Set Path=C:\JDK\bin Path=C:\JDK\bin C:\JDK\bin Set Path=%Path%;C:\JDK\bin C:\JDK\bin C:\JDK\ Exercices corrigés de programmation OO Java Préparés par : Mlle Imene Sghaier Année Académique : 2006-2007 Premiers Pas I. Avant de programmer en Java Le JDK de Sun (Java Development Kit) est l outil essentiel

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

Analyse statique de programmes Typage et analyse statique au sein de Java

Analyse statique de programmes Typage et analyse statique au sein de Java Analyse statique de programmes Typage et analyse statique au sein de Java Master Professionnel Informatique spécialité FSIL/FSI Jean-Marc Talbot jean-marc.talbot@lif.univ-mrs.fr Aix-Marseille Université

Plus en détail

Java Licence professionnelle CISI 2009-2010

Java Licence professionnelle CISI 2009-2010 Java Licence professionnelle CISI 2009-2010 Cours 10 : Type générique (c) http://manu.e3b.org/java/tutoriels/avance/generique.pdf 1 Introduction La programmation générique - nouveauté la plus significative

Plus en détail

Arité variable, énumérations. Arité variable. Arité des méthodes. Utilisation de la surcharge

Arité variable, énumérations. Arité variable. Arité des méthodes. Utilisation de la surcharge Arité variable, énumérations Théorie et pratique de la programmation Michel Schinz 2013-05-13 Arité variable 1 2 Arité des méthodes Utilisation de la surcharge Il est parfois utile d'offrir des méthodes

Plus en détail

Cours 3 : The Dalvik VM Specification. Damien MASSON d.masson@esiee.fr

Cours 3 : The Dalvik VM Specification. Damien MASSON d.masson@esiee.fr Androïd Cours 3 : The Dalvik VM Specification Damien MASSON d.masson@esiee.fr http://igm.univ-mlv.fr/~masson/teaching/android/ 1 er mars 2011 Buts du cours et Références Buts : Pourquoi Google n a pas

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

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

Plan. Tableaux. Utilité. Définition. Exemples. Déclaration d un tableau

Plan. Tableaux. Utilité. Définition. Exemples. Déclaration d un tableau Plan Tableaux Université de Nice - Sophia Antipolis Richard Grin Version 1.0.4 25/11/10 Définition Déclaration d un tableau Création d un tableau Utilisation d un dun tableau Tableau des paramètres de

Plus en détail

Plan. Environnement Client/Serveur. Cours 6 Rappels Java (suite) Appel de méthode à distance. Utilité. static

Plan. Environnement Client/Serveur. Cours 6 Rappels Java (suite) Appel de méthode à distance. Utilité. static Plan Environnement Client/Serveur Cours 6 Rappels Java (suite) Appel de méthode à distance kn@lri.fr http://www.lri.fr/~kn 1 Rappels sur les systèmes d'exploitations / Communication par mémoire partagée

Plus en détail

L héritage Encore un petit topo des familles. Je pense qu'avec ce genre de chapitre, ce n'est pas du luxe...

L héritage Encore un petit topo des familles. Je pense qu'avec ce genre de chapitre, ce n'est pas du luxe... L héritage Encore un petit topo des familles. Je pense qu'avec ce genre de chapitre, ce n'est pas du luxe... Une classe hérite d'une autre classe par le biais du mot clé extends. Une classe ne peut hériter

Plus en détail

Compte-rendu de projet de Cryptographie

Compte-rendu de projet de Cryptographie Compte-rendu de projet de Cryptographie Chirement/Déchirement de texte, d'images de sons et de vidéos LAMBERT VELLER Sylvain M1 STIC Université de Bourgogne 2010-2011 Reponsable : Mr Pallo Table des matières

Plus en détail

Mieux programmer en Java

Mieux programmer en Java Mieux programmer en Java Peter Haggar Éditions Eyrolles ISBN : 2-212-09171-0 2000 PARTIE 1 l exécution de l instruction return, cependant, le contrôle est transféré au bloc finally en // 2. Cela provoque

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

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

Clément MILVILLE / Edouard SIMON. Projet CodeWar. Enseignant tuteur: Michaël Hauspie 1/17

Clément MILVILLE / Edouard SIMON. Projet CodeWar. Enseignant tuteur: Michaël Hauspie 1/17 Projet CodeWar Enseignant tuteur: Michaël Hauspie 1/17 2/17 Remerciements: Nous tenons à remercier tout particulièrement notre tuteur M. Michaël HAUSPIE pour son aide, ses conseils, ses avis et sa disponibilité

Plus en détail

Précis de vocabulaire Orienté Objet

Précis de vocabulaire Orienté Objet Dernière Mise à jour : Mars 2007 Précis de vocabulaire Orienté Objet 1 Questions Expliquer et donner un exemple pour chacun des concepts suivants 1. Qu'est-ce qu'un objet? 2. Qu'est-ce qu'une classe? 3.

Plus en détail

APPLICATIONS JAVA. 1. Android. Android Partie I. Développement d'activités Java sous Android

APPLICATIONS JAVA. 1. Android. Android Partie I. Développement d'activités Java sous Android APPLICATIONS JAVA Android Partie I Ivan MADJAROV - 2014 Applications Java sous Android IvMad, 2011-2014 2 1. Android Développement d'activités Java sous Android L'objectif principal de ce cours est de

Plus en détail

Système. Introduction aux systèmes informatiques

Système. Introduction aux systèmes informatiques Introduction aux systèmes informatiques Système Un système est une collection organisée d'objets qui interagissent pour former un tout Objets = composants du système Des interconnexions (liens) entre les

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

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

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

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

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

Fonctionnement du serveur Z39.50

Fonctionnement du serveur Z39.50 Fonctionnement du serveur Z39.50 Table des matières 1 Configuration du serveur...2 1.1 Comportement du serveur...2 1.2 Configuration de la traduction z39.50 -> base de données...2 1.3 Configuration du

Plus en détail

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

TD 5 LES POINTEURS. Définition: Pointeur

TD 5 LES POINTEURS. Définition: Pointeur TD 5 LES POINTEURS d'après le site de F. Faber http://www.ltam.lu/tutoriel_ansi_c Définition: Pointeur Un pointeur est une variable spéciale qui peut contenir l'adresse d'une autre variable. En C, chaque

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

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

Introduction au Java Development Kit Et quelques instructions en Java. 1 Création des répertoires d accueil des programmes Java

Introduction au Java Development Kit Et quelques instructions en Java. 1 Création des répertoires d accueil des programmes Java HLIN406 - Janvier 2015 Le Java Development Kit offre un ensemble d outils de développement d applications Java. Pour utiliser ces outils, JDK ne propose pas d interface utilisateur, on doit donc écrire

Plus en détail

Java - TP3. Nicolas Baudru, Carine Guivier-Curien, Laurent Vallet. Année 2008-2009

Java - TP3. Nicolas Baudru, Carine Guivier-Curien, Laurent Vallet. Année 2008-2009 Java - TP3 Nicolas Baudru, Carine Guivier-Curien, Laurent Vallet Année 2008-2009 Le but de ce TD est d'écrire une application client/serveur de type msn : 1. Des clients se connectent à un serveur 2. Un

Plus en détail

Introduction aux systèmes d exploitation

Introduction aux systèmes d exploitation Introduction aux systèmes d exploitation Le système d exploitation est un ensemble de logiciels qui pilotent la partie matérielle d un ordinateur. Les principales ressources gérées par un système d exploitation

Plus en détail

Exercice 1 (API Java)

Exercice 1 (API Java) Programmation orientée objet TP 3 L2 MPCIE API Java, Paquetages Exercice 1 (API Java) 1. Écrire la classe Ensemble comme étant une collection d'éléments ne contenant pas de doublon. Elle sera donc implémentée

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

Claude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5

Claude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5 Claude Delannoy Exercices en langage C++ 3 e édition Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5 Chapitre 3 Les fonctions Rappels Généralités Une fonction est un bloc d instructions éventuellement

Plus en détail

Cours d Analyse, Algorithmique Elements de programmation

Cours d Analyse, Algorithmique Elements de programmation 1 de 33 Cours d Analyse, Algorithmique Elements de programmation Florent Hivert Mél : Florent.Hivert@lri.fr Adresse universelle : http://www.lri.fr/ hivert 2 de 33 Données et instructions Un programme

Plus en détail

} 7 Variables (composantes)

} 7 Variables (composantes) Chapitre 4 Tableaux Jusqu ici, nous avons employé les variables pour stocker les valeurs individuelles de types primitifs : une variable de type int pour stocker un entier, une variable de type boolean

Plus en détail

TP4-5 : Authentication Java

TP4-5 : Authentication Java TP4-5 : Authentication Java V. Danjean V. Marangozova-Martin Résumé Le but de ce TP est double : se familiariser avec le mécanisme classique d'authentication en Java ; apprendre à utiliser la documentation

Plus en détail

Les systèmes de Fichier

Les systèmes de Fichier Les systèmes de Fichier 1 Les disques durs, aussi petits soient-ils, contiennent des millions de bits, il faut donc organiser les données afin de pouvoir localiser les informations, c'est le but du système

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

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

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

Licence d'informatique 2004-2005 Examen Programmation orientée objet Juin 2005

Licence d'informatique 2004-2005 Examen Programmation orientée objet Juin 2005 Licence d'informatique 2004-2005 Examen Programmation orientée objet Juin 2005 Durée de l'épreuve : 2 heures TRÈS IMPORTANT : respectez l'ordre des questions. La lisibilité sera un critère important pour

Plus en détail

Cours 1. Contenu du cours : " Premières applications. " Compilation, Exécution, Chemin. " Affichage et saisie. " Types de données. " Flux de contrôle

Cours 1. Contenu du cours :  Premières applications.  Compilation, Exécution, Chemin.  Affichage et saisie.  Types de données.  Flux de contrôle Cours 1 1 Contenu du cours : " Premières applications " Compilation, Exécution, Chemin " Affichage et saisie " Types de données " Flux de contrôle " Applets " Arrays " OO de base Edition Le fichier texte

Plus en détail

Déclaration et Implémentation d'une classe

Déclaration et Implémentation d'une classe Définir et Instancier une classe en Java Déclaration et Implémentation d'une classe En algorithmique (comme en C++ la plupart du temps), l'écriture du corps des méthodes (implémentation) se fait après

Plus en détail

1.1- Compiler et exécuter un premier programme en C++

1.1- Compiler et exécuter un premier programme en C++ 1.1- Compiler et exécuter un premier programme en C++ 1- Un premier programme en C++ 2- Compilation et exécution 1- Un premier programme en C++ Le premier programme que propose le cours consiste à afficher

Plus en détail

Les exceptions en java

Les exceptions en java 1/12 Les exceptions en java 2/12 C'est quoi une exception? Une exception est un événement (une erreur) qui se produit lors de l'exécution d'un programme, et qui va provoquer un fonctionnement anormal (par

Plus en détail

Guillaume SOLDERA (B guillaume.soldera@serli.fr) SERLI Informatique Bull OW2 Consortium. Comparatif Choco/Drools dans le cadre du projet JASMINe

Guillaume SOLDERA (B guillaume.soldera@serli.fr) SERLI Informatique Bull OW2 Consortium. Comparatif Choco/Drools dans le cadre du projet JASMINe Guillaume SOLDERA (B guillaume.soldera@serli.fr) SERLI Informatique Bull OW2 Consortium dans le cadre du projet JASMINe Avril 2008 Table des matières 1 Introduction 3 1.1 Rappel sur JASMINe.......................................

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

Listes de personnes et calculatrice polonaise inverse en Java

Listes de personnes et calculatrice polonaise inverse en Java Listes de personnes et calculatrice polonaise inverse en Java Université Paris Sud Motivation Le but de cet exercice est de manipuler les listes chaînées et les piles et de voir leur application en analyse

Plus en détail

NOTIONS SUR WINDOWS NT

NOTIONS SUR WINDOWS NT Chapitre 10 NOTIONS SUR WINDOWS NT Le système d'exploitation WINDOWS NT (New Technology) a été conçu par Microsoft entre 1988 et 1993. Cinq objectifs étaient poursuivis en créant ce nouveau SE : - offrir

Plus en détail

Votre première application Android - Introduction aux Interfac. utilisateur

Votre première application Android - Introduction aux Interfac. utilisateur Votre première application Android - Introduction aux Interfaces graphiques utilisateur frederic.guinand@univ-lehavre.fr 2014-2015 Plan Analyse d une app Android : visite guidée Introduction aux interfaces

Plus en détail

0- Le langage C++ 1- Du langage C au langage C++ 2- Quelques éléments sur le langage. 3- Organisation du cours

0- Le langage C++ 1- Du langage C au langage C++ 2- Quelques éléments sur le langage. 3- Organisation du cours 0- Le langage C++ 1- Du langage C au langage C++ 2- Quelques éléments sur le langage 3- Organisation du cours Le présent cours constitue une introduction pour situer le langage C++, beaucoup des concepts

Plus en détail

1. Les fondements de l informatique 13

1. Les fondements de l informatique 13 Introduction à l'algorithmique 1. Les fondements de l informatique 13 1.1 Architecture de Von Neumann 13 1.2 La machine de Turing 17 1.3 Représentation interne des instructions et des données 19 1.3.1

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

INFO-F-101 Programmation Projet 4 Page Ranking(1/4): Création de la matrice du compte des liens

INFO-F-101 Programmation Projet 4 Page Ranking(1/4): Création de la matrice du compte des liens INFO-F-101 Programmation Projet 4 Page Ranking(1/4): Création de la matrice du compte des liens Année académique 2009 2010 1 Introduction Ce projet est le premier d une série de quatre projets qui ont

Plus en détail

Programmation Java. Redéfinition de méthode (masquage)

Programmation Java. Redéfinition de méthode (masquage) Programmation Java Programmation objet avec Java Concepts plus avancés Christelle Urtado & Sylvain Vauttier Janvier 2013 Redéfinition de méthode (masquage) Une sous-classe peut redéfinir le code de méthodes

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 +Cours 2 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

Plus en détail

4D v11 SQL Release 5 (11.5) ADDENDUM

4D v11 SQL Release 5 (11.5) ADDENDUM ADDENDUM Bienvenue dans la release 5 de 4D v11 SQL. Ce document présente les nouveautés et modifications apportées à cette nouvelle version du programme. Prise en charge de nouvelles plates-formes La release

Plus en détail

RAPPORT DE CONCEPTION UML :

RAPPORT DE CONCEPTION UML : Carlo Abi Chahine Sylvain Archenault Yves Houpert Martine Wang RAPPORT DE CONCEPTION UML : Bamboo Ch@t Projet GM4 Juin 2006 Table des matières 1 Introduction 2 2 Présentation du logiciel 3 2.1 Précisions

Plus en détail

Sauf mention contraire, le contenu de cet ouvrage est publié sous la licence : Creative Commons BY-NC-SA 2.0 La copie de cet ouvrage est autorisée

Sauf mention contraire, le contenu de cet ouvrage est publié sous la licence : Creative Commons BY-NC-SA 2.0 La copie de cet ouvrage est autorisée Sauf mention contraire, le contenu de cet ouvrage est publié sous la licence : Creative Commons BY-NC-SA 2.0 La copie de cet ouvrage est autorisée sous réserve du respect des conditions de la licence Texte

Plus en détail

Par le service des publications Citrix. Citrix Systems, Inc.

Par le service des publications Citrix. Citrix Systems, Inc. Licences : présentation de l architecture Par le service des publications Citrix Citrix Systems, Inc. Avis Les informations contenues dans cette publication peuvent faire l'objet de modifications sans

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

Université Laval Faculté des sciences et de génie Département d'informatique et de génie logiciel IFT-3101. Travail pratique #2

Université Laval Faculté des sciences et de génie Département d'informatique et de génie logiciel IFT-3101. Travail pratique #2 Université Laval Faculté des sciences et de génie Département d'informatique et de génie logiciel IFT-3101 Danny Dubé Hiver 2014 Version : 11 avril Questions Travail pratique #2 Traduction orientée-syntaxe

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

1 Exercice 1 Question de cours (4 points)

1 Exercice 1 Question de cours (4 points) Info32B Systèmes d'exploitation année 2013-2014 Examen (1ère session) 16 décembre 2014 N. Sabouret L'épreuve dure 2h30. Tous les documents sont autorisés. Les exercices sont indépendants. 1 Exercice 1

Plus en détail

DUT Informatique Module JAVA Apprentis Département Informatique 2008 / 2009. Travaux Pratiques n o 2 : JUnit

DUT Informatique Module JAVA Apprentis Département Informatique 2008 / 2009. Travaux Pratiques n o 2 : JUnit iut ORSAY DUT Informatique Département Informatique 2008 / 2009 Travaux Pratiques n o 2 : JUnit Nom(s) : Groupe : Date : Objectifs : Apprendre à vérifier une implantation à l aide de tests unitaires sous

Plus en détail

Claude Kaiser Machine virtuelle et environnement utilisateur SRI_B CHAPITRE 1

Claude Kaiser Machine virtuelle et environnement utilisateur SRI_B CHAPITRE 1 CHAPITRE 1 FOURNIR À L'UTILISATEUR UNE MACHINE VIRTUELLE ET UN ENVIRONNEMENT D'EXÉCUTION DE PROGRAMMES Plan ENVIRONNEMENT DE TRAVAIL ADAPTÉ AU BESOIN DE L'UTILISATEUR Fonctions de l'environnement d'exécution

Plus en détail

Java. Java. Le livrede. Avec 80 exercices corrigés. Avec 80 exercices corrigés. Le livre. Anne Tasso. 5 e édition. Un best-seller qui a déjà conquis

Java. Java. Le livrede. Avec 80 exercices corrigés. Avec 80 exercices corrigés. Le livre. Anne Tasso. 5 e édition. Un best-seller qui a déjà conquis Anne Tasso Un best-seller qui a déjà conquis des milliers d'étudiants! Java Le livre Java Le livrede de premier premier langage langage Avec 80 exercices corrigés Avec 80 exercices corrigés 5 e édition

Plus en détail

S. Laporte C# mode console DAIGL TS1

S. Laporte C# mode console DAIGL TS1 Bases du langage C# I. C# en mode console (mode texte) Avantages par rapport au mode graphique (Application Windows): - C'est un mode plus proche de l'approche algorithmique (pas de notions de composants,

Plus en détail

1.Programmation en Java : notions de base, orienté objet et héritage

1.Programmation en Java : notions de base, orienté objet et héritage Travaux pratique de Méthodologie et Langage de Programmation,, TP1 1 1.Programmation en Java : notions de base, orienté objet et héritage Cette séance de TP a pour objectif d'introduire à la programmation

Plus en détail

Chargement de processus Allocation contigüe Allocation fragmentée Gestion de pages. Gestion mémoire. Julien Forget

Chargement de processus Allocation contigüe Allocation fragmentée Gestion de pages. Gestion mémoire. Julien Forget Julien Forget Université Lille 1 École Polytechnique Universitaire de Lille Cité Scientifique 59655 Villeneuve d Ascq GIS 3 2011-2012 1 / 46 Rôle du gestionnaire de mémoire Le gestionnaire de mémoire a

Plus en détail

RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005

RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005 Oussama ELKACHOINDI Wajdi MEHENNI RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005 Sommaire I. Préliminaire : Notice d exécution et mode opératoire...4 II. Architecture globale de l application...5

Plus en détail

Apprendre la dichotomie avec Colobot

Apprendre la dichotomie avec Colobot Apprendre la dichotomie avec Colobot CHABALIER Nicolas MONCEL Arnaud Année Universitaire 2014 2015 1 Apprendre la dichotomie avec Colobot Présenté par CHABALIER Nicolas et MONCEL Arnaud Tuteur : Jacques

Plus en détail

JAVA - Compléments du cours 9

JAVA - Compléments du cours 9 JAVA - Compléments du cours 9 Nicolas Baudru Année 2008-2009 Exercice 1 (Création de threads) En Java, il existe deux méthodes pour créer des threads. La première étend la classe Thread : class MonThread

Plus en détail

Encryptions, compression et partitionnement des données

Encryptions, compression et partitionnement des données Encryptions, compression et partitionnement des données Version 1.0 Grégory CASANOVA 2 Compression, encryption et partitionnement des données Sommaire 1 Introduction... 3 2 Encryption transparente des

Plus en détail

Chapitre 11. Conception de logiciels Intranet : patrons et canevas NSY 102. Synthèse 1. SINGLETON 3 1.1. DEFINITION 3 1.2. REFERENCES DANS LE COURS 3

Chapitre 11. Conception de logiciels Intranet : patrons et canevas NSY 102. Synthèse 1. SINGLETON 3 1.1. DEFINITION 3 1.2. REFERENCES DANS LE COURS 3 NSY102-Chapitre-11_Synthese.doc 1/12 06/01/2014 21:48:04 Chapitre 11 Synthèse 1. SINGLETON 3 1.1. DEFINITION 3 1.2. REFERENCES DANS LE COURS 3 2. OBSERVER/OBSERVABLE 3 2.1. DEFINITION 3 2.2. REFERENCES

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 5. Tableaux

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

Plus en détail

SE202 : déroulement du cours et bases de compilation. Samuel Tardieu Année scolaire 2015/2016

SE202 : déroulement du cours et bases de compilation. Samuel Tardieu Année scolaire 2015/2016 SE202 : déroulement du cours et bases de compilation Samuel Tardieu Année scolaire 2015/2016 1/44 Samuel Tardieu Année scolaire 2015/2016 Organisation du cours 2/44 Samuel Tardieu Année scolaire 2015/2016

Plus en détail

Guillaume MONTAVON Benoît MEILHAC. Rapport Technique du projet. Gestionnaire de tâches pour Android

Guillaume MONTAVON Benoît MEILHAC. Rapport Technique du projet. Gestionnaire de tâches pour Android Guillaume MONTAVON Benoît MEILHAC Rapport Technique du projet Gestionnaire de tâches pour Android Sommaire 1. Introduction... 3 2. Outils utilisés... 3 2.1. Android SDK... 3 2.2. Android dans Eclipse...

Plus en détail

Listes et arbres binaires

Listes et arbres binaires Des structures de données dynamiques Listes, Listes ordonnées Arbres binaires, arbre binaires de recherche Listes chaînées Utile si le nombre d éléments n est pas connu à l avance et évolue beaucoup. Permet

Plus en détail

1 Hello world. 2 Sorties en C. DUT Informatique M3101 Système S3 2015 / 2016. Travaux Pratiques n o 0 : Rappels de programmation C

1 Hello world. 2 Sorties en C. DUT Informatique M3101 Système S3 2015 / 2016. Travaux Pratiques n o 0 : Rappels de programmation C DUT Informatique 2015 / 2016 Travaux Pratiques n o 0 : Rappels de programmation C Nom(s) : Groupe : Date : Objectifs : renouer avec les notions, la manipulation et l écriture de programmes C, en particulier

Plus en détail

pedigree d'un cheval Zoe ; son père est Tonnerre et sa mère Belle ; mère de Belle est Rose et père de Belle est Eclair jean jean marc paul luc

pedigree d'un cheval Zoe ; son père est Tonnerre et sa mère Belle ; mère de Belle est Rose et père de Belle est Eclair jean jean marc paul luc Chap. 3 Les arbres binaires Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud distingué, appelé racine. La structure d'arbre est l'une des plus importantes et des plus

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

Active Directory Sommaire :

Active Directory Sommaire : Active Directory Sommaire : Définition Ce qu'il permet A quoi sert-il? Principe de fonctionnement Structure Hiérarchie Schéma Qu'est ce qu'un service d'annuaire? Qu'elle est son intérêt? L'installation

Plus en détail

PROJET INFORMATIQUE RECHERCHE DE SOUS-CHAÎNE DE CARACTERES

PROJET INFORMATIQUE RECHERCHE DE SOUS-CHAÎNE DE CARACTERES PROJET INFORMATIQUE RECHERCHE DE SOUS-CHAÎNE DE CARACTERES I-Présentation Un algorithme de recherche de sous-chaine est un type d'algorithme de recherche qui a pour objectif de trouver une chaîne de caractères

Plus en détail

Guide pour la conception d'une application en C

Guide pour la conception d'une application en C Guide pour la conception d'une application en C Ph. Preux DESS IMST, ULCO Novembre 1999 1 Principes généraux Une application informatique, dès qu'elle dépasse une centaine de lignes de code, doit impérativement

Plus en détail

Initiation au mail. Sommaire : 1. Qu'est-ce qu'un mail?...3 2. Deux types d'outils pour consulter ses mails...4

Initiation au mail. Sommaire : 1. Qu'est-ce qu'un mail?...3 2. Deux types d'outils pour consulter ses mails...4 Initiation au mail Sommaire : 1. Qu'est-ce qu'un mail?...3 2. Deux types d'outils pour consulter ses mails...4 2.1. Les logiciels de gestion de mail...4 2.2. Les webmails...5 3. Se connecter au webmail...6

Plus en détail

Trier des tableaux en C++ : efficacité du std::sort (STL) et tris paramétrés

Trier des tableaux en C++ : efficacité du std::sort (STL) et tris paramétrés Trier des tableaux en C++ : efficacité du std::sort (STL) et tris paramétrés Hélène Toussaint, juillet 2014 Sommaire 1. Efficacité du std::sort... 1 1.1. Conditions expérimentales... 1 1.2. Tableaux de

Plus en détail

fichiers Exemple introductif : stockage de photos numériques

fichiers Exemple introductif : stockage de photos numériques b- La Gestion des données Parmi les matériels dont il a la charge, le système d exploitation s occupe des périphériques de stockage. Il s assure, entre autres, de leur bon fonctionnement mais il doit être

Plus en détail

CCI - Initiation à Java. E.Coquery emmanuel.coquery@liris.cnrs.fr

CCI - Initiation à Java. E.Coquery emmanuel.coquery@liris.cnrs.fr CCI - Initiation à Java E.Coquery emmanuel.coquery@liris.cnrs.fr Présentation du langage Outline 1 Présentation du langage 2 Types de données primitifs 3 Objets Présentation du langage Un langage orienté

Plus en détail

Java pour le Web. Cours Java - F. Michel

Java pour le Web. Cours Java - F. Michel Java pour le Web Cours Java - F. Michel Introduction à JEE 6 (ex J2EE) Historique Qu'est-ce que JEE JEE : Java Entreprise Edition (ex J2EE) 1. Une technologie outils liés au langage Java + des spécifications

Plus en détail

Conseil, Etudes et Edition de logiciels NORMES & CONVENTIONS DE DEVELOPPEMENT JAVA ET SQL

Conseil, Etudes et Edition de logiciels NORMES & CONVENTIONS DE DEVELOPPEMENT JAVA ET SQL Conseil, Etudes et Edition de logiciels NORMES & CONVENTIONS DE DEVELOPPEMENT JAVA ET SQL Table des matières Système d'exploitation... 3 Environnement de développement intégré... 3 Le workspace... 3 Le

Plus en détail

Résumé Introduction Programmation Java

Résumé Introduction Programmation Java Résumé Introduction Programmation Java Concepts Un programme : séquence, test conditionnel, boucles. Objets : Les objets Java modélisent les objets d un problème donné Classe : Les objets sont crées à

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

Une introduction au langage C++ Marc Jachym, Lurpa

Une introduction au langage C++ Marc Jachym, Lurpa Une introduction au langage C++ Marc Jachym, Lurpa Janvier 2008 À l origine, le langage C Langage procédural créé dans les années 1970 aux laboratoires Bell (ATT : télécoms américains) en vue d écrire

Plus en détail

Chapitre 6 Héritage en Java

Chapitre 6 Héritage en Java Chapitre 6: Héritage 1/12 Chapitre 6 Héritage en Java Chapitre 6: Héritage 2/12 1. Généralités L'héritage est le troisième des paradigmes de la programmation orientée objet (le 1 er étant l'encapsulation,

Plus en détail

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012 Université Mohammed Premier Année universitaire 2011-2012 Faculté des Sciences Filière SMI Département de Mathématiques Module : POO Java et d Informatique Semestre : S5 Correction de l examen écrit de

Plus en détail