Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在内存中运行EXE_Python_Memory Management_Exe - Fatal编程技术网

Python在内存中运行EXE

Python在内存中运行EXE,python,memory-management,exe,Python,Memory Management,Exe,我正试图用python在内存中执行.exe 但它不起作用。。。 有什么帮助吗 错误:进程已完成,退出代码为-1073741819(0xC0000005)。。 python中只有一个.exe可以工作。。(从python转换为exe) 此函数通过参数传递代码。。。它是一个字节数组 def executar(code): ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(code)), ct

我正试图用python在内存中执行.exe 但它不起作用。。。 有什么帮助吗

错误:进程已完成,退出代码为-1073741819(0xC0000005)。。 python中只有一个.exe可以工作。。(从python转换为exe)

此函数通过参数传递代码。。。它是一个字节数组

 def executar(code):
    ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(code)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
    buf = (ctypes.c_char * len(code)).from_buffer(code)
    ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr), buf, ctypes.c_int(len(code)))
    ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0), ctypes.c_int(0), ctypes.c_int(ptr), ctypes.c_int(0), ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0)))
    ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht), ctypes.c_int(-1))
我正在尝试几个.exe文件。。。。 我在这里发这篇帖子:


但是错误仍然存在

我认为代码是正确的(未经测试),但问题是您试图将一个以大量元数据开头的exe文件传递给一个需要纯代码的函数。您链接的示例使用的是直接二进制代码,执行时不进行任何转换。它们只是一连串的指令

要加载一个真正的exe(PE)文件,您需要做更多的工作—解析头、加载所需的库、准备堆/堆栈、准备其他部分和映射,等等


有关PE格式的更多信息,请访问

我不理解这个问题。它如何不在内存中执行?描述一下这段代码是如何失败的可能很有用。您是否收到任何一行的异常?一旦线程生成,它会崩溃吗?如果其中一个windows调用失败,则说明
GetLastError
?定义“不工作”。请说出您期望发生的事情和实际发生的事情。您能举例说明
code
的内容吗?您好,我确实尝试了几个.exe文件。。python中只有一个可以工作。。(从python转换为exe)。。normal exe返回此错误:进程结束,退出代码为-1073741819(0xC0000005)@viraptoryes,您可能是对的。。但这似乎需要做很多工作。。您知道解决我的问题的其他方法吗?您可能被告知EXE文件是可执行二进制代码的错误信息。它们不是,它们是半生不熟的二进制文件。启动可执行文件时,操作系统会为您做大量工作(1)解析头文件(2)加载其他DLL(3)补丁引用表等。因此,您需要将可执行文件转换为直接二进制代码(预加载),或者您需要自己进行此类解析。此外,大多数现代操作系统并不真正将可执行文件加载到内存中,它们将磁盘上的代码段映射为虚拟内存扩展。因此,当CPU跳转到一段不是内存的代码时,操作系统会收到一个页面错误,并在后台将该文件放入内存。这样操作系统就可以避免加载大量无法执行的二进制代码。好的,但我有一个.exe可以运行。。关于如何将可执行文件转换为二进制代码的任何提示?这取决于您想要实现什么以及您的限制。您可以使用CreateProcess执行文件。如果你只是想避免触碰驱动器,你可以尝试一种内存中的文件系统:如果你想偷偷摸摸的话,你必须用很难的方法,制作你自己的可加载PE加载器。
 def downloadandExecute(url): 
     response = requests.get(url) 
     code = bytearray(response.content) 
     executar(code)