C++ 是否可以加载转储进程?

C++ 是否可以加载转储进程?,c++,windows,winapi,assembly,process,C++,Windows,Winapi,Assembly,Process,我想知道是否有可能转储一个进程,然后将其加载到内存中,这样它将处于与转储时相同的状态。 例如,我打开notepad.exe并在其中键入内容。我把它的内存保存到一个文件中,然后我可以随时加载它,它有我以前键入的文本。 如何做到这一点?不,一般来说,不重写操作系统来支持它是不现实的。虽然从理论上讲,您可以保存一个进程的内存,并将状态注册到一个文件中,然后在一个新进程中恢复完全相同的状态,但您仍然会丢失一些东西。旧进程的句柄都无效。不仅仅是文件句柄,还有窗口句柄之类的东西。新进程中不存在旧进程的窗口。

我想知道是否有可能转储一个进程,然后将其加载到内存中,这样它将处于与转储时相同的状态。 例如,我打开notepad.exe并在其中键入内容。我把它的内存保存到一个文件中,然后我可以随时加载它,它有我以前键入的文本。
如何做到这一点?

不,一般来说,不重写操作系统来支持它是不现实的。虽然从理论上讲,您可以保存一个进程的内存,并将状态注册到一个文件中,然后在一个新进程中恢复完全相同的状态,但您仍然会丢失一些东西。旧进程的句柄都无效。不仅仅是文件句柄,还有窗口句柄之类的东西。新进程中不存在旧进程的窗口。您可以重新创建它们,但如果没有操作系统的配合,就无法确保新创建窗口的窗口句柄具有与旧窗口句柄相同的值


请注意,对于某些类型的句柄,Windows实际上会随机化句柄的一部分,这意味着即使您知道它们的分配顺序,您仍然无法获取旧的句柄值。

这不是Perl过去所做的吗?您希望通过一个不知道您将要做什么的任意外部进程来实现这一点吗?这不是小事,需要在内核级别完成。它需要以相同的内存布局加载回相同的地址空间。您还必须管理打开的文件句柄,在加载应用程序时,并非所有这些句柄都可以恢复。您还必须防止其他进程修改应用程序打开的文件,否则应用程序可能不太喜欢它。如果这不是你的意思,你的问题是不清楚的,否则它太宽泛了。你问题的答案是:是的,这是可能的。系统正是这样做的,以实现。如果你想自己做到这一点,就要为陡峭的学习曲线做好准备。如果你不得不问,你离一个工作的实现还有几年的时间。好吧,如果你导致了一个coredump,这正是调试器对coredump文件所做的。