Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Linker & Loader in.NET August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung.

Ähnliche Präsentationen


Präsentation zum Thema: "Linker & Loader in.NET August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung."—  Präsentation transkript:

1 Linker & Loader in.NET August Steinbacher

2 Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung

3 Traditioneller Ansatz Compiler Frontend: Parsen der High-Level-Syntax Kompilieren in Zwischencode Compiler Backend: Zwischencode -> Native Code Platzhalter für imports & exports Linker: Erzeugen eines executable file Loader: Platzieren des Executables im Speicher App2.cppIncl.h Objekt datei Objekt datei EXE Datei Image in MEM Compiler Linker Loader App1.cpp

4 .NET Modell Compiler Frontend: Parsen der High-Level-Syntax Erzeugen von Zwischencode + Metadaten Assemblies Compiler Backend (CLR): Lokalisieren des Assemblies Erzeugen von Native Code Kompilieren Linken Laden Source Compiler Assemblies Compiler CLR Processes Memory

5 Ausführen von.NET.exe Datei starten Windows-loader startet die CLR Applikation läuft innerhalb der CLR Applikationsdomäne Isoliert Applikationen voneinander Laden aller Assemblies, Module und Typen Methodentabellen der Typen Statische Felder und Objekte Side-by-Side Execution Eintrittspunkt Schlüsselwort.entrypoint in PE-Datei

6 3 Levels of Loading Laden der PE-Datei von Disk Einziger Festplattenzugriff Enthält Metadaten Laden des Assemblies Aufgrund der Metadaten Sicherheitsmanager prüft Rechte Laden der Typen Classloader PE-Datei Assemblies Object Integer String

7 Lokalisieren von Assemblies Assembly Resolver Name des gesuchten Assemblies Versionsinformation Informationen über AppDomain Konfigurationsdateien Öffentliche Assemblies GAC Codebase-Hints in Konfigurationsdateien Private Assemblies Im Applikationsverzeichnis Probing

8 Lokalisieren von Assemblies Assembly.Load(name) Public Key? Lade File J In GAC? J Lade File aus GAC J Vorhanden? N Passt File? J Probing erfolgreich? N N Passt File? J N Lade File von J Assembly.Load endet mit Fehler N N

9 Probing 4 Kriterien: Applikationsverzeichnis Culture-Attribut Assembly Name Relativer Suchpfad [AppDir] / [Assembly name].dll [AppDir] / [Assembly name] / [Assembly name].dll C:/App/code.dll C:/App/code/code.dll [AppDir] / [culture] / [Assembly name].dll [AppDir] / [culture] / [Assembly name] / [Assembly name].dll C:/App/en-US/code.dll C:/App/en-US/code/code.dll [AppDir] / [binpath] / [Assembly name].dll [AppDir] / [binpath] / [Assembly name] / [Assembly name].dll C:/App/shared/code.dll C:/App/shared/code/code.dll [AppDir] / [binpath] / [culture] / [Assembly name].dll [AppDir] / [binpath] / [culture] / [Assembly name] / [Assembly name].dll C:/App/shared/en-US/code.dll C:/App/shared/en-US/code/code.dll

10 Laden eines Typs T Durch Classloader Bestimmung des benötigten Speicherplatzes Bestimmung des Speicherlayouts Auflösen von Referenzen auf bereits geladene Typen Stubs erzeugen für Methoden von T Methodenaufrufe lösen JIT-Kompilierung aus Verifikation der Typsicherheit 4 Kategorien Ungültig Gültig Typsicher Verifizierbar Gültig Typsicher Verifizierbar Ungültig

11 Execution Model Source Code Compiler csc, jsc,... Assembly PE File + MSIL + Metadaten PE Verifikation GAC AppDir Assembly Loader Assembly Info Class List JIT Native Code Class Loader Runtime Layout Assembly Method Class Policy Manager Policy Erteilte Rechte

12 Objektinstanzen Instance Data Method Table A Method Table B Sync Block Table Instance of A Instance of B Instance of A Heap Private EE Memory

13 Instance Data Object Header Index Sync Block Table MethodTableEEClass Runtime Layout GCDesc Object Reference Interface map Compiled method JMI thunk Module Class Loader Assembly App Domain Hot Data Cold Data FieldDesc MethodDesc Prestub ptr Prestub Prestub ptr

14 Method Table & Interface Map Interface Map GCDesc MethodTable header Inherited virtuals Introduced virtuals Instance and static methods Method Table EEClass

15 Method Implementations Methodenadressierung class C : B { I2.m2() {..}; } A.m1; I1.m1; A.m2; I1.m2; B.m3; I2.m2;I2.m3; interface I1 {m1(); m2(); } interface I2 {m2(); m3(); } B.m3; class B : A, I2 {m3(){..}; } A.m1; A.m2; class A : I1 {m1(){..}; m2(){..}; } A.m1; I1.m1 A.m2; I1.m2 A.m1; I1.m1; A.m2; I1.m2; B.m3; A.m1; I1.m1; A.m2; I1.m2; I2.m2 B.m3; I2.m3

16 Quellen Don Box, Chris Sells: Essential.NET, The Common Language Runtime, Addison-Wesley 2003 Dave Stutz, Ted Neward, Geoff Shilling: Shared Source CLI Essentials. O'Reilly 2003 W.Beer, D.Birngruber, H.Mössenböck, A.Wöß: Die.NET- Technologie, dpunkt.verlag

17 Ende......Fragen?


Herunterladen ppt "Linker & Loader in.NET August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung."

Ähnliche Präsentationen


Google-Anzeigen