1 / 17

Linker & Loader in .NET

Linker & Loader in .NET. August Steinbacher. Vortragsüberblick. C++ vs .NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung. Traditioneller Ansatz. Compiler Frontend: Parsen der High-Level-Syntax Kompilieren in Zwischencode Compiler Backend:

gabe
Download Presentation

Linker & Loader in .NET

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 App1.cpp App2.cpp Incl.h Compiler Objekt datei Objekt datei Linker EXE Datei Loader Image in MEM

  4. Assemblies .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 Source Compiler 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. Assemblies 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 String Integer Object

  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. Public Key? N J In GAC? J Lade File aus GAC N <CodeBase> Vorhanden? Passt File? J J Lade File von <CodeBase> N N Probing erfolgreich? Passt File? J J Lade File N N Assembly.Load endet mit Fehler Lokalisieren von Assemblies Assembly.Load(name)

  9. [AppDir] / [Assembly name].dll [AppDir] / [Assembly name] / [Assembly name].dll C:/App/code.dll C:/App/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] / [culture] / [Assembly name].dll [AppDir] / [culture] / [Assembly name] / [Assembly name].dll [AppDir] / [binpath] / [culture] / [Assembly name].dll [AppDir] / [binpath] / [culture] / [Assembly name] / [Assembly name].dll C:/App/en-US/code.dll C:/App/en-US/code/code.dll C:/App/shared/en-US/code.dll C:/App/shared/en-US/code/code.dll Probing • 4 Kriterien: • Applikationsverzeichnis • Culture-Attribut • Assembly Name • Relativer Suchpfad

  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 Ungültig Gültig Typsicher Verifizierbar

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

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

  13. Object Reference ObjectHeader InstanceData Index Sync Block Table Interfacemap MethodTable Module JMI thunk Compiledmethod Class Loader „Hot Data“ „Cold Data“ Prestub ptr Assembly Prestub ptr Prestub EEClass MethodDesc MethodDesc App Domain FieldDesc Runtime Layout GCDesc

  14. Method Table Interface Map GCDesc 1 2 3 MethodTableheader EEClass 4 5 Inheritedvirtuals Introducedvirtuals Instance andstatic methods Method Table & Interface Map

  15. A.m1; I1.m1; class C : B { I2.m2() {..}; } A.m1; I1.m1; A.m1; I1.m1 A.m2; I1.m2; A.m2; I1.m2; I2.m2 A.m2; I1.m2 B.m3; B.m3; I2.m3 class A : I1 { m1(){..}; m2(){..}; } A.m1; A.m2; Method Implementations class B : A, I2 {m3(){..}; } B.m3; A.m1; I1.m1; A.m2; I1.m2; B.m3; I2.m2; I2.m3; Methodenadressierung interface I1 { m1(); m2(); } interface I2 { m2(); 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 2002 • http://www.msdn.microsoft.com/netframework/ • http://www.dotnetframework.de • http://dotnet.di.unipi.it/

  17. Ende... ...Fragen?

More Related