Speicheradresse mit neuem Wert füllen

ok danke muss aber leider mitteilen das es so nicht geht , als eigentlich geht es aber das dauernde überprüfen un neu schreiben des wertes führt zu einem absturz des spiels , ich muss die lösung finden um den angegebenen wert zu locken

Du kannst einen Wert nicht "locken". Du kannst ihn nur immer wieder zurücksetzen. Wenn du den Bereich über VirtualProctect sperrst führt das nicht dazu, dass der Speicher nicht neu beschrieben werden kann, sondern dass das Spiel beim nächsten Durchlauf einen Fehler bekommt wegen einer Zugriffsverletzung. Dass es bei dir nicht funktioniert kann verschiedene Gründe haben: Du hast eine nicht gebremste Endlosschleife gemacht, was dann sehr schnell mal zu Dateninkosistenz führt, wenn deine Schleife gleichzeitig mit anderen Threads das Datum modifiziert.
 
Also weitere Chancen sehe ich da auch nicht, aber eventuell greift das folgendes Flag bei VirtualProtect:
C++:
PAGE_WRITECOPY
0x08

Wenn ich das in der MSDN richtig verstanden habe, dann darf ein Prozess nur den Inhalt in eine Variable kopieren und den Inhalt der Variable ändern. (Bitte korrigiert mich, falls ich falsch liege!)

EDIT: Link zu den möglichen Flags: http://msdn.microsoft.com/en-us/library/aa366786(v=VS.85).aspx
 
Was viele schon sagten, Windows erlaubt kein Zugriff ausserhalb des Stacks. Übrigens wurde ja kein Speicher alloziert.
 
Doch, du kannst schon auf Speicher fremder Prozesse zugreiffen, sofern die das nicht explizit verbieten und du die von der API bereitgestellten Funktionalitäten verwendest (ReadProcessMemory, WriteProcessMemory, CreateRemoteThread, usw...)
 
Wieso weiss der eigentlich, wo sich genau die Daten befinden? Übrigens ändert sich bei jedem Start die Positionierung dieser!
 
Wieso weiss der eigentlich, wo sich genau die Daten befinden? Übrigens ändert sich bei jedem Start die Positionierung dieser!

Herausfinden ist nicht schwer. Debuger und Disassembler helfen da ungemein ;). Grundsätzlich ändert sich keine virtuelle Adresse. Im Endeffekt ist es nur von der Reihenfolge der Allokation abhängig. Aber z.B. globale Variabeln oder statische Member einer Klasse sind bei jedem Programmstart an derselben virtuellen Adresse. Von da kommst du dann auf die einzelnen Adressen dieser Programminstanz. So hat Solitaire zum Beispiel eine Klasse SolitaireGame und entweder ist diese nach dem Singleton-Prinzip mit einem statischen Member erstellt worden oder aber es existiert eine globale Variable davon. Diese wird mit new alloziert. Diese Adresse ist fix und ihr Wert ist ein Zeiger auf eben die allozierte Instanz von SolitaireGame. Von daher kann es dir nacher Wurst sein, wo das ist, der Zeiger darauf ist global und daher immer an der gleichen virtuellen Adresse.
 

Neue Beiträge

Zurück