17
Linker & Loader in .NET August Steinbacher

Linker & Loader in .NET

  • Upload
    gabe

  • View
    59

  • Download
    1

Embed Size (px)

DESCRIPTION

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: - PowerPoint PPT Presentation

Citation preview

Page 1: Linker & Loader in .NET

Linker & Loader in .NET

August Steinbacher

Page 2: Linker & Loader in .NET

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

Page 3: Linker & Loader in .NET

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.cpp Incl.h

Objektdatei

Objektdatei

EXEDatei

Imagein MEM

Compiler

Linker

Loader

App1.cpp

Page 4: Linker & Loader in .NET

.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

Assemblies

Compiler

CLR

ProcessesMemory

Page 5: Linker & Loader in .NET

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

Page 6: Linker & Loader in .NET

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

Page 7: Linker & Loader in .NET

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

Page 8: Linker & Loader in .NET

Lokalisieren von AssembliesAssembly.Load(name)

Public Key?

Lade FileJ

In GAC?

J

Lade File aus GACJ

<CodeBase>Vorhanden?

N

Passt File?J

Probingerfolgreich?

N

N

Passt File?J

N

Lade File von <CodeBase>

J

Assembly.Load endet mit Fehler

N

N

Page 9: Linker & Loader in .NET

Probing 4 Kriterien:

Applikationsverzeichnis Culture-Attribut Assembly Name Relativer Suchpfad

[AppDir] / [Assembly name].dll[AppDir] / [Assembly name] / [Assembly name].dll

C:/App/code.dllC:/App/code/code.dll

[AppDir] / [culture] / [Assembly name].dll[AppDir] / [culture] / [Assembly name] / [Assembly name].dll

C:/App/en-US/code.dllC:/App/en-US/code/code.dll

[AppDir] / [binpath] / [Assembly name].dll[AppDir] / [binpath] / [Assembly name] / [Assembly name].dll

C:/App/shared/code.dllC:/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.dllC:/App/shared/en-US/code/code.dll

Page 10: Linker & Loader in .NET

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

VerifizierbarUngültig

Page 11: Linker & Loader in .NET

Execution ModelSourceCode Compiler

csc, jsc,...Assembly

PE File + MSIL+ Metadaten

PE Verifikation

GACAppDir

AssemblyLoader

Assembly InfoClass List

JIT Native CodeClassLoader

RuntimeLayout

Assembly

MethodClass

PolicyManager Policy

Erteilte Rechte

Page 12: Linker & Loader in .NET

Objektinstanzen

Instance Data

Instance Data

Instance Data

Method Table A

Method Table B

Sync Block Table

Instance of A

Instance of B

Instance of A

Heap

Private EE Memory

Page 13: Linker & Loader in .NET

InstanceData

ObjectHeader

Index Sync Block Table

MethodTable

EEClass

Runtime Layout

GCDesc

Object Reference

Interfacemap

Compiledmethod

JMI thunkModule

ClassLoader

Assembly

AppDomain

„Hot Data“

„Cold Data“

FieldDesc

MethodDescMethodDesc

Prestub ptrPrestub

Prestub ptr

Page 14: Linker & Loader in .NET

Method Table & Interface MapInterface Map12345

GCDesc

MethodTableheader

Inheritedvirtuals

Introducedvirtuals

Instance andstatic

methods

Method Table

EEClass

Page 15: Linker & Loader in .NET

Method Im

plementations

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

Page 17: Linker & Loader in .NET

Ende...

...Fragen?