2011-01-17 13 views
1

Beachten Sie, dass ich ein Programm habe, das den Wert einer Variablen ausgibt. Lässt diese Variable als 'i' gelten. Die Binärdatei hat das Format '.exe'. Wie kann man den Wert von 'i' bestimmen und auch verstehen, dass der bestimmte Wert der Variablen 'i' aus dem '.exe' Format ist?Ermitteln des Werts der Variablen aus EXE-Datei

Antwort

4

Es hängt davon ab, ob die Variable lokal oder global ist. Wenn es global ist, dann ist es ziemlich einfach mit den richtigen Tools (ich kann keine besonderen empfehlen, da ich Linux verwende). Sie würden nur die Position des Symbols "i" in der Symboltabelle finden, und das würde Ihnen zeigen, wo "i" sich befindet. Wenn Sie wissen wollen, welchen Wert es enthält, nun, Sie können nur seinen ursprünglichen Wert sehen, nicht seinen Wert zur Laufzeit (offensichtlich, weil Sie auf die EXE-Datei schauen, kein laufendes Abbild des Programms). Wenn es nicht initialisiert ist, kann der Anfangswert nicht angezeigt werden. Andernfalls wird der Anfangswert hoffentlich in dem Tool neben dem Wert des Werts sichtbar (wahrscheinlich in Hexadezimal, so dass Sie es entschlüsseln müssen).

Nun, wenn es eine lokale Variable ist, dann ist es eine andere Geschichte. Die Variable hat keinen Namen, da lokale Variablennamen beim Kompilieren von Programmen verloren gehen. Es wird lediglich (möglicherweise) eine Position auf dem Stapel während der Ausführung dieser Funktion einnehmen. Zum Beispiel befindet sich die erste Variable oft in -8(%ebp), die zweite in -12(%ebp) usw. (-4(%ebp) und 0(%ebp) sind speziell). Wenn Sie also in den Assembly-Code für die EXE schauen, ist es möglich, dass sich -8(%ebp) auf die erste lokale Variable in einer Funktion bezieht. Wiederum können Sie nicht wissen, welchen Wert es hat, weil Sie statisch auf die exe schauen. Und all das hängt davon ab, welcher Compiler verwendet wurde und welche Optimierungsstufe eingestellt wurde.

Entschuldigung, keine spezifischen Werkzeuge zu geben. Ich gehe davon aus, dass Sie Zugriff auf einige Dekompilierungswerkzeuge haben, die Ihnen den Assemblierungscode und die Symboltabellen zeigen.

+1

Es gibt spezielle Tools für Gamer Caller * Trainer *. Grundsätzlich können sie globale Variablen eines anderen Prozesses überwachen und modifizieren. – ruslik

+0

@ruslik Aber sie sind normalerweise für bestimmte Spiele. Ich habe einige generische Programme gesehen, mit denen man nach Werten in einem Programm suchen und diese ändern kann: [Cheat-o-matic] (http://www.freewarereview.info/2007-01/cheat-o-matic_-_manipulate_allest_any_computer_video_game_with_memory_scanning_.html) und [Poke] (http://codefromthe70s.org/poke.aspx), aber sie sind beide für Windows. – mgiuca

+0

@mgiuca Was Sie gesagt haben, ist in Ordnung. Aber ich frage mich, wie GDB sogar die lokalen Variablennamen von ausführbaren Dateien bekommt. –

Verwandte Themen