Gå til innhold

[Løst]Lagre/hente fram igjen prosessminne


Anbefalte innlegg

Hei

 

Jeg har tenkt til å lage et program som kan lagre minnet til en prosess i ei fil, for så å kunne hente den fram igjen seinere.

 

Jeg hadde tenkt meg noe slikt:

Et tilfeldig program, som Notisblokk, er åpent, og det er gjort endringer i vinduet. La oss si at det står "test" i et Notisblokkvindu. Programmet (som jeg vil lage) «fryser» vinduet, lagrer minnet fra Notisblokk til disken og avslutter prosessen Notisblokk. Ved ei seinere anledning skal programmet kunne lese fila fra disken og laste Notisblokk inn i minnet igjen, nøyaktig slik det var. Notisblokk fortsetter så der den slapp, med "test" i vinduet og angrelogg osv. intakt.

 

Lar dette seg gjennomføre? Jeg har prøvd å se på ReadProcessMemory og WriteProcessMemory, men jeg kommer ingen vei. Jeg holder på med VB.NET 2008.

 

På forhånd takk

Endret av 9E2
Lenke til kommentar
Videoannonse
Annonse

Det er vel mulig... men jeg vet ikke om noen måte å finne ut hvilke deler av et prograam sitt minneområde som faktisk er allokert...

Du vil gså måtte krangle med minneallokeringsrutinene i windows.

En mulighet er vel kanskje å skrive over AllocHGlobal Og FreeGlobal og lignende funksjoner med dine egne, men jeg vet ikke, dette er bare gjettemål fra min side egentlig...

 

Jeg tror ikke det funker å bare dumpe de to første GB (32-bit program) fordi delene er ikke nødvendigvis allokert av operativsystemet, men kanskje ReadProcessMemory gir tilbake en feilmelding dersom du prøver å nå uallokert minne? da kunne det vært snakk om å lese 1 byte av gangen, og dersom du ikke får feil, notere hvor minnet dette er.

 

Men du vil da også få et problem som er ganske enkelt å fikse, DLL-er kan ligge i forskjellige deler av minnent til enhver tid, og mappede funksjoner ligger ikke nødvendigvis på samme adresse hver gang programmet starter.

 

Du må også lagre hele akkumulatoren, og jeg vet ikke om noen windows funksjon som gjør det for deg (det er dog en egen x86 instruksjon som gjør det)

Lenke til kommentar

Oi, sann ... Det der blei litt for komplisert. Jeg tenkte overhodet ikke på alt som må være på samme sted i minnet (DLL-ene osv.) for at dette skal være mulig. Sjøl adresseparameteren til ReadProcessMemory ligger utafor det jeg er kjent med, så jeg får nok gi opp det her. Men takk for hjelpa uansett!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...