Ausführen von In-Memory-Binärdateien
Entwickler müssen häufig Binärdateien als Teil ihrer Anwendungen ausführen. Der herkömmliche Ansatz, die Binärdatei auf der Festplatte zu speichern und dann „exec“ oder „fork“ aufzurufen, kann jedoch ineffizient sein. In diesem Artikel wird eine Methode zum Ausführen von Binärdateien direkt aus dem Speicher untersucht, wodurch Schreibvorgänge auf die Festplatte überflüssig werden.
Hintergrund
Im bereitgestellten Codeausschnitt werden die Binärdaten gespeichert eine Variable mit dem Namen „myExec“. Das Ziel besteht darin, diese Binärdatei auszuführen, ohne sie zurück in das Dateisystem zu schreiben.
Lösung in C und Linux
In C ermöglicht Ihnen der Systemaufruf mprotect() um den Schutz einer Speicherregion zu ändern. Das bedeutet, dass Sie einen Datenbereich in einen Codebereich umwandeln können. Sobald diese Konvertierung abgeschlossen ist, können Sie den Speicherbereich ausführen, indem Sie hineinspringen.
Hier ist ein Beispiel, wie das gemacht werden könnte:
#include <sys/mman.h> int main() { // Assume we have an array of bytes representing the binary data. char myExec[] = {'s', 'o', 'm', 'e', ' ', 'b', 'y', 't', 'e', 's'}; // Convert the data region into a code region. mprotect(myExec, sizeof(myExec), PROT_READ | PROT_WRITE | PROT_EXEC); // Execute the code. ((void (*)())myExec)(); return 0; }
Das obige ist der detaillierte Inhalt vonWie kann ich eine Binärdatei direkt aus dem Speicher in C unter Linux ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!