Speicheradresse mit neuem Wert füllen

solitär hat leider keine feste adresse sobald ich meins zumache und wieder auf gehts auch nicht aber wenn ich die adresse kenn funktionierts

weis einer wie ich es anstellen kann das der wert sich nach meiner änderung nicht mehr verändern kann ? weil das spiel selber möchte die spielerzahl immer wieder heraufsetzen

So wie er es geschrieben hat, gehts schon.
Allerdings muss die Adresse wirklich nicht immer gleich sein.
Es gibt sogar Spiele, die extra zum Verhindern von solchen Eingriffen regelmäßig ihre Variablen woanders ablagern

Mit dem Solitär von Windows wirds zwar wahrscheinlich keine Probleme geben;
für welches Spiel willst du es denn dann verwenden (zum Spieleranzahl ändern)?

ModernWarfare 2 da sind die minimum und Maximum Spielerzahlen immer auf der selben adresse darum würde das schon funktionieren nur das spiel setzt die zahlen immer zurück suche noch einen weg um meinen wert fest einzustellen
 
Du müsstest mal im Debug den Speicher observieren und schauen, wann Solitär das immer ändert.
Debug --> Windows --> Memory 1-4 (Windows, Visual Studio)
Vielleicht musst du kurz vor Spielbeginn (bzw. wenn das Spiel beginnt) den Wert nochmal ändern.
 
Ich glaube das geht gar nicht mehr, außer du setzt regelmäßig (alle 10 Sek.?) die Variable neu. Aber ich glaube, diese Art funktioniert nicht unbedingt bei Spielen, weil diese sich nicht neu initialisieren.
 
glnklein hat gesagt.:
ModernWarfare 2 da sind die minimum und Maximum Spielerzahlen immer auf der selben adresse darum würde das schon funktionieren nur das spiel setzt die zahlen immer zurück suche noch einen weg um meinen wert fest einzustellen

Vielleicht setzt MW2 den Wert immer wieder zurück damit ihn keiner ändert?
 
@PainMaker: Komischerweise ist es doch die gleiche Adresse. Bin selber verwirrt :eek:
So überraschend ist das nicht. Wenn bei jedem Programmlauf die selbe Folge von Speicherallokationen erfolgt, ist es doch nachvollziehbar, dass das Betriebssystem immer dieselben Speicherbereiche vergibt. Ich denke ihr macht bei euren Überlegungen den Fehler, dass ihr davon ausgeht, diese Speicheradressen wären physische Adressen. In Wirklichkeit handelt es sich aber um virtuelle Adressen.

Grüße,
Matthias
 
ja warscheinlich will der hersteller das nicht aber das ist einfach bescheuert weil wenn man nur zu 3 spielen will geht das nicht weil minimum 8 personen da sein müssen ,

ich habe bis jetzt das mit CHEAT ENGINE gemacht da kann man den wert locken als feststellen und dan klapt es so was mus man doch auch mit C++ können .

könnte ich nicht eine schleife einbauen die den wert einfach jede sek. neu schreibt ,? diese schleife müsste nur im hintergrund laufen damit wen man die minimumspielerzahl festgelegt hat und die schleife anläuf auch noch die maximum zahl ändern kann
 
So überraschend ist das nicht. Wenn bei jedem Programmlauf die selbe Folge von Speicherallokationen erfolgt, ist es doch nachvollziehbar, dass das Betriebssystem immer dieselben Speicherbereiche vergibt. Ich denke ihr macht bei euren Überlegungen den Fehler, dass ihr davon ausgeht, diese Speicheradressen wären physische Adressen. In Wirklichkeit handelt es sich aber um virtuelle Adressen.

Grüße,
Matthias
Nun, das mit den virtuellen Adressen habe ich ja schon geschrieben und da kann ich nicht immer davon ausgehen dass ich die gleiche Startdresse bekomme. Das mit den Allokationen ist natürlich richtig, aber wenn mein Programm einmal bei 0x00004C68 und einmal bei 0x0000684C startet, schieben sich weitere Adressen auch nach hitnen... und ich habe die Erfahrungen gemacht, dass das spätestens nach einem Neustart eintritt.

könnte ich nicht eine schleife einbauen die den wert einfach jede sek. neu schreibt ,? diese schleife müsste nur im hintergrund laufen damit wen man die minimumspielerzahl festgelegt hat und die schleife anläuf auch noch die maximum zahl ändern kann

Ja du kannst einen Timer (SetTimer()) schreiben, der aller 10ms oder so prüft ob sich der Speicher geändert hat und ihn erneut ändert.
Aber wenn MW2 einen entsprechenden Schutz hat, wird es wahrscheinlich ebenfalls darauf reagieren und so wird dein Programm immer wieder ins Hintertreffen geraten.
 
Zuletzt bearbeitet:
Ja du kannst einen Timer (SetTimer()) schreiben, der aller 10ms oder so prüft ob sich der Speicher geändert hat und ihn erneut ändert.
Aber wenn MW2 einen entsprechenden Schutz hat, wird es wahrscheinlich ebenfalls darauf reagieren und so wird dein Programm immer wieder ins Hintertreffen geraten.


wie würde den so ein timer aussehen dann müsste ich ja die adresse wieder auslesen und in eine variable speichern , wie geht das den dan
 
z.B. so:

PHP:
void *targetAddr = (void*)0;
int  lastValue   = 0;

VOID CALLBACK adresseObserver(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
	int *ptr = (int*)targetAddr;

	// Auf Änderung prüfen
	if(*ptr != lastValue)
		*ptr = lastValue = 4; // Der neue Wert
}

void main()
{
	targetAddr = (void*)0x0F45A4xC6;
	UINT_PTR timerHndl  = SetTimer(NULL, 0, 10, &adresseObserver);
}
 
Zurück