2009-03-24 16 views
3

Ich versuche ein Statistik-Tool für ein Spiel zu schreiben, indem ich Werte aus dem Prozessspeicher des Spiels extrahiere (da es keinen anderen Weg gibt). Die größte Herausforderung besteht darin, die erforderlichen Adressen zu finden, an denen Daten gespeichert sind, die mich interessieren. Was es noch schwieriger macht, ist die dynamische Speicherzuweisung - ich muss nicht nur Adressen finden, die Daten speichern, sondern auch Zeiger auf diese Speicherblöcke, da sich die Adressen bei jedem Neustart des Spiels ändern.Low-Level-Programmierung: Wie finden Sie Daten in einem Speicher eines anderen laufenden Prozesses?

Für jetzt bin ich nur manuell die Suche Spiel Speicher mit Memory-Editor (ArtMoney) und der Suche nach Adressen, die ihre Werte als Datenänderungen ändern (oder nicht ändern). Nachdem die Adresse gefunden wurde, suche ich nach einem Zeiger, der auf ähnliche Weise auf diesen Speicherblock zeigt.

Ich frage mich, welche Techniken/Tools für solche Aufgaben existieren? Vielleicht gibt es ein paar Artikel, die ich lesen kann? Ist Mastering Disassembler der einzige Weg zu gehen? Zum Beispiel lösen Spieltrainer ähnliche Aufgaben, aber sie machen sie in Tagen und ich kämpfe schon seit Wochen.

Danke.

PS. Es ist alles unter Windows.

+0

Können Sie angeben, welche Plattform? –

Antwort

0

Wenn Sie wissen, wie man in C programmiert, ist es einfach, nach Speicherwerten zu suchen. Wenn Sie C nicht kennen, kann Sie diese page auf Ihre Lösung verweisen, wenn Sie in C# programmieren können. Es wird nicht schwer sein, die C# zu portieren, die sie zu Java haben.

1

Ist Mastering Disassembler der einzige Weg zu gehen?

Ja; GoDownload WinDbg von http://www.microsoft.com/whdc/devtools/debugging/default.mspx, oder wenn Sie etwas Geld zu blasen haben, ist IDA Pro wahrscheinlich das beste Werkzeug dafür

+0

Aber selbst mit Disassembler, was ist die Strategie um Werte zu finden? Hunderte von Megabytes zu zerlegen und herauszufinden, was dort vor sich geht, scheint für mich eine unmögliche Aufgabe zu sein. Wo soll man anfangen? – serg

+0

Durchsuchen Sie nicht nur den gesamten Speicher, sondern versuchen Sie die Funktion zu finden, die den Wert aktualisiert, an dem Sie interessiert sind. Setzen Sie Debugger-Breakpoints, die jedes Mal, wenn Sie sie treffen, Zeug drucken –

0

Sie können sich ansehen DynInst (Dynamische Instrumentierung). Schauen Sie sich insbesondere die Dynamic Probe Class Library (DPCL) an. Mit diesen Tools können Sie über die Debugger-Schnittstelle an laufende Prozesse anfügen und während der Ausführung eigene Instrumentierungen (über spezielle Testklassen) einfügen. Sie könnten dies wahrscheinlich verwenden, um die Routinen zu instrumentieren, die auf Ihre Datenstrukturen zugreifen und verfolgen, wenn die Werte, an denen Sie interessiert sind, erstellt oder geändert werden.

Sie könnten es leichter haben, als alles manuell zu tun. Auf diesen Seiten gibt es eine Reihe von Papieren, auf denen Sie sehen können, wie andere Leute ähnliche Tools erstellen.

Ich glaube, dass die Windows-Unterstützung beibehalten wird, aber ich habe es nicht selbst verwendet.