Was ist in einer DLL und wie funktioniert es?

Ich beziehe mich in meinem C # -Code immer auf DLLs, aber sie sind ein Rätsel geblieben, das ich gerne klären möchte. Dies ist eine Art Brain Dump mit Fragen zu DLLs.

ch verstehe, dass eine DLL eine dynamisch verknüpfte Bibliothek ist, was bedeutet, dass ein anderes Programm zur Laufzeit auf diese Bibliothek zugreifen kann, um "Funktionalität" zu erhalten. Beachten Sie jedoch das folgende ASP.NET-Projekt mitWeb.dll undBusiness.dll (Web.dll ist die Front-End-Funktionalität und verweist aufBusiness.dll für Typen und Methoden).

n welchem Punkt tutWeb.dll dynamisch mit @ verknüpfBusiness.dll? Sie stellen fest, dass die Windows-Festplatte bei der Verwendung von Word (usw.) wegen scheinbar kleiner Aufgaben häufig überlastet wird, und ich gehe davon aus, dass Word nicht mehr funktioniert und die Funktionalität von anderen DLLs dynamisch verknüpft wir

1a. Was lädt und verknüpft außerdem die DLL - das Betriebssystem oder ein Laufzeit-Framework wie das .NET-Framework?

1b. Was ist der Prozess der "Verknüpfung"? Werden Kompatibilitätsprüfungen durchgeführt? In denselben Speicher laden? Was heißt eigentlich Verlinken?

Was führt eigentlich den Code in der DLL aus? Wird es vom Prozessor ausgeführt oder befindet sich eine andere Übersetzungs- oder Kompilierungsstufe, bevor der Prozessor den Code in der DLL versteht?

2a. Was wird bei einer in C # .NET erstellten DLL ausgeführt: das .NET-Framework oder das Betriebssystem direkt?

Funktioniert eine DLL von Linux auf einem Windows-System (falls vorhanden) oder sind sie betriebssystemspezifisch?

Sind DLLs spezifisch für ein bestimmtes Framework? Kann eine mit C # .NET erstellte DLL von einer mit beispielsweise Borland C ++ erstellten DLL verwendet werde

4a. Wenn die Antwort auf 4 "Nein" lautet, wozu dient dann eine DLL? Warum verwenden die verschiedenen Frameworks keine eigenen Formate für verknüpfte Dateien? Beispiel: Eine in .NET integrierte .exe-Datei weiß, dass ein Dateityp von .abc in den Code eingebunden werden kann.

urück zumWeb.dll / Business.dll Beispiel - Um einen Klassentyp eines Kunden zu erhalten, muss ich auf @ verweiseBusiness.dll vonWeb.dll. Dies muss bedeuten, dassBusiness.dll enthält eine Art Spezifikation, was eine Kundenklasse eigentlich ist. Wenn ich mein @ kompiliert hätBusiness.dll file in, say, Delphi: Würde C # es verstehen und in der Lage sein, eine Kundenklasse zu erstellen, oder gibt es eine Art Header-Info oder etwas, das besagt "Hey, tut mir leid, dass Sie mich nur von einer anderen Delphi-DLL verwenden können"?

5a. Gleiches gilt für Methoden; kann ich ein @ schreibCreateInvoice() -Methode in einer DLL, kompilieren Sie sie in C ++ und greifen Sie dann auf sie zu und führen Sie sie in C # aus. Was hindert oder erlaubt es mir, dies zu tun?

eim Thema DLL-Hijacking muss die (fehlerhafte) Ersatz-DLL mit Sicherheit die genauen Methodensignaturen und -typen enthalten, die gerade entführt werden. Ich nehme an, das wäre nicht schwer, wenn Sie herausfinden könnten, welche Methoden in der ursprünglichen DLL verfügbar waren.

6a. Was in meinem C # -Programm entscheidet, ob ich auf eine andere DLL zugreifen kann? Wenn meine entführte DLL genau die gleichen Methoden und Typen wie das Original enthalten würde, aber in einer anderen Sprache kompiliert würde, würde es funktionieren?

as ist DLL-Import und DLL-Registrierun

Antworten auf die Frage(6)

Ihre Antwort auf die Frage