Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parLotte Maire Modifié depuis plus de 10 années
1
Formation universitaire à .NET: Les assemblages
Patrick Smacchia 2003 Formation universitaire à .NET: Les assemblages © Patrick Smacchia © Patrick Smacchia/Microsoft Research Cambridge 2004 Les supports (cours et lab) de cette formation peuvent être utilisés gratuitement dans le cadre de tout enseignement à but non lucratif. Contacter moi avant toute utilisation non personnelle de ces supports : L'architecture .NET : Introduction
2
Plan Notion de module Anatomie des modules
Patrick Smacchia 2003 Plan Notion de module Anatomie des modules LAB1 : csc.exe et l’outil ildasm.exe Assemblages à noms forts LAB2 : signature numérique Globalisation et assemblages satellites Les assemblages L'architecture .NET : Introduction
3
Notion de module Un assemblage est un concept logique.
Patrick Smacchia 2003 Notion de module Notion de module Un assemblage est un concept logique. Physiquement, un assemblage est constitué de plusieurs fichiers appelés modules. Les modules peuvent soit contenir du code, soit contenir des ressources, soit les deux. Extensions des modules avec du code: .exe .dll .netmodule Extensions des modules sans code (appelés modules ressources) : .resources .jpg .txt … Tous les modules d’un assemblage doivent se situer dans le même répertoire. Les assemblages L'architecture .NET : Introduction
4
Pourquoi la notion de modules?
Patrick Smacchia 2003 Notion de module Pourquoi la notion de modules? 80% du temps est passé dans 20% du code. Il se peut que certains modules ne soient jamais chargés. Inclusions logiques (et pas physique) de fichiers ressources dans un assemblage. Possibilité d’avoir un module par culture supportée. Possibilité d’utiliser un langage par module: un assemblage peut donc être écrit en plusieurs langages .NET. Les assemblages L'architecture .NET : Introduction
5
Le module avec le manifeste
Patrick Smacchia 2003 Notion de module Le module avec le manifeste Chaque assemblage a un module particulier: Ce module référence tous les autres modules. Ce référencement se fait dans une section physique appelée manifeste. Lorsque le CLR charge l’assemblage, il commence toujours par charger ce module. Ce module est d’extension .exe ou .dll. Il détermine donc si l’assemblage est un exécutable ou une librairie. Aucun autre module ne peut avoir l’extension .exe ou .dll. Les assemblages L'architecture .NET : Introduction
6
Références entre assemblages
Patrick Smacchia 2003 Notion de module Références entre assemblages Un assemblages peut utiliser des types ou des ressources définis dans un autre assemblage. Ces assemblages doivent être fournis lors de la fabrication du module avec le manifeste. Les références vers ces assemblages sont physiquement contenues dans le manifeste. Ex: Compilateur C# csc.exe csc.exe /r:Asm.dll /addmodule:Mod.netmodule Foo.cs Les assemblages L'architecture .NET : Introduction
7
L’outil al.exe al.exe : Assembly Linker Outil en ligne de commande.
Patrick Smacchia 2003 Notion de module L’outil al.exe al.exe : Assembly Linker Outil en ligne de commande. al.exe permet de réunir des fichiers au sein d’un même assemblage. al.exe ne fait que fabriquer un module d’extension .dll contenant le manifeste. al.exe fabrique donc des assemblages sans code CIL. Ex: al.exe /out:en-US\Chaines.Resources.dll /c:en-US /embed:en-US\Chaines.en-US.resources Les assemblages L'architecture .NET : Introduction
8
Plan Notion de module Anatomie des modules
LAB1 : csc.exe et l’outil ildasm.exe Assemblages à noms forts Le mécanisme de signature retardée LAB2 : signature numérique Globalisation et assemblages satellites Les assemblages
9
Patrick Smacchia 2003 Anatomie des modules Anatomie d’un module Un module qui contient du code CIL contient obligatoirement une section physique appelée métadonnées de types. Les données de cette section décrivent les types contenus dans le module. On parle d’auto-description. Un module qui contient du code peut aussi contenir des ressources (option /resources de csc.exe) Les assemblages L'architecture .NET : Introduction
10
Utilisation de csc.exe Anatomie des modules Assemblage Foo2.netmodule
Patrick Smacchia 2003 Anatomie des modules Utilisation de csc.exe csc.exe /target:module Foo2.cs /resource:Images.jpg csc.exe /Addmodule:Foo2.netmodule /LinkResource:Foo3.resources Foo1.cs Assemblage Foo1.exe Métadonnées de type Manifeste contient notamment une référence vers Foo2 et une référence vers Foo3.resources Code CIL des méthodes des types Foo2.netmodule Métadonnées de type Code CIL des méthodes des types Foo3.resources Resources (Image.jpg) Les assemblages L'architecture .NET : Introduction
11
Les métadonnées d’assemblages
Patrick Smacchia 2003 Anatomie des modules Les métadonnées d’assemblages Deux types de métadonnées: Les métadonnées de types, contenues dans tous modules contenant du code CIL. Les métadonnées d’assemblages, contenues dans le manifeste. Les métadonnées d’assemblages = 4 tables: AssemblyDef: nom, version, culture… FileDef: une entrée par module ManifestResourcesDef: une entrée par ressource ExportedTypeDef: Une entrée par type publique Les assemblages L'architecture .NET : Introduction
12
Les attributs .NET d’assemblages
Patrick Smacchia 2003 Anatomie des modules Les attributs .NET d’assemblages Classes utilisables dans le code source pour positionner les informations relatives à l’assemblage. Ces infos seront stockées dans les métadonnées d’assemblage. Exemple d’attributs d’assemblage : AssemblyCompany AssemblyProduct AssemblyDescription AssemblyVersion AssemblyCulture AssemblyCopyright Exemple d’utilisation: using System.Reflection; [assembly: AssemblyCompany("L’entreprise")] [assembly: AssemblyProduct("Le produit Les assemblages L'architecture .NET : Introduction
13
Les métadonnées de types
Patrick Smacchia 2003 Anatomie des modules Les métadonnées de types Contient des tables de définitions: TypeDef (Une entrée par type défini dans le module) MethodDef FieldDef PropertyDef… Contient des tables de références: AssemblyRef (Une entrée par assemblage utilisé par ce module) ModuleRef TypeRef MemberRef Contient des tas: #string (nom des méthodes…) #user (chaîne de caractères) #blob (signature des méthodes) Les specs définissent un numéro unique à chacune de ces tables et tas (sur 1 octet) Exemple: la table MethodDef à le numéro 6 Les assemblages L'architecture .NET : Introduction
14
Les jetons de métadonnées
Patrick Smacchia 2003 Anatomie des modules Les jetons de métadonnées Identifiants 4 octets placés au sein du code CIL pour référencer les entités (premier octet = numéro de table ou de tas) .method /* */ public hidebysig static void Main() cil managed { .entrypoint // Code size (0xb) .maxstack 1 IL_0000: ldstr "Hello world!" /* */ IL_0005: call void [mscorlib/* */] System.Console/* F */::WriteLine(string) /* 0A00000E */ IL_000a: ret } // end of method Prog::Main using System; class Prog { public static void Main() Console.WriteLine( "Hello world!"); } Conséquence: pas d’adresse physiques dans l’assemblage, indépendance totale face au matériel sous-jacent Les assemblages L'architecture .NET : Introduction
15
Plan Notion de module Anatomie des modules
LAB1 : csc.exe et l’outil ildasm.exe Assemblages à noms forts LAB2 : signature numérique Globalisation et assemblages satellites Les assemblages
16
Plan Notion de module Anatomie des modules
LAB1 : csc.exe et l’outil ildasm.exe Assemblages à noms forts LAB2 : signature numérique Globalisation et assemblages satellites Les assemblages
17
Qu’est ce qu’un nom fort?
Patrick Smacchia 2003 Assemblages à noms forts Qu’est ce qu’un nom fort? Le nom d’un assemblage est qualifié de fort ssi l’assemblage est signé numériquement. En conséquence, un assemblage à nom fort est mathématiquement infalsifiable. Concrètement, si une entité prétend avoir développée un assemblage qui a un nom fort, on a un moyen de vérifier si cela est vrai. Les assemblages L'architecture .NET : Introduction
18
Patrick Smacchia 2003 Assemblages à noms forts L’algorithme RSA L’algorithme RSA se base sur un ensemble de fonctions mathématiques bijectives. Chacune de ces fonctions est définie par la donnée de 2 nombres A et B: Si on connaît A, on peut calculer f(x) pour tout x. Si on connaît B, on peut calculer x pour tout f(x). Si on ne connaît pas B, on ne peut pas calculer x pour tout f(x). Applications: Echange de messages cryptés. Authentification d’un fichier par signature numérique. Les assemblages L'architecture .NET : Introduction
19
La signature numérique
Patrick Smacchia 2003 Assemblages à noms forts La signature numérique Assemblage Foo1.exe Signature numérique = f(x) Signature numérique Assemblage Foo1.exe Manifeste Cles.snk Clé publique Manifeste A (Clé publique) B (Clé privée) Métadonnées de type Métadonnées de type Valeur de hachage = x Code IL Code IL Les assemblages L'architecture .NET : Introduction
20
sn.exe ; jeton de clé publique
Patrick Smacchia 2003 Assemblages à noms forts sn.exe ; jeton de clé publique L’algorithme de hachage (SHA-1 ou MD5) produit une valeur d’une vingtaine d’octets. L’utilitaire sn.exe permet de produire des couples clé privé (436 octets) clé publique (128 octets). L’attribut AssemblyKeyFile permet de référencer le fichier contenant les clés. Le nom fort de l’assemblage ne contient pas la clé publique mais un jeton de clé publique, sur 8 octets. b03f5f7f11d50a3a jeton de Microsoft. b77a5c561934e089 jeton de l’ECMA. Les assemblages L'architecture .NET : Introduction
21
Patrick Smacchia 2003 Assemblages à noms forts Signature retardée Le fichier contenant les clés publique/privé doit rester confidentiel. Pour éviter de fournir ce fichier aux développeurs, sn.exe (option -p) permet de produire un fichier ne contenant que la clé publique. La signature est rajoutée à l’assemblage ultérieurement avec sn.exe (option –R). Les assemblages L'architecture .NET : Introduction
22
Plan Notion de module Anatomie des modules
LAB1 : csc.exe et l’outil ildasm.exe Assemblages à noms forts LAB2 : signature numérique Globalisation et assemblages satellites Les assemblages
23
Plan Notion de module Anatomie des modules
LAB1 : csc.exe et l’outil ildasm.exe Assemblages à noms forts LAB2 : signature numérique Globalisation et assemblages satellites Les assemblages
24
Définitions Globalisation et assemblages satellites
Patrick Smacchia 2003 Globalisation et assemblages satellites Définitions Une culture = association une langue/ un pays fr-FR en-US en-UK … La plupart des applications doivent être utilisable par des personnes issues de cultures différentes. C’est la globalisation d’une application. Pour gérer la globalisation, .NET autorise d’accompagner une application avec des assemblage spéciaux, un par culture. Ce sont es assemblages satellites. Chaque assemblage satellite contient les ressources pour sa culture, chaîne de caractères, images… Les assemblages L'architecture .NET : Introduction
25
Editer les ressources Globalisation et assemblages satellites
Patrick Smacchia 2003 Globalisation et assemblages satellites Editer les ressources Il existe trois formats de fichier pour contenir les ressources: Des fichiers textes .txt, qui ne contiennent pas d’image (utilisé lors du développement). Des fichiers XML .resx qui peuvent contenir des images encodées en base64 (utilisé lors du développement). Visual Studio .NET est adapté à l’utilisation des fichiers .resx. Des fichiers binaires .resources utilisés à la compilation. On passe d’un format à un autre avec l’utilitaire resgen.exe : resgen.exe en-US\Chaines.txt en-US\Chaines.en-US.resources Avec l’option /resource de csc.exe on peut aussi insérer des ressources directement dans l’assemblage avec du code mais ceci est déconseillé. Les assemblages L'architecture .NET : Introduction
26
Compiler un assemblage satellite
Patrick Smacchia 2003 Globalisation et assemblages satellites Compiler un assemblage satellite Un assemblage satellite ne contient pas de code. Il faut le compiler avec l’outil al.exe qui va construire un fichier d’extension .dll contenant les métadonnées d’assemblage: al.exe /out:en-US\Chaines.Resources.dll /c:en-US /embed:en-US\Chaines.en-US.resources Lors du déploiement, les assemblages satellites doivent être dans un répertoire nommé par la culture. Avec l’option /resource de csc.exe on peut aussi insérer des ressources directement dans l’assemblage avec du code (et ainsi se passer des assemblages satellites) mais ceci est déconseillé. Les assemblages L'architecture .NET : Introduction
27
Exploiter les ressources
Patrick Smacchia 2003 Globalisation et assemblages satellites Exploiter les ressources Il faut utiliser la classe System.Resources.ResourceManager prévue à cet effet: ... Assembly A = Assembly.Load("chaines.resources,culture=en-US"); ResourceManager RM = new ResourceManager("chaines.en-US",A); string s = RM.GetString("Bonjour"); Console.WriteLine(s); System.Drawing.Image Im = (Image) RM.GetObject("UneImage"); string s = (string) RM.GetObject("Bonjour"); Les assemblages L'architecture .NET : Introduction
28
Question? Mots clés : module, module ressource, manifeste, métadonnées de types, métadonnées d’assemblages, jeton de métadonnées, attribut .NET d’assemblage, nom fort, RSA, signature numérique, signature retardée, jeton de clé publique, ressource, globalisation, culture Acronymes : al.exe : Assembly Linker csc.exe : C# compiler sn.exe : strong name resgen.exe : resource génerator Les assemblages
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.