C# Lokale Variablen aus anderem Programm herausfinden!

Nick_SMI

Ensign
Registriert
Sep. 2015
Beiträge
153
Hallo zusammen!

Ich programmiere nach wie vor an einem Programm und möchte nun aus einem Spiel die lokalen Variablen herausfinden...

Bsp.: ich starte das Spiel, klicke in meinem Programm auf "x" und dann soll die lokale Variable km herauskommen (in einem Label)


Wer kann mir helfen und Beispiele geben?

Gruß und danke im Vorraus!
 
Du benötigst dafür einen Debugger. Am besten einen mit einem umfangreichen Handbuch, das du dann durchliest.
 
Verstehe glaub die Frage nicht...
Du hast zwei Progamme A und B (beide von dir geschrieben) du weißt, dass A eine lokale Variable mit dem Identifier "km" anlegt. Jetzt möchtest du zu einem beliebigen Zeitpunkt den Wert dieser Variablen mit Hilfe von B auslesen?
 
aroxx schrieb:
Verstehe glaub die Frage nicht...
Du hast zwei Progamme A und B (beide von dir geschrieben) du weißt, dass A eine lokale Variable mit dem Identifier "km" anlegt. Jetzt möchtest du zu einem beliebigen Zeitpunkt den Wert dieser Variablen mit Hilfe von B auslesen?

Genau! A hab ich geschrieben, B ein anderer, aber die lokalen Variablen sind bekannt...
 
aroxx schrieb:
Das sind so die Themen mit denen du dich dann beschäftigen musst. Kenne mich damit leider auch nicht genauer aus um dir konkret zu helfen :/

Weshalb deine Links auch völlig am Thema vorbeigehen, sollte der TS keinen Zugriff auf den Code des Spiels haben.

Das Thema ist keinesfalls trivial. Man müsste die Speicheradresse des Werts herausfinden (siehe asdf), die jedoch spätestens nach jedem Neustart veraltet sein wird und der relative Abstand zu anderen Adressen wird auch nicht konstant sein. Kannst mal Googlen, wie Trainer für Spiele funktionieren. Auch wenn du nur lesen und nicht schreiben möchtest ist das Vorhaben eher kompliziert.
 
crvn075 schrieb:
Weshalb deine Links auch völlig am Thema vorbeigehen, sollte der TS keinen Zugriff auf den Code des Spiels haben.

Das Thema ist keinesfalls trivial. Man müsste die Speicheradresse des Werts herausfinden (siehe asdf), die jedoch spätestens nach jedem Neustart veraltet sein wird und der relative Abstand zu anderen Adressen wird auch nicht konstant sein. Kannst mal Googlen, wie Trainer für Spiele funktionieren. Auch wenn du nur lesen und nicht schreiben möchtest ist das Vorhaben eher kompliziert.

Das klingt so komisch: Ich meine, das Spiel gibt ja die lokalen Variablen und wie man dort auch Skriptet bekannt, und dann so kompliziert, eieihei :D
 
crvn075 schrieb:
Weshalb deine Links auch völlig am Thema vorbeigehen, sollte der TS keinen Zugriff auf den Code des Spiels haben.

Genau davon bin ich ausgegangen, weil, wie du unten richtig beschreibst, das Ganze sonst ein sehr schwieriges Unterfangen wird.
 
Nick_SMI schrieb:
Das klingt so komisch: Ich meine, das Spiel gibt ja die lokalen Variablen und wie man dort auch Skriptet bekannt, und dann so kompliziert, eieihei :D

Für den unwahrscheinlichen Fall, dass du das Spiel abändern und selbst neu kompilieren kannst, ist das tatsächlich weniger schwer. Wenn du die Namen der Variablen kennst, hast du denn dann Zugriff auf die Quellen?

Andernfalls schreibt das Spiel seine Variablen auf scheinbar nicht deterministische Weise irgendwo in den Ram, und du musst den Wert dort wieder rausfischen. Und wie gesagt, spätestens beim nächsten Neustart wird der Wert an einer anderen Stelle stehen.
 
Nick_SMI schrieb:
Das klingt so komisch: Ich meine, das Spiel gibt ja die lokalen Variablen und wie man dort auch Skriptet bekannt, und dann so kompliziert, eieihei :D

D.h. das andere Spiel hat eine offiziell dokumentierte Scripting-Schnittstelle? Wäre dann evtl. hilfreich zu wissen welches es ist, da es dann von der Schnittstelle abhängt wie du da darauf zugriff hast.

Ohne eine solche Schnittstelle kannst du es quasi vergessen dass du da rankommst.
 
Dann schreib doch mal in deren Forum, wo wohl auch der Entwickler selbst aktiv ist. Es scheint ein SDK und alles zu geben, vielleicht ist die Angelegenheit dann doch nicht so kompliziert. Aber hier wird sich jetzt kaum einer die Mühe machen, für dich die Schnittstellen zu diesem doch eher unbekannten Spiel zu studieren.
 
Der Entwickler ist leider mehr unaktiv... Aber ich such also "Schnittstellen" oder was?
 
Und nebenbei solltest du dir auch angewöhnen, so wesentliche Informationen wie diese hier:

Nick_SMI schrieb:
Das klingt so komisch: Ich meine, das Spiel gibt ja die lokalen Variablen und wie man dort auch Skriptet bekannt

gleich zu Anfang, beim Stellen der Frage, mitzuteilen. Das wäre extremst hilfreich dabei, brauchbare Antworten zu erhalten.
 
Mit Cheat Engine ist es recht einfach die Adresse im RAM zu bekommen (auch die Pointer, die auf die dynamischen Adressen zeigen).

Mit diesen Adressen kannst du dann auf die Windows-API (user32) zugreifen, die benötigte Funktion ist ReadProcessMemory. Beispiele wie man diese in C# nutzt (P/Invoke) findest du zuhauf auf Google.

So kann man dann übrigens mit den meisten Programmen umgehen (wobei das bei Programmen die einen JIT-Compiler nutzen (wie bpsw. auch .Net) meiner Erfahrung nach nicht so einfach ist). Jedoch gibt es bei .Net Programmen die Möglichkeit diese mittels Reflektion zu manipulieren (oder auch einfach nur auszulesen). Da ich aber nicht glaube dass dieser Simulator .Net nutzt, gehe ich darauf jetzt nicht weiter ein.
 
Nick_SMI schrieb:
Der Entwickler ist leider mehr unaktiv... Aber ich such also "Schnittstellen" oder was?
Ich glaube Dir ist nicht wirklich klar, welche Komplexität hinter dem steckt was Du anfrägst, bzw. realisieren möchtest. Die 'lokalen Variablen' des Spieles sind mitnichten bekannt nur weil das Spiel eine dokumentierte Schnittstelle aufweist und ich bezweifle, daß die Schnittstelle eine mit hoher Frequenz aktualisierte Variable namens 'km' aufweist die Du locker auslesen kannst.

Wird im worst case auf Debugger hinaus laufen und das ist echt was für Fortgeschrittene mit viel Geduld (fand es immer mehr als mühsam).
 
Doch, tatsächlich scheint dieses Spiel eine Plugin-Schnittstelle aufzuweisen, die die Möglichkeit bietet, die vordefinierten Spielvariablen jeden Frame auszulesen bzw. zu ändern.
Die Links in Post #16 von Miuwa bieten dazu wohl die beste Anlaufstelle.
 
Zurück
Oben