<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Prozessspeicher einfrieren, speichern und wieder fortfahren?]]></title><description><![CDATA[<p>Hallo,</p>
<p>die Überschrift sagt eigentlich schon alles. Gibt es eine API oder etwas in der Art den Prozessspeicher eines Prozesses komplett auszulesen, ihn abzuspeichern und das wichtigste,<br />
den Prozess danach *fortfahren* zu lassen als ob nichts gewesen wäre?</p>
<p>Für Linux soll es so was geben (chkpt, suspend to disk). Windows macht beim Ruhezustand ja prakisch genau das gleiche, mich würde interessieren,<br />
ob sich dies auch für einen einzelnen Prozess tun ließe.</p>
<p>Möglicherweiße auch über die manuelle Art (einlesen des kompletten Speichers, Register + EIP abspeichern ...)</p>
<p>Hatt da jemand eine Idee?</p>
<p>MfG<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/158364/prozessspeicher-einfrieren-speichern-und-wieder-fortfahren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 02:18:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/158364.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 Sep 2006 18:24:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Prozessspeicher einfrieren, speichern und wieder fortfahren? on Mon, 04 Sep 2006 18:24:41 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>die Überschrift sagt eigentlich schon alles. Gibt es eine API oder etwas in der Art den Prozessspeicher eines Prozesses komplett auszulesen, ihn abzuspeichern und das wichtigste,<br />
den Prozess danach *fortfahren* zu lassen als ob nichts gewesen wäre?</p>
<p>Für Linux soll es so was geben (chkpt, suspend to disk). Windows macht beim Ruhezustand ja prakisch genau das gleiche, mich würde interessieren,<br />
ob sich dies auch für einen einzelnen Prozess tun ließe.</p>
<p>Möglicherweiße auch über die manuelle Art (einlesen des kompletten Speichers, Register + EIP abspeichern ...)</p>
<p>Hatt da jemand eine Idee?</p>
<p>MfG<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131027</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Mon, 04 Sep 2006 18:24:41 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessspeicher einfrieren, speichern und wieder fortfahren? on Tue, 05 Sep 2006 06:03:12 GMT]]></title><description><![CDATA[<p>Ich wüsste keine entsprechende Funktion in Windows.<br />
Das einfachste wäre wirklich die entsprechenden Daten eben auszustreamen. Mehr oder weniger das selbe sind ja Precompiled Headerdateien, die den Zustand des Compilers zu einem bestimmten Zeitpunkt wiedergeben.<br />
Aber Du bist eben selbst dafür verantwortlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131232</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 05 Sep 2006 06:03:12 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessspeicher einfrieren, speichern und wieder fortfahren? on Tue, 05 Sep 2006 15:11:41 GMT]]></title><description><![CDATA[<p>Würde gerne mal die &quot;von Hand&quot; Methode ausprobieren, aber wie stelle ich das an?</p>
<p>Den kompletten Prozess anhalten, den verwendet Speicher und den Context abspeichern?<br />
Und wie könnte ich ihn dann wieder starten, ich muss ja irgendwie einen neuen Prozess erzeugen?<br />
Und was passiert dann mit z.B. Handles auf geöffnete Files, sind diese danach noch korrekt?</p>
<p>MfG<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131624</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Tue, 05 Sep 2006 15:11:41 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessspeicher einfrieren, speichern und wieder fortfahren? on Tue, 05 Sep 2006 18:21:41 GMT]]></title><description><![CDATA[<p>Da hast Du keine Chance. Die Handles stimmen nicht mehr nichts stimmt mehr...<br />
Wenn der Prozess stirbt werden alle Handles geschlossen, wenn Du einen neuen Prozess erzeugst sind keine Handles vorhanden. An den Speicher in dem die Handles liegen kommst Du nicht ran, geschweige denn an den Security Context.</p>
<p>Vergiss es einfach, jedenfalls auf diese Methode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131762</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 05 Sep 2006 18:21:41 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessspeicher einfrieren, speichern und wieder fortfahren? on Tue, 05 Sep 2006 18:51:21 GMT]]></title><description><![CDATA[<p>Ich hab so etwas mal gemacht:</p>
<p>1.) Einen Remote-Thread in deinem Prozess starten<br />
- VirtualAllocEx<br />
- CreateRemoteThread<br />
2.) Eine DLL mit dienem Code im Prozess laden<br />
3.) Alle Threads im Prozess suchen und anhalten:<br />
- CreateToolhelp32Snapshot<br />
- Thread32First<br />
- Thread32Next<br />
- OpenThread (erst ab Windows 2000 !!!)<br />
- SuspendThread<br />
4.) Mit VirtualQuery den Speicher auslesen und abspeichen<br />
5.) Die Threads wieder fortführen.<br />
- ResumeThread</p>
<p>Es könnte auch einfacher gehen mit<br />
- OpenProcess<br />
- SuspendThread (mit Prozess Handle)<br />
- VirtualQueryEx<br />
- ResumeThread</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131791</guid><dc:creator><![CDATA[AZ]]></dc:creator><pubDate>Tue, 05 Sep 2006 18:51:21 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessspeicher einfrieren, speichern und wieder fortfahren? on Tue, 05 Sep 2006 18:54:00 GMT]]></title><description><![CDATA[<p>ReadProcessMemory</p>
<p>fehlt noch in der letzten Aufzählung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131795</guid><dc:creator><![CDATA[AZ]]></dc:creator><pubDate>Tue, 05 Sep 2006 18:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessspeicher einfrieren, speichern und wieder fortfahren? on Tue, 05 Sep 2006 19:56:34 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Vergiss es einfach, jedenfalls auf diese Methode.</p>
</blockquote>
<p>Dann hast du doch bestimmt eine andere Idee?!</p>
<p>@AZ<br />
Das Injizieren eigenen Codes ist genauso wie das Auslesen des Prozessspeichers kein Problem, das Problem sind die Handles auf alle möglichen Objekte,<br />
bzw. der Restart des Programmes.</p>
<p>Was mich interessieren würde, was hast du mit dem Ausgelesenen gemacht? Du hast den Prozess aber nicht z.B. nach einem Neustart deinen Rechners<br />
an dieser Stelle weiterlaufen lassen können, oder?</p>
<p>Für Linux/*nix gibt/gab es &quot;chkpt&quot;. Das ist/war anscheinend eine Library bei der das Programm aktiv die Lib-Funktion aufrufen musste und das Programm<br />
dann nach einem Absturz o.ä. an dieser Stelle weitergeführt werden konnte. Irgendwie geht es, zumindest unter Linux.</p>
<p>Und wie macht es Windows wenn es in den Ruhezustand fährt, dann müssen irgendwie auch alle Handles der Programme gespeichert werden?</p>
<p>Nur her mit den Vorschlägen, bin für alles offen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>MfG<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131835</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Tue, 05 Sep 2006 19:56:34 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessspeicher einfrieren, speichern und wieder fortfahren? on Tue, 05 Sep 2006 20:32:37 GMT]]></title><description><![CDATA[<p>yogle schrieb:</p>
<blockquote>
<p>Martin Richter schrieb:</p>
<blockquote>
<p>Vergiss es einfach, jedenfalls auf diese Methode.</p>
</blockquote>
<p>Dann hast du doch bestimmt eine andere Idee?!</p>
</blockquote>
<p>Du könntest einen Kernel-Mode Treiber schreiben der das macht.<br />
Das Problem ist nicht der Speicher, sondern sind die Handles... und was passiert mit geöffneten Dateien? Soll der Inhalt geschrieben werden oder auch &quot;gespeichert&quot; werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131855</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Tue, 05 Sep 2006 20:32:37 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessspeicher einfrieren, speichern und wieder fortfahren? on Wed, 06 Sep 2006 10:13:33 GMT]]></title><description><![CDATA[<p>Diese Diskussion macht doch keinen Sinn.<br />
Was ist mit den Mutexen. Was ist mit den offenen Dateien. Die sind danach geschlossen und evtl. in einem anderen Zustand wenn fortgefahren wird.</p>
<p>Hier gibt es so viele offene Probleme, dass es mir dabei nicht mal Spaß macht darüber zu philosophieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1132158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1132158</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 06 Sep 2006 10:13:33 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessspeicher einfrieren, speichern und wieder fortfahren? on Wed, 06 Sep 2006 10:24:56 GMT]]></title><description><![CDATA[<p>yogle schrieb:</p>
<blockquote>
<p>Und wie macht es Windows wenn es in den Ruhezustand fährt, dann müssen irgendwie auch alle Handles der Programme gespeichert werden?</p>
</blockquote>
<p>den status eines kompletten windoofs zu speichern ist ja auch viel einfacher. noch einfacher ist es, gleich den ganzen pc abzuspeichern (machen vmware + co. so). für einen einzelnen prozess aber gibt's dynamische datenstrukturen im kernel und in irgendwelchen hilfsprozessen (csrss z.b.). die müsste man alle einsammeln und hinterher wieder restaurieren. ich stell' mir das sehr schwierig (aber nicht unmöglich) vor...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1132167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1132167</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Wed, 06 Sep 2006 10:24:56 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessspeicher einfrieren, speichern und wieder fortfahren? on Wed, 06 Sep 2006 17:00:56 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Das einfachste wäre wirklich die entsprechenden Daten eben auszustreamen. Mehr oder weniger das selbe sind ja Precompiled Headerdateien, die den Zustand des Compilers zu einem bestimmten Zeitpunkt wiedergeben.<br />
Aber Du bist eben selbst dafür verantwortlich.</p>
</blockquote>
<p>Martin Richter schrieb:</p>
<blockquote>
<p>Vergiss es einfach, jedenfalls auf diese Methode.</p>
</blockquote>
<p>Nochmal die selbe Frage: Hast du jetzt einen anderen Vorschlag oder nicht?</p>
<p>Die gesamten? Handles eines Prozessen kann ich ja z.B. mit dem Sysinternal Process Explorer mir anschauen. Was wäre wenn man die Infos über diese Handles abspeichert und die Objekte *vor* dem fortsetzen wieder restauriert und die Handles im Programm an die neuen anpasst?</p>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>...und was passiert mit geöffneten Dateien? Soll der Inhalt geschrieben werden oder auch &quot;gespeichert&quot; werden?</p>
</blockquote>
<p>Das ist erstmal ja auch egal, es geht nur mal ums Prinzip.</p>
<p>Hier mal ein kleines Testprogramm von mir wegen der geöffneten Files:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

int main()
{
    HANDLE      hFile        = NULL;
    DWORD       dwWritten    = 0;

    hFile = CreateFile( &quot;C:\\file.txt&quot;, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
    if( hFile == NULL )
    {
        MessageBox( NULL, &quot;Fehler CreateFile&quot;, &quot;Fehler&quot;, MB_OK );
        return 0;
    }

    if( !WriteFile( hFile, &quot;Hallo du da!&quot;, 12, &amp;dwWritten, NULL ))
    {
        MessageBox( NULL, &quot;Fehler WriteFile&quot;, &quot;Fehler&quot;, MB_OK );
        CloseHandle( hFile );
        return 0;
    }

    MessageBox( NULL, &quot;Stope jetzt&quot;, &quot;Stop&quot;, MB_OK );

    CloseHandle( hFile );
    return 0;
}
</code></pre>
<p>Wenn ich das Programm bei der MessageBox &quot;Stope jetzt&quot; einfach terminiere, habe ich nacher unter c: die Datei mit dem korrekten Inhalt.</p>
<p>Wenn man nun auserhalb des Programmes CreateFile mit den gleichen Parametern wie oben aufruft, das Handle von WriteFile auf das aktuelle setzt dürfte das Programm doch WriteFile korrekt fortsetzen?</p>
<p>net schrieb:</p>
<blockquote>
<p>für einen einzelnen prozess aber gibt's dynamische datenstrukturen im kernel und in irgendwelchen hilfsprozessen (csrss z.b.). die müsste man alle einsammeln und hinterher wieder restaurieren</p>
</blockquote>
<p>Kannst du mir sagen was das für &quot;Datenstrukturen&quot; sind?</p>
<p>Netzwerkverbindungen lassen wir mal ausen vor, die scheinen wirklich schwierig zu sein.</p>
<p>Gruß<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1132527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1132527</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Wed, 06 Sep 2006 17:00:56 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessspeicher einfrieren, speichern und wieder fortfahren? on Thu, 07 Sep 2006 07:30:30 GMT]]></title><description><![CDATA[<p>yogle schrieb:</p>
<blockquote>
<p>Kannst du mir sagen was das für &quot;Datenstrukturen&quot; sind?</p>
</blockquote>
<p>guckst du: <a href="http://os.inf.tu-dresden.de/Studium/AusgewaehlteBS/windows/Folien/04_Process/04_Process_4.pdf" rel="nofollow">http://os.inf.tu-dresden.de/Studium/AusgewaehlteBS/windows/Folien/04_Process/04_Process_4.pdf</a><br />
und:<br />
<a href="http://www.i.u-tokyo.ac.jp/edu/training/ss/lecture/new-documents/Lectures/13-Processes/Processes.pdf" rel="nofollow">http://www.i.u-tokyo.ac.jp/edu/training/ss/lecture/new-documents/Lectures/13-Processes/Processes.pdf</a><br />
da steht alles drin über prozesse unter windosen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1132737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1132737</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Thu, 07 Sep 2006 07:30:30 GMT</pubDate></item></channel></rss>