如何将一个 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/