Re^2: Informationen aus Spielen auslesen
Hi O...,
Als mittelfristiges Ziel für Software möchte ich ein Programm
schreiben, das Informationen aus gerade laufenden
Computerspielen ausliest und evtl. auch wieder (verändert) zurückschreibt.
Ts, ts, ts ...
Nicht was DU schon wieder denkst!
Ich habe nämlich ein Faible für den FS 2002 und finde, das der Autopilot ein bisserl schwach auf der Brust ist. Und das möchte ich ändern. U.A.
Die Adressen direkt über Dein Programm abzufragen, ist m.E.
ein recht sinnloses Unterfangen. Unter DOS hat es durchaus
noch Speichersegmente gegeben, die absolut adressiert wurden,
so dass da mehr oder weniger stand "speicher den Inhalt der
Variablen so und so unter der Adresse X4711". In Windows
kannst Du das haken. Beim Start sucht sich das Programm einen
freien Adressraum im Arbeitsspeicher - der kann bei 4711 oder
auch bei 86955 liegen, je nachdem, welche anderen Prozesse
gerade wo zugange sind. Das heißt im Klartext, dass die
Adressierung nur noch relativ erfolgt. Hinzu kommt, dass
während der Laufzeit sowohl ganze Speicherblöcke transferiert
werden (wenn es irgendwo zu eng wird) bzw. weitere
Speicherbereiche hinzukommen. Im Extremfall wird mit der Zeit
der gesamte Arbeitsspeicher zugemüllt und es entstehen
Adresskonflikte, was die allseits so beliebten Windows-
Abstürze erzeugt. Dein Ansatz von oben ist also für moderne
Betriebssysteme nicht brauchbar.
Und man kann diese Zeiger auf die Variablen nicht abgreifen? Aber wahrscheinlich braucht man dazu den Quellcode.
Also für die sich im Speicher befindlichen Programme kann man den zugehörigen Speicherbereich abrufen. Das habe ich bei einem Cheattool schon mal gesehen...
Abzufragen wäre (über den Teilthread des Leitprozesses im
System) eine Startadresse, von der ausgehend Du den RAM per
relativer Positionierung absuchen müsstest. Spätestens jetzt
bist Du aber in der Eieruhr, weil, s.o., die absoluten
Adressen der einzelnen Speicherbereiche sich u.U. über den
gesamten RAM verteilen. Diesen wiederum (als Dump) auszulesen
und zu analysieren, setzt voraus, dass Du das Programm in
kompilierter Form vorliegen hast.
Das kann og. Tool auch, also geht es prinzipiell.
Mit der kompilierten Version
darfst Du dann die Adresspfade nachverfolgen - Echtzeit ist
anders, und das ist einer der Gründe, weshalb gute
Systemanalytiker zu der immer kleiner werdenden
Bevölkerungsschicht gehören, die nicht regelmäßig unter
Brücken schlafen.
Schaunmermal... Ich glaub sowas ja immer erst wenn ich's selber seh'.
Werden Daten von Variablen im gleichen Block abgelegt oder sonst irgendwo?
Schlicht : Ja. Wenn die Software nicht von A bis Z in
Maschinensprache eingegeben wurde (oder mit der Tastatur aus
0, 1 und Enter *g*), gibt es m.W. keine gesicherte Methode,
für einen laufenden Prozess eine reproduzierbare
Speicherbelegung zu erreichen. Wenn Du z.B. eine VBA-
Funktion, mainzwegen in Excel, programmiert hast, wird diese
die benötigten Parameter bei jedem Lauf an einer anderen
physikalischen Stelle im RAM verstecken - genau so, wie Du
nicht im Voraus sagen kannst, wo sich eine zu speichernde
Datei physikalisch auf der Festplatte herumtreiben wird.
Noch ein Aspekt : So lange es immer um den gleichen Computer
geht, mag ein Ansatz wie Deiner noch - wenn auch mit extremem
Aufwand - implementierbar sein. Eine andere Maschine, mit
anderem Prozessor, Grafik-, Soundkarte, Festplatte, Buh und
Bäh wird die gleichen Bits, die Du auf Computer 1 noch mit der
Pinzette verschieben konntest, ganz woanders verstecken ...
Also, ich kann mir nicht vorstellen, dass es funktioniert -
lasse mich aber gern eines Besseren belehren.
Danke für die Motivierung! ;o)
Martin