Hi,
ich möchte gerne einen stack-Trace des Call-stacks in einer x86-Anwendung erstellen.
Mir ist bewusst, dass die Jedi-Libraries das können, ich möchte das aber gerne selber machen.
Ich weiss schon so ungefähr, dass man sich an den return-calls entlanghangelt, und dabei ausnutzt, dass alle Funktionen diese Zeile haben
Quelltext
1: 2:
| 0 D40224 55 push ebp 1 D40225 8BEC mov ebp, esp |
Dass bedeuted, man muss quasi immer den nächsten ebp ermitteln, und dann den return-pointer finden.
Der stack sollte an der stelle dann doch so aussehen:
Quelltext
1: 2: 3: 4:
| xxxx return-pointer alter ebp Lokale variablen <--- Dahin zeigt der neue ebp |
d.h. ich benutze den ebp, um den alten ebp zu ermitteln und hangele mich da durch und ermittele jedes mal die return-pointer. Der sollte dann also an [ebp+8] liegen.
Wie sieht dass dan in der Praxis aus? Mir fehlt da so ein bisschen der ansatz. Hat jemand so etwas schonmal gemacht und kann mir da ein paar code-Zeilen (bzw. asm-Zeilen) liefern, mit denen ich anfangen kann?
Ich möchte jetzt nicht unbedingt fertigen Code, sondern eher einen Ansatz, wie man das ganze angeht.
lg Boldar