Kompletten Arbeitsspeicher/Register auslesen



  • Hallo ihr c++ler,
    ich sitze jetzt schon länger vor dem Problem dass ich gerne den kompletten arbeitsspeicher einer (anderen) anwendung auslesen möchte sowie alle register. später möchte ich dies alles wiederherstellen. dabei tun sich mir einige fragen und probleme auf

    generell: wie kann ich den kompletten ram einer anwendung auslesen?

    wenn etwas des arbeitsspeichers in der auslagerungs datei ist, kann ich dann auf diesen teil auch per "ReadProcessMemory" zugreifen und wird dieser auch hierbei mit einberechnet:
    ProcessModule pm = process.MainModule;
    int length = pm.ModuleMemorySize;?

    wenn ich den arbeitsspeicher später wiederherstellen will habe ich ein weiteres problem: wenn eine anwendung gestartet wird hat sie immer eine best. größe im ram (z.b. 20 mb) doch dieser wächst an auf z.b. 50 und da ich beim start der anwendung nur 20 mb zur verfügung habe um in diesem bsp 50 mb reinzuschreiben, habe ich ein weiteres problem 😃 wie kann ich das lösen? ich hatte da so was wie alloc gedacht

    http://msdn.microsoft.com/en-us/library/aa664786(VS.71).aspx
    

    allerdings reserviert der nur ram für die eigene anwendung und nicht für eine andere.

    wenn ich die register auslese benutze ich "GetThreadContext"
    da gelten die register aber nur für einzelne threads. wenn ich alle thread register speichere hab ich später ein ähnliches problem wie oben. wenn die anwendung bein start andere threads erstellt hat als wenn ich sie "gespeichert" habe. gibt es vll so ne art prozess und nicht thread register die ich einfach speichern kann?

    wie könnte ich diese dann im spätern verlauf wieder herstellen?

    vielen dank für antworten im voraus 🙂



  • Was ich mich gerade gefragt habe, Wozu?
    Was möchtest du erreichen, vielleicht gibt es einen anderen Weg das zu lösen.
    Im Ram und in den Registern rumfuchteln führt irgendwann unweigerlich zum Crash wenn man mal was falsch macht und das willst du sicherlich nicht.
    Fals du Spielstände von spielen manipulieren willst, dafür gibt es genügend andere Tools zum download.



  • das ist mir ja auch klar. ich wollte es eh erst mal auf ner vm testen wenns überhaupt funktioniert. ich hatte an so was ähnliches wie timemachine wie beim mac gedacht



  • Sorry, kenne Mac nicht. Klär mich auf was das sein soll.



  • im prinzip wie wenn du mehrere ruhezustände wie bei windows speichern könntest und immer wieder hin und her wechseln könntest oder wenn du bei vmware einen snapshot machst



  • Du hast dann zwar ne RAM state sequenz, also ne timeline von speicher zuständen (was theoretisch ja funktioniert) aber du musst auch die Festplatten zugriffe bzw. Dateien welche zwischen zwie zuständen gelöscht,geschrieben, verändert etv. wurden merken etc.

    ist alles net sooo einfach;)



  • Das war ja auch lediglich ne erklärung. ich hatte nicht vor das auch noch mit dateien zu machen, sondern lediglich mit einem einzigen programm



  • Serialisier doch einfach den Zustand des Programms und lad ihn beim Start wieder rein?



  • da fängts dann ja schon wieder an: wie soll ich das machen?



  • Naja die frage ist halt, ist das "andere"Programm, ein Programm was du selber geschrieben hast?Wenn ja, in welcher Sprache? Weil dann könntest du da nämlich deine Serialisierung implementieren.Hauptfrage ist ebend, was willst du da genau machen, klär uns doch einfach mal konkret auf.



  • nein, programme sind nicht selbst geschrieben.
    ich dachte das so. man hat eine list mit allen laufenden programmen. man wählt eins aus z.b. firefox mit 2 tabs. mein programm speichert dann alle register+ram in einer datei. irgendwann später öffnet man diese datei, firefox wird gestartet (und angehalten per "SuspendThread" und "ResumeThread", das funktioniert schon) derweil wird dann der aktuelle arbeitsspeicher von ff überschrieben, ebenso seine register. dann wird firefox fortgesetzt und du hast deine 2 tabs wieder (nur als bsp)



  • Ok.Würde ich dir aber nicht empfehlen in dem Ram und den REgistern rumzufuchteln.
    Mal davon abgesehen das firefox schon so eine funktion bietet 😛



  • ja ich weiss das das übel enden kann ich würds nur gern mal ausprobieren...außerdem war ff nur ein BSP. also kann mir jemand helfen?


Anmelden zum Antworten