Ich benutze Linux mit x86 (64 Bit um genau zu sein). Gibt es eine Möglichkeit, die Adresse der aktuellen Anweisung zu bekommen. Eigentlich möchte ich meine eigenen vereinfachten Versionen von setjmp / longjmp schreiben. Hier hat R. eine vereinfachte Version von longjmp gepostet. Irgendeine Idee, wie setjmp implementiert wird. Eine vereinfachte Version, die ohne Berücksichtigung von Ausnahmen und Signalen usw. ist ...
Wenn Sie GCC verwenden, können Sie auch __builtin_return_address
verwenden.
Das Offset-in-das-aktuelle-Segment-Register ( EIP
) ist normalerweise nicht zugänglich. Es gibt jedoch einen indirekten Weg, um es indirekt zu lesen - Sie tricksen das Programm so, dass es den Wert von EIP auf den Stack überträgt, und lesen es dann einfach ab. Sie könnten eine Subroutine erstellen, die wie folgt aussieht:
Oder noch einfacher:
%Vor% Wenn Sie eine Anweisung CALL FAR
verwenden, wird der Segmentwert ( CS
) ebenfalls auf den Stapel geschoben.
Wenn Sie C verwenden, gibt es verschiedene Compiler-spezifische C-Erweiterungen, die Sie auf dieser Seite verwenden können. Siehe auch diesen interessanten Artikel .
Diese Website enthält eine einfache Version von setjmp und longjmp, die wie folgt aussieht .
%Vor%