+ All Categories
Home > Documents > Linker & Loader in.NET August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies...

Linker & Loader in.NET August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies...

Date post: 06-Apr-2015
Category:
Upload: alke-bolte
View: 105 times
Download: 0 times
Share this document with a friend
17
Linker & Loader in .NET August Steinbacher
Transcript
Page 1: Linker & Loader in.NET August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung.

Linker & Loader in .NET

August Steinbacher

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

Vortragsüberblick

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

Page 3: 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: 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 August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung.

.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 August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung.

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 August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung.

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 August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung.

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 August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung.

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 August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung.

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 August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung.

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 August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung.

Execution Model

SourceCode Compiler

csc, jsc,...Assembly

PE File + MSIL+ Metadaten

PE Verifikation

GAC

AppDirAssembly

Loader

Assembly InfoClass List

JITNative Code

ClassLoader

RuntimeLayout

Assembly

MethodClass

PolicyManager Policy

Erteilte Rechte

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

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 August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung.

InstanceData

ObjectHeader

Ind

ex Sync Block

Table

MethodTable

EEClass

Runtime Layout

GCDesc

Object Reference

Interfacemap

Compiledmethod

JMI thunkModule

ClassLoader

Assembly

AppDomain

„Hot Data“

„Cold Data“

FieldDesc

MethodDescMethodDesc

Prestub ptr

PrestubPrestub ptr

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

Method Table & Interface Map

Interface Map

1

2

3

4

5

GCDesc

MethodTableheader

Inheritedvirtuals

Introducedvirtuals

Instance andstatic

methods

Method Table

EEClass

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

Meth

od

Imp

lem

enta

tion

sMethodenadressierung

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 16: Linker & Loader in.NET August Steinbacher. Vortragsüberblick C++ vs.NET Auffinden von Assemblies Execution Model Runtime Layout Methodenadressierung.

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/

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

Ende...

...Fragen?


Recommended