python - 执行嵌入在 Python 脚本中的 .exe 文件

标签 python process binary exe

如何将一个 exe 文件(存储为 base64 编码字符串)加载到内存中并在不将其写入磁盘的情况下执行它?

重点是,放置某种控制/密码/串行系统并用 py2exe 编译它。然后我可以在我的代码中随时执行该嵌入式文件。

最佳答案

Python 执行子进程的所有机制都需要一个文件名。

底层的 CreateProcess 也是如此Win32 API 中的函数,因此甚至没有通过降低到该级别来绕过它的简单方法。

有一种方法可以通过下拉到 ZwCreateProcess/NtCreateProcess 来做到这一点.如果您知道如何使用低级 NT API,this post应该是您需要了解的全部内容。如果您不这样做……在 SO 答案中解释太多了。

或者,当然,您可以创建或使用 RAM 驱动器,甚至模拟虚拟文件系统,但作为避免创建文件的尝试,这有点愚蠢。

因此,正确的答案是将 exe 写入文件,然后执行它。例如,像这样:

fd, path = tempfile.mkstemp(suffix='.exe')
code = base64.b64decode(encoded_code)
os.write(fd, code)
os.fchmod(fd, 0o711)
os.close(fd)
try:
    result = subprocess.call(path)
finally:
    os.remove(path)

这应该适用于 Windows 和 *nix,但它完全未经测试,并且可能至少在一个平台上存在错误。

显然,如果您想多次执行它,请不要删除,直到您完成它。或者只是使用一些适当的持久目录,只有在它丢失或过时时才写入它。

关于python - 执行嵌入在 Python 脚本中的 .exe 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16406156/

相关文章:

c - 确定进程是否正在运行?

在 C 中从十六进制创建二进制文件

将 Ascii 码转换为二进制码

node.js - node/mocha http POST 二进制文件(通过正文,而不是表单)以解析错误结尾

Python/Pandas - 将带有 NaN 的列中的电话号码从 float 转换为整数

c# - 可以全屏打开程序的应用程序?

python - 为什么我的 Python 函数不将列转换为日期时间格式

c# - 复制文件和文件夹,保留 Windows 7 界面

Python:替换文件中的多个项目

python - Windows 上的 os.pipe 非阻塞读取