Problem mit Stack-Variable und Debugger
-
Hallo,
ich bin gerade dabei, eines meiner Windows-Programme mit IDA Pro zu debuggen. Dabei habe ich versucht, die Adresse einer Variable herauszufinden. Die Adresse, an der sich der besagte Wert befindet ist mir bekannt, allerdings befindet er sich auf dem Stack an Adresse 0017FC9C. Aus Interesse wollte ich versuchen, mit einer DLL , die in den Prozess geladen wird, eben diesen Wert von der DLL aus zu lesen.
Deshalb habe ich aus der Adresse einen Zeiger gemacht, ihn dereferenziert und den Wert zurück gegeben:int GetValue() { int* adr = (int*)0x0017FC9C; return *adr; }
Allerdings wird statt der Adresse immer 0 zurückgegeben. Wenn ich der Adresse aber im Debugger folge, bekomme ich den richtigen Wert.
Was mache ich da falsch? Gibt es beim Stack irgendwelche Besonderheiten zu beachten? Ach ja, die Adresse ist bei jedem Start des Programmes die gleiche.Ich würde mich freuen, wenn jemand einen Tipp oder sogar eine Lösung parat hat.
-
Du kannst in aller Regel nicht davon ausgehen, dass lokale Variablen eine feste, gleichbleibende Adresse haben.
Wenn du das Programm (zB. DLL laden oder nicht), die Umgebung in der es laeuft (Debugger, verschiedene Windows-Versionen) oder den Kontext, in dem die Prozedur, die die Variable enthaelt, laeuft aenderst, aendert sich wahrscheinlich auch die logische Adresse der Variable.
Falls irgendwie moeglich, versuche was auch immer du vor hast, anders zu loesen.
-
Vielen Dank für deine Antwort. Auf die Idee, dass sich die Adresse bei einem "normalen" Aufruf im Gegensatz zum Debugger ändern kann, bin ich garnicht gekommen.
Das ganze war aber sowieso nur als Test gedacht, um mich ein wenig ins Debuggen einzuarbeiten. Von daher ist es also nicht schlimm, wenn es nicht funktioniert.