c - 如何从内存运行任意脚本或可执行文件?
问题描述
我知道我可以使用系统调用,例如execl("/bin/sh", "-c", some_string, 0)
使用特定的 shell/解释器来解释 shell 代码的“片段”。但在我的情况下,我在内存中有一个任意字符串,它代表一些需要运行的完整脚本。也就是说,这个字符串/内存缓冲区的内容可能是:
#! /bin/bash
echo "Hello"
或者他们可能是:
#! /usr/bin/env python
print "Hello from Python"
我想理论上字符串/缓冲区甚至可以包含一个有效的二进制可执行文件,尽管这不是一个特别的优先级。
我的问题是:有没有办法让系统直接从我给它的内存缓冲区启动子进程,而不将其写入临时文件?或者至少,一种将字符串提供给 shell 并将其路由到正确解释器的方法?
似乎我发现的所有系统调用都需要一个现有可执行文件的路径,而不是需要一个可执行文件本身的低级别。我不想自己解析shebang或任何东西。
解决方案
您没有指定操作系统,但由于#!
特定于 Unix,我认为这就是您所说的。
据我所知,没有系统调用会从内存块而不是文件加载程序。加载程序的最低级别的系统调用是execve()
函数,它需要加载文件的路径名。
推荐阅读
- django - Django:传递一些参数以在 Django urls 中查看
- statistics - 动态输出的权重函数计算
- c# - 使用 Authorize.Net 的 Webhook 通知
- html - 带有图像的 div 行为异常
- nuget - 如何将 NuGet 工具文件包含到目标项目 Nuget 工具文件夹中?
- migration - 使用 flyway 进行数据库迁移
- python-3.x - 如何在请求的客户端使用 Python 中的套接字等待键盘输入时处理数据
- angularjs - 与 ionic webview 5.0.0 一起使用时,无法显示来自内部存储的图像。在科尔多瓦应用程序中
- algorithm - 尝试实现固定步长的梯度下降算法
- sql - 根据优先级 SQL Server 更新列值