Direkte Speicherausführung ausführbarer Dateien: Ein Vergleich von nativem und verwaltetem Code
Das Laden und Ausführen ausführbarer Dateien (.EXE-Dateien) direkt aus dem Speicher bietet Vorteile gegenüber der festplattenbasierten Ausführung. Während dies für (verwaltete) ausführbare .NET-Dateien relativ einfach ist, stellen nicht verwaltete ausführbare Dateien (wie notepad.exe
oder calc.exe
) eine größere Herausforderung dar. Um diesen Unterschied zu verstehen, muss der Lade- und Ausführungsprozess untersucht werden.
.NET-ausführbare Dateien profitieren von der Common Language Runtime (CLR). Die CLR übernimmt einen Großteil der komplexen Arbeit, einschließlich des Ladens der Bibliothek, der Assembly-Verifizierung und der Bereitstellung einer verwalteten Ausführungsumgebung. Dies vereinfacht die speicherbasierte Ausführung von .NET-Anwendungen.
Nativen ausführbaren Dateien fehlt diese Laufzeitunterstützung. Das Laden und Ausführen aus dem Speicher erfordert eine manuelle Emulation des Windows-Loaders. Dazu gehört das Laden der Portable Executable (PE)-Datei in den Speicher, das Anpassen der Speicheradressen durch Verschiebungs- und Korrekturprozesse und schließlich das Lokalisieren des Einstiegspunkts der ausführbaren Datei.
Dieser manuelle Prozess ist kompliziert und fehleranfällig. Für einen einfacheren Ansatz wird empfohlen, die ausführbare Datei mit Process.Start
von der Festplatte zu starten. Alternativ ist das vorübergehende Speichern der eingebetteten ausführbaren Datei vor der Ausführung auf der Festplatte eine praktikable Lösung.
Das obige ist der detaillierte Inhalt vonWie lade und führe ich native oder verwaltete ausführbare Dateien direkt aus dem Speicher aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!