Kann ich eine Bibliothek aus einem Speicherstream laden?

9

Kann ich eine Bibliothek aus einem Speicherstream laden? Zum Beispiel ist meine Bibliothek eine Datei codiert. Ich überprüfe einige Bedingungen und entschlüssele die Datei in einen Speicherstrom. Jetzt muss ich die entschlüsselte Bibliothek von diesem Strom in meine Anwendung laden und ihre Funktionen usw. Verwenden.

    
Andrey Bushman 20.08.2013, 10:19
quelle

1 Antwort

4

In Windows kann eine DLL nur aus einer Datei geladen werden - wie die Links vorschlagen, können Sie eine Ramdisk erstellen und diese als Laufwerk installieren, aber es gibt keinen Weg um die DLL durch eine Datei zu laden, die existiert in einem Dateisystem. Ein Teil des Grundes dafür ist, dass die DLL "bedarfsgeladen" ist, das heißt, das System lädt nicht die gesamte Datei in den Speicher auf einmal, es lädt die Teile, die tatsächlich verwendet werden, 4 KB (typischerweise) gleichzeitig. Es wird auch nicht in den Swap-Bereich ausgelagert, sondern einfach verworfen und neu aus der DLL geladen, wenn das System nicht genügend Speicher hat.

Linux funktioniert sehr ähnlich (ich weiß, dass es die gleiche Art von Nachfrage-Laden standardmäßig verwendet, aber nicht sicher, ob es einen Weg gibt), also glaube ich nicht, dass es auch anders geht , aber ich habe es in der Tiefe nicht untersucht.

Wenn Sie natürlich nur einen Code in Ihrer Anwendung verwenden möchten, den Sie in Ihrer executable-Datei als verschlüsselt / komprimiert / was auch immer speichern möchten, können Sie einen ausführbaren Speicher reservieren ( In Windows können Sie VirtualAlloc verwenden, um ausführbaren Speicher zuzuordnen. Sie müssen jedoch sicherstellen, dass Sie alle absoluten Speicheradressen in Ihrem Code verschieben, wenn Sie dies tun, sodass Sie die Verschiebungsinformationen in Ihrer ausführbaren Datei speichern müssen.

Die einfachste Lösung besteht darin, den Inhalt in eine Datei im Dateisystem zu entpacken und von dort zu laden.

    
Mats Petersson 20.08.2013, 10:29
quelle

Tags und Links