在没有磁盘写回的情况下从内存执行二进制文件
在您的程序中,您已在变量中嵌入了一个二进制文件,并且正在寻找一种执行方法它没有磁盘写回。这涉及找到一种直接从内存执行二进制文件的机制。
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中文网其他相关文章!