Verständnisfrage zu Prozeduraufrufen/Sprüngen/IP bei Ollydbg

Hallo,

Ich habe hier ein Programm was immer zu einer bestimmten Stelle springt, aber ich kann nicht herausfinden von WO AUS dahin gesprungen wird. "Find references -> to selected command" spuckt in Olly nichts aus, wahrscheinlich weil zur Laufzeit die Sprungadresse dynamisch erzeugt wird. Gibt es eine Möglichkeit einfach einen Schritt rückwärts zu gehen bzw. wird in irgend einer Form der alte Wert vom IP zwischengespeichert oder ähnliches?
 
So mal auf Anhieb: Breakpoint auf die Adresse und "trace into" ausführen, dann unter "View" -> "run trace" anzeigen lassen.

Der Tracevorgang selbst könnte aber bei größeren Programmen "etwas" länger dauern.
Bevor man "trace into" einsetzt, sollte man sich daher mit "trace over" möglichst an den Codebereich nähern[0], der den JMP (oder was auch immer) ausführt. Und natürlich vorher unter "Debug options" Trace-Verhalten konfigurieren (z.B dass System-DLLs nicht getracet werden sollen und ähnliche Optionen).

[0] man platziert seinen BP, macht einen Trace over und schaut sich im Log an, welcher Call als letzter aufgerufen wurde. Dann platziert man auf der Zieladresse des Calls einen BP (lädt eventuell das Programm neu) und führt den Trace over nun von dieser Stelle aus. Ein paar Wiederholungen und man hat sich auf relativ akzeptable Distanz von ein paar hundert tausend Anweisungen angenähert und muss bei einem "trace into" nicht stundenlang warten ;)
 
Zurück
Oben