Linker Loader in NET August Steinbacher Vortragsberblick C
Linker & Loader in. NET August Steinbacher
Vortragsüberblick C++ vs. NET n Auffinden von Assemblies n Execution Model n Runtime Layout n Methodenadressierung n
Traditioneller Ansatz n Compiler Frontend: n n App 2. cpp Incl. h Compiler Zwischencode -> Native Code Platzhalter für imports & exports Objekt datei Linker: n n Parsen der High-Level-Syntax Kompilieren in Zwischencode Compiler Backend: n n App 1. cpp Erzeugen eines executable file Loader: n EXE Datei Platzieren des Executables im Speicher Loader Linker Image in MEM
. NET Modell n Compiler Frontend: n n Source Parsen der High-Level-Syntax Erzeugen von Zwischencode + Metadaten Source Compiler • Assemblies n Compiler Backend (CLR): n n Assemblies Lokalisieren des Assemblies Erzeugen von Native Code • Kompilieren • Linken • Laden CLR Processes Memory
Ausführen von. NET n . exe Datei starten n Windows-loader startet die CLR Applikation läuft innerhalb der CLR Applikationsdomäne n Isoliert Applikationen voneinander • Laden aller Assemblies, Module und Typen • Methodentabellen der Typen • Statische Felder und Objekte n n Side-by-Side Execution Eintrittspunkt n Schlüsselwort. entrypoint in PE-Datei
3 Levels of Loading n Laden der PE-Datei von Disk n n n PE-Datei Laden des Assemblies n n n Einziger Festplattenzugriff Enthält Metadaten Aufgrund der Metadaten Sicherheitsmanager prüft Rechte Assemblies Laden der Typen n Classloader String Integer Object
Lokalisieren von Assemblies n Assembly Resolver n n n Öffentliche Assemblies n n n Name des gesuchten Assemblies Versionsinformation Informationen über App. Domain Konfigurationsdateien GAC Codebase-Hints in Konfigurationsdateien Private Assemblies n n Im Applikationsverzeichnis Probing
Lokalisieren von Assemblies Assembly. Load(name) N Public Key? J J In GAC? Lade File aus GAC N <Code. Base> Vorhanden? J J Lade File von <Code. Base> N N Probing erfolgreich? N Passt File? J Passt File? N Assembly. Load endet mit Fehler J Lade File
Probing n 4 Kriterien: n n Applikationsverzeichnis Culture-Attribut Assembly Name Relativer Suchpfad [App. Dir] / [Assembly name]. dll [App. Dir]/ /[Assembly [culture] /name] [Assembly name]. dll [App. Dir] / [binpath] / [Assembly name]. dll [App. Dir] / [culture] / [Assembly name]. dll [App. Dir]/ /[binpath]/ /[Assembly [culture] /name] [Assembly name]. dll [App. Dir] / [Assembly name]. dll C: /App/code. dll [App. Dir] / [binpath] / [culture] / [Assembly name]. dll C: /App/en-US/code. dll C: /App/code. dll C: /App/shared/code. dll C: /App/en-US/code. dll C: /App/shared/en-US/code. dll C: /App/shared/code. dll C: /App/shared/en-US/code. dll
Laden eines Typs T n Durch Classloader n n 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 n Verifikation der Typsicherheit n 4 Kategorien • • Ungültig Gültig Typsicher Verifizierbar Ungültig Verifizierbar Typsicher Gültig
Execution Model Source Code Policy Compiler csc, jsc, . . . Policy Manager Assembly Info Class List Assembly Loader PE Verifikation GAC App. Dir Assembly Erteilte Rechte Class Loader Assembly PE File + MSIL + Metadaten Runtime Layout Method JIT Native Code
Objektinstanzen Instance of A Heap Private EE Memory Instance Data Method Table A Instance of B Instance Data Method Table B Instance of A Instance Data Sync Block Table
Runtime Layout Object Reference Index Object Header Instance Data Sync Block Table GCDesc Module Interface map Method. Table JMI thunk „Hot Data“ Class Loader „Cold Data“ Assembly App Domain EEClass Prestub ptr Method. Desc Field. Desc Prestub Compiled method
Method Table & Interface Map Method Table GCDesc Interface Map 1 2 EEClass Method. Table header 3 Inherited virtuals 5 Introduced virtuals Instance and static methods 4
Methodenadressierung interface I 1 { m 1(); m 2(); } class A : I 1 { m 1(){. . }; m 2(){. . }; } class B : A, I 2 {m 3(){. . }; } class C : B { I 2. m 2() {. . }; } A. m 1; I 1. m 1 A. m 2; I 1. m 2 A. m 1; I 1. m 1; A. m 2; I 1. m 2; I 2. m 2 B. m 3; I 2. m 3 A. m 1; I 1. m 1; A. m 2; I 1. m 2; B. m 3; I 2. m 2; I 2. m 3; Method Implementations interface I 2 { m 2(); m 3(); }
Quellen n Don Box, Chris Sells: Essential. NET, The Common Language Runtime, Addison-Wesley 2003 n Dave Stutz, Ted Neward, Geoff Shilling: Shared Source CLI Essentials. O'Reilly 2003 n W. Beer, D. Birngruber, H. Mössenböck, A. Wöß: Die. NETTechnologie, dpunkt. verlag 2002 n http: //www. msdn. microsoft. com/netframework/ n http: //www. dotnetframework. de n http: //dotnet. di. unipi. it/
Ende. . . Fragen?
- Slides: 17