如何从内存中执行可执行文件?

时间:2017-06-20 13:08:08

标签: c go binary executable

假设我在编译期间将二进制文件包含在我的程序中,所以我将它保存在类似的变量中 var myExec =[]byte{'s','o','m','e',' ','b','y','t','e','s'} 所以我的问题是,是否有办法在我的程序中执行这个二进制文件而不将其写回光盘并调用exec或fork呢? 我正在Golang中编写我的应用程序,所以我正在寻找的方法是使用Go或C(使用CGO)来完成它。

基本上,我正在寻找像将bash脚本管道化为bash的东西,我不知道在哪里可以管道本机可执行文件的字节来运行它并将其写回磁盘然后让os再次读取它还有很多额外的工作要做

1 个答案:

答案 0 :(得分:3)

在C和假设Linux中,您可以通过mprotect()系统调用来更改内存区域的保护,以便可以执行它(即:转动数据区域进入代码区域)。之后,您可以通过跳转来执行该内存区域。