在沒有磁碟寫回的情況下從記憶體執行二進位檔案
在您的程式中,您已在變數中嵌入了一個二進位文件,並且正在尋找一種執行方法它沒有磁碟寫回。這涉及找到一種直接從記憶體執行二進位檔案的機制。
C/C 方法(使用mprotect() 系統呼叫)
使用C 或C(透過CGO)在Go 中),您可以利用Linux 中的mprotect () 系統呼叫來操作記憶體保護。此呼叫允許您更改記憶體區域的權限,使其可執行。一旦該區域被保護為可執行文件,您就可以透過跳到它來執行它。
#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 方法(彙編技術)
在 Go 中,沒有允許您指定記憶體保護的直接系統呼叫。但是,您可以使用彙編技術來操縱記憶體保護,並使用 syscall.Syscall 函數從 Go 程式碼中呼叫 mprotect() 系統呼叫。
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])))()
注意:
以上是如何從記憶體執行二進位檔案而不寫入磁碟?的詳細內容。更多資訊請關注PHP中文網其他相關文章!