首页 > 解决方案 > 如何从内存运行任意脚本或可执行文件?

问题描述

我知道我可以使用系统调用,例如execl("/bin/sh", "-c", some_string, 0)使用特定的 shell/解释器来解释 shell 代码的“片段”。但在我的情况下,我在内存中有一个任意字符串,它代表一些需要运行的完整脚本。也就是说,这个字符串/内存缓冲区的内容可能是:

#! /bin/bash

echo "Hello"

或者他们可能是:

#! /usr/bin/env python

print "Hello from Python"

我想理论上字符串/缓冲区甚至可以包含一个有效的二进制可执行文件,尽管这不是一个特别的优先级。

我的问题是:有没有办法让系统直接从我给它的内存缓冲区启动子进程,而不将其写入临时文件?或者至少,一种将字符串提供给 shell 并将其路由到正确解释器的方法?

似乎我发现的所有系统调用都需要一个现有可执行文件的路径,而不是需要一个可执行文件本身的低级别。我不想自己解析shebang或任何东西。

标签: cexecutable

解决方案


您没有指定操作系统,但由于#!特定于 Unix,我认为这就是您所说的。

据我所知,没有系统调用会从内存块而不是文件加载程序。加载程序的最低级别的系统调用是execve()函数,它需要加载文件的路径名。


推荐阅读