98-372 Understanding .NET Code Compilation

MTA 98-372 von Microsoft. .NET Fundamentals

MTA 98-372 von Microsoft. .NET Fundamentals

Angelo Gramatica

Angelo Gramatica

Kartei Details

Karten 56
Sprache Deutsch
Kategorie Informatik
Stufe Universität
Erstellt / Aktualisiert 06.10.2013 / 22.01.2016
Weblink
https://card2brain.ch/box/98372_understanding_net_code_compilation
Einbinden
<iframe src="https://card2brain.ch/box/98372_understanding_net_code_compilation/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

CLR: Nenne 3 der wichtigsten Aufgaben der CLR

(Common Language Runtime)

Die CLR bildet das Herz des .NET Frameworks. Sie ist die Umgebung in der MSIL läuft. Sie hat die Hauptaufgaben:

  • Garbage Collection (GC):
  • Code Access Security (CAS): Stellt Rechte des Codes auf die Systemressourcen bereit, abhängig von den Sicherheitseinstellungen auf dem PC
  • Code Verification: Stellt sicheres Ausführen des Codes sicher
  • JIT: Just in time Compliation, der MSIL wird zur Laufzeit in Maschienencode umgewandelt.

Der JIT Compiler ist ein cleveres Ding. Welches sind die 3 Modi, in denen der Compiler Code übersetzt und was sind die Unterschiede?

  • Pre-Jit: kompiliert tutti cuanti im Voraus
  • Econo-Jit: kompiliert vor zu, was zur Laufzeit verwendet wird. Werden sie nicht mehr verwendet, werden sie wieder gelöscht.
  • Normal-Jit: kompiliert vor zu, was zur Laufzeit verwendet wird, der Code bleibt aber im Cache

Eine assembly die nur mit dem public key signiert wurde, würde die .NET security verification nicht bestehen. Wie kann man mit sn.exe die Assembly MathUtil.dll registrieren, dass sie die security verification überspringt?

(Kommandozeilenaufruf)

sn.exe -Vr MathUtil.dll

Erkläre den Kompilierungsvorgang von Managed Code. Was geht vorne rein, was sind die Schritte dazwischen, wie heisst alles, was kommt wann hinten raus?

  1. Der Sourcecode wird vom .NET Compiler kompiliert
  2. Es entsteht CIL in Form einer .dll oder .exe
  3. Zur Laufzeit wird der CIL von der Runtime durch den JIT zu native (Maschinencode) kompiliert.

Für was ist die AssemblyKeyNameAttribute class?

Gibt den Namen eines Schlüsselcontainers mit dem Schlüsselpar für den Starken Namen an. Um eine Assembly mit einem starken Namen zu bilden ist es essenziell dass man ein AssemblyKeyNameAttribute oder ein AssemblyKeyFileAttribute angibt. Mit andern Worten, gibt den Strong Name an.. das .snk Ding

Für was wird das Publicize.exe tool verwendet?

Das ist ein Command Line Tool das eine Assembly generiert, die public types hat. Diese public types binden alle privaten Typen einer anderen Assembly. Dies kann einem helfen Unit Tests zu erzeugen die private Typen einsehen wollen.

Ich habe 2 Möglichkeiten zu erreichen, dass eine Anwendung eine shared Assembly mit neuer Version verwendet. Welche sind das?

  • Im Config File einen <bindingRedirect> einfügen, dass alle Verweise auf die neue Assembly zeigen
  • Über die Publisher Policy im GAC

In welcher Beziehung stehen CLR und CLI?

Die CLR ist Microsofts Implementation der CLI

Was bedeutet "Language interoperability"?

Das ist ein .NET Feature das es möglich macht dass Code der in einer bestimmten Sprache geschrieben wurde mit Code einer anderen Sprache zusammenarbeiten kann.

Was bedeutet eine Assembly signieren und warum macht man das?

Damit eine Assembly dem GAC hinzugefügt werden kann, muss die Assembly auch in den GAC gehören und dafür muss sie mit einem Starken Namen signiert sein. Das dafür kryptographische Schlüsselpaar kann man mit dem StrongNam Utility sn.exe erzeugen.

Was passiert technisch gesehen beim signieren einer Assembly?

Es wird ein cryptographischer Hash erzeugt, welcher mit dem private Key verschlüsselt wird. Der Hash wird in der Assembly gespeichert. Der Public Key wird im Manifest gespeichert.

Was bedeutet VES und was ist es?

  • Virtual Execution System
  • Dies VES bestimmt wie code anhand der Metadaten verlinkt wird.  Das platformabhängige VES übernimmt die JIT in Abhängigkeit des Betriebssystems.

Was beschreiben die Metadaten?

Die Typen, die im Code definiert wurden und externe Typen (von eingebundenen Assemblies)

Was bezeugt es, wenn die Identifizierung einer signierten Assembly erfolgreich war? (2 Aspekte)

  1. Der Inhalt der Assembly wurde nicht mehr manipuliert, nachdem die Assembly signiert wurde
  2. Nur die Person die den private key besitzt der zu dem public key passt kann die Assembly signiert haben

Was ist CLS? 

(Common Language Specification)

Das ist Bestandteil der CLI und definiert Regeln an die sich Sprachen halten müssen, wenn sie CLI compliant sein wollen.

Was ist COM?

Eine Technologie von Microsoft zum Component Softeware Development. COM ist sprachunabhängig und ein binärer Standart.

Was ist der CSP?

Die Schlüsselpaare, die man für einen Starken Namen braucht und mit sn.exe erzeugen kann, werden im Cryptographic Service Provider  gespeichert. 

Was ist der Unterschied zwischen den Metadaten der Assembly und dem Manifest?

Das Manifest bietet Informationen globaler Natur über die Assembly, wie Version u nd Abhängigkeiten von andern Assemblies.

Die Methadaten beschreiben hingegen wirklich das innere der Assembly, die beschreiben die Typene und Methoden.

Was ist die CLI?

Common Language Infrastructure

Das ist ein ISO Standart, der Systeme spezifiziert, die sprach- und plattformneutrale Anwendungsentwicklung ermöglichen.

Was ist die Grundvoraussetzung, dass eine Assembyl im GAC zugelassen wird?

Sie muss signiert sein

Was ist die publisher policy und was kann ich damit machen?

Die publisher policy ist eine XML basierte Assembly mit der ich Assemblies im GAC wie mit einem Configfile beeinflussen kann. Z.B. kann ich alle Verweise auf eine Assembly einer bestimmten Version auf eine andere Version umhängen. Sie wird mit einem bestimmten Upgrade der Assembliy veröffentlicht damit künftig eine spezifische Assembly verwendet wird. 

Was ist eine Assembly und aus welchen 4 Hauptbestandteilen besteht sie?

Eine Assembly ist entweder eine .dll oder eine .exe. Sie besteht also aus Klassen, die in CIL compiliert wurden und sie besteht aus:

  • Dem Assembly Manifest (bildet hauptsächlich Version und Identität)
  • Metadaten
  • CIL Code
  • Ressourcen wie Bilder usw.

Was ist CAS?

Code Access Security

CAS ist ein Sicherheitssystem das managed assemblies authorisiert um Zugang zu Systemresourcen zu erhalten. Es erlaubt Administratoren und Entwicklern Applikationsauthorisation zu kontrollieren, ähnlich der Art wie  man die Möglichkeit hat Benutzer zu authorisieren.

CAS hat folgende Funktionen:

Es definiert Permissions und Sets von Permissions, welche ganze Sets von Zugangsrechten zu verschiedenen Systemresourcen darstellt.

Es ermöglichts Administratoren um die Sicherheits Policy zu konfigurieren

Es ermöglicht Code Fragen nach der Berechtigung, die es braucht zu stellen.

Es gewährleistet Erlaubnis zu jedem Assembly das geladen wird

Es verfügt Einschränkungen auf Code zur Laufzeit.

Was kann man mit dem ILSpy machen?

Man kann durch den Inhalt einer Assembyl browsen und man kann auch eine Assembly decompilen

  • Was macht der IL Assembler (Ildasm.exe)n und
  • was kann man damit machen? 

  • Erstellt aus einer MSIL Datei ein exe, egal ob das Ding funzt oder nicht.
  • Man kann sich damit den Inhalt einer Assembly anschauen

Was repräsentiert der Public Key?

Er repräsentiert die Indentität des Publishers. Er kann geteilt werden.

Was sind die 4 Dinge, die die Identität einer Assembly ausmachen? Und Wo werden sie abgespeichert?

  • Assembly Versionsnummer
  • Assembly Namen
  • Öffentlicher Schlüssel (wenn die Assembly strong named ist)
  • Kultur

Abgespeichert im Manifest

Was sind die beiden Mindestanforderungen an eine Shared Assembly?

  • Sie muss einen starken Namen haben
  • Sie muss im GAC installiert sein

Was sind die beiden Möglichkeiten eine Assembly im GAC zu installieren?

  • Mit dem Windowsinstaller (beim Installieren der SW über den Installationsvorgang)
  • mit dem gacutil.exe Tool

Was sind die drei Hauptvorteile der Metadata

  • Durch die Methadaten sind Assemblies selbstbeschreibend (das heisst, sie beshreiben, was eine Assembly beinhaltet usw.)
  • Die Methadaten gewährleisten Sprachkompatibilität. Das heisst sie haben Infos, die genügen, dass Assemblies mit Assemblies aus anderen verwalteten Programmiersprachen zusammenarbeiten können
  • Mit Hilfe von Attributen kann man die Methadaten erweitern und somit selber Informtionen zur Verfügung stellen. Attribute sind eine spezielle Art von Methadaten

Was sind die drei Hauptvorteile der zweiteiligen Kompilation? (Source code -> .NET Language Compiler -> CIL -> CLR -> Machine code)

  1. Man muss für jede einzelne Sprache nicht einen "vollen" Compiler schreiben.
  2. Man muss sich nicht um die Prozessorarchitektur kümmern. Dieses Problem wird bei der JIT gelöst.
  3. Während der Intermediateübersetzung kann man Metadata dem Code hinzufügen, welche weitere Information über die Klassen und ihre Members beinhalten können.

Was sind die drei Hauptvorteile, wenn man eine Assembly im GAC installiert?

  1. Integrität (Garantiert dass die Assembly sich nicht geändert hat seit sie gebildet wurde)
  2. Security (nur ein Administrator kann seinen Inhalt verändern)
  3. Eindeutigkeit, Side by Side Versioning (Eine Assembly mit dem selben Namen kann in verschiedenen Versionen vorhanden sein.)

Was sind die drei Vorteile einer strong named assembly?

  • Eine SNA (strong named assembly) garantiert die einzigartigkeit des Namens, da er auf einem Keypaar basiert (privatem und public Key). Jedes mal wenn die Assembly gebildet wird, wird der private Schlüssel neu gebildet.
  • Starke Namen schützen die Namensherkunft. Es ist sichergestellt dass niemand eine Folgeversion der Assembly generieren kann. Für die Benutzer ist sichergestellt, dass die Version der Assembly, die geladen wird, vom selben Herausgeber stammt, der die Version erstellt hat, in der die Anwendung erstellt wurde.
  • Starke Integritätsprüfung. Durch das Übergeben der .NET Framework-Sicherheitsprüfung is sichergestellt, dass sie nicht verändert wurde seit sie gebuildet wurde.

Was sind die zentralen Informationen, die die VES braucht um Code auszuführen?

Metadaten. Die VES ist metdata-driven.

Was sind die zwei Schritte um eine Assembly zu signieren?

  • mit dem sn.exe Tool einen Starken Namen erstellen
  • in den Properties des Projektes im VS unter Signieren den strong name eintragen.

Was versteht man unter "delay signing"?

Das ist, wenn man während der Entwicklung die Assembly nur mit dem Public Key signiert und nicht mit dem gesampten Keypair. Erst wenn man ausliefert wird richtig gesigned

Was wird im Zusammenhang mit shared assemblies unter side-by-side execution verstanden?

Wenn unterschiedliche Applikationen unterschiedliche Versionen einer Assembly verwenden.

Wechles ist keine Charakteristik von managed code?

Welche 4 Informationen werden in einem Manifest gespeichert?

  • Identität (mit seinen 3-4 Informationen je nach strong named oder nicht)
  • Eine Liste aller Files in der Assembly
  • Sicherheitsrichtlinien, nach denen der Zugriff auf die Assembly festgelegt wird
  • Die von der Assembly veröffentlichten Typen

Welche 4 Spezifikationen gibt die CLI vor?

  • CTS
  • CLS
  • Metadata
  • Virtual Execution System (VES)