Binärdateien aus dem Speicher ohne Festplatten-Writeback ausführen
Sie haben in Ihrem Programm eine Binärdatei in eine Variable eingebettet und suchen nach einer Möglichkeit zur Ausführung es ohne Festplatten-Writeback. Dazu gehört die Suche nach einem Mechanismus, um die Binärdatei direkt aus dem Speicher auszuführen.
C/C-Ansatz (mit mprotect()-Systemaufruf)
Mit C oder C (über CGO in Go) können Sie den Systemaufruf mprotect() unter Linux nutzen, um den Speicherschutz zu manipulieren. Mit diesem Aufruf können Sie die Berechtigungen eines Speicherbereichs ändern und ihn so ausführbar machen. Sobald die Region als ausführbar geschützt ist, können Sie sie ausführen, indem Sie hineinspringen.
#include <sys/mman.h> int main() { // ... (Load binary into memory) // Change memory protection to executable mprotect(binary_buffer, binary_size, PROT_READ | PROT_WRITE | PROT_EXEC); // Jump into the executable region ((void (*)(void))binary_buffer)(); }
Go-Ansatz (Montagetechniken)
In Go gibt es keine direkte Systemaufrufe, mit denen Sie den Speicherschutz festlegen können. Sie können jedoch Assemblertechniken verwenden, um den Speicherschutz zu manipulieren, indem Sie die Funktion syscall.Syscall verwenden, um den Systemaufruf mprotect() aus dem Go-Code aufzurufen.
import ( "syscall" "unsafe" ) // ... (Load binary into memory) // Change memory protection to executable syscall.Syscall(syscall.SYS_MPROTECT, uintptr(unsafe.Pointer(&binary_buffer[0])), uintptr(binary_size), syscall.PROT_READ|syscall.PROT_WRITE|syscall.PROT_EXEC) // Jump into the executable region (((func()) unsafe.Pointer(&binary_buffer[0])))()
Hinweis:
Das obige ist der detaillierte Inhalt vonWie kann ich eine Binärdatei aus dem Speicher ausführen, ohne auf die Festplatte zu schreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!