Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

ram auslesen und speichern

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 07.03.2010, 14:43    Titel: ram auslesen und speichern Antworten mit Zitat

Hi,
gibt es eine Möglichkeit einen Teil (etwa 2 MB) des Arbeitsspeichers auszulesen, es dann in eine Datei zu speichern, um später den Arbeitsspeicher wieder mit diesen gespeicherten Werten zu überschreiben?

Meine ersten Ideen waren es mit ReadProcessMemory() auszulesen, allerdings weiß ich nicht, wie ich wie ich mehr als ein Byte auslesen kann und wenn ich mehr als 100 KB auslesen will, hängt sich das Prog auf.
Dann hatte ich noch die Idee mit BSAVE, allerdings weiß ich nicht, welchen Pointer ich nehmen muss. In den Hilfen steht immer nur was zu Grafiken auslesen.

Kann mir da jemand weiter helfen?

MfG, Tomtitom
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 07.03.2010, 15:14    Titel: Antworten mit Zitat

Ich glaube kaum das es ueberhaupt irgendeine moeglichkeit gibt alles so wie es gerade ist aus dem RAM zu lesen um es spaeter 1:1 wieder so hinein zu schreiben, wuesste auch nicht was fuer einen sinn ausser den totalabsturz das haben sollte...

Das einzige das vermutlich moeglich ist, einzelne Programm prozesse aus dem Ram lesen und dort wieder hinein zu schreiben, dazu ist allerdings wohl einiges an wissen ueber die API funktionen bzw Kernel32 notwendig...

Code:
extern "windows" lib "kernel32"
declare function ReadProcessMemory (byval as any ptr, byval as any ptr, byval as any ptr, byval as uinteger, byval as uinteger ptr) as integer
declare function WriteProcessMemory (byval as any ptr, byval as any ptr, byval as any ptr, byval as uinteger, byval as uinteger ptr) as integer
end extern
 
 


zu diesen beiden Funktionen brauchst glaube ich noch die anderen zum finden eines Prozesses und einiges mehr, bin da nicht wirklich hilfreich, waere allerdings mal ein versuch wert sowas wie ein GameHack Clon zu basteln lächeln
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 07.03.2010, 16:18    Titel: Antworten mit Zitat

Danke für deine Antwort.
Natürlich meinte ich einen speziellen Prozess. Und ich habe ja schon mit der readprocessmemory und co einige Versuche gemacht, aber bis jetzt habe ich noch nix erfolgreiches zustande gebracht.

Vielleicht sollte ich eher im Library-Forum fragen, bzw verschieben?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 07.03.2010, 16:27    Titel: Antworten mit Zitat

vielleicht ist das ja was fuer dich, ist eigentlich ein gamehack tutorial, aber mit PHP beispielen...
vielleicht fuer einen ansatz ganz hilfreich...

http://www.elitepvpers.de/forum/gamehacking-tutorials/225242-tutorial-gamehacking-howto-i-ger.html
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 07.03.2010, 16:50    Titel: Antworten mit Zitat

Also das Tut ist schon ziemlich interessant, leider habe ich bezüglich Memory auslesen nichts weiter lernen können.

Mit ReadProcessMemory habe ich mich wie gesagt schon beschäftigt. Auf http://msdn.microsoft.com/en-us/library/ms680553%28VS.85%29.aspx steht:
Code:
BOOL WINAPI ReadProcessMemory(
  __in   HANDLE hProcess,
  __in   LPCVOID lpBaseAddress,
  __out  LPVOID lpBuffer,
  __in   SIZE_T nSize,
  __out  SIZE_T *lpNumberOfBytesRead
);

also theoretisch dürfte das ganz einfach sein, den hProcess habe ich, ich weiß auch, welchen Adressbereich ich lesen will, nur kann ich offenbar nicht beliebig große nSize angeben und im lpBuffer steht dann nur ein Wert. Hat da noch jemand Tipps?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 07.03.2010, 17:12    Titel: Antworten mit Zitat

Ich glaube, ich habe es jetzt selbst lösen können. Ich habe doch noch herausgefunden, wie man mit ReadProcessMemory viele Daten auslesen kann.
Hier die gekürzte Version:
Code:

#Include Once "windows.bi"

Dim  hwnd As hwnd, ProcessID As Dword, ProcessHandle As Handle,  PointData As Point, WrB As Integer
Dim wert(&H001E8FFF) As ubyte, f As Integer

hwnd = FindWindow(NULL, "ProgName")

'Get the window's process ID.
GetWindowThreadProcessId(hwnd, @ProcessID)

'Get a process handle.
ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, False, ProcessID)

    ReadProcessMemory(ProcessHandle, &H00400000, @wert(0), &H001E8FFF, @WrB)

f = Freefile
Open "test.txt" For Binary As #f

Put #f, , wert()
Close #f

CloseHandle (ProcessHandle)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 07.03.2010, 17:58    Titel: Antworten mit Zitat

uhhhhhh uhuh uhuhhhhh auaaa
DIM hwnd AS hwnd
bööööse ungesund! man benutzt symbole nicht doppelt ;P

aber so grundsätzlich müsstest du's richtig gemacht haben: Pointer übergeben und als zusatz wie viel speicher an dem pointer maximal verfügbar ist, und als rückgabe bekommst du wie viele davon vollgeschrieben wurden, der pointer bleibt natürlich der selbe.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz