Program counter Wert ermitteln

Jul 13, 2003 4 Replies

Hallo



ich suche eine Möglichkeit, den Wert des PC in C auszulesen bzw. zu speichern. Weiss jemand, wie es geht?



Gruss



Robert


Thomas Belau schrieb im Beitrag ...

Na ja, der Prozessor muss es nicht tun. Wenn der C-Compiler wie ueblich die Return-Adresse auf den Stack legt, und die Bitanzahl von Code-Adressen mit der Bitanzahl des Datentyps int uebereinstimmt, und keine Registeroptimierungen an sind, hilft dieser Konstrukt:

int PC(int i) { return *(&i+1); }

um an jeder Programmstelle den PC zu holen:

addr=PC(0); // liefert den PC *an einer Stelle innerhalb der Zeile*

Das allerdings stimmt, doch es geht wohl um uC.

Manfred Winterhoff, reply-to invalid, use mawin at gmx.net homepage: http://www.geocities.com/mwinterhoff/ de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/ Read 'Art of Electronics' Horowitz/Hill before you ask. Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.

...

Oops. Das kann beliebig weit daneben gehen. Dein Konstrukt setzt noch voraus, daß der Stack nach unten wächst und der Compiler wirklich nur Returnadresse und Argument auf den Stack legt.

An den OP: in C gibt es keinen PC, die Frage ist also relativ sinnfrei. Allerdings können die meisten Linker ein Mapfile schreiben, das zumin- dest die Adressen aller globalen Variablen und Funktionen enthält.

XL

Das ist halt der Unterschied: Unix ist ein Betriebssystem mit Tradition, die anderen sind einfach von sich aus unlogisch. -- Anselm Lingnau

R.Freitag schrieb:

Hallo,

äh, ich wollte Dir doch gerade begreiflich machen das es für die Ermittlung des Program Counters keine portable Lösung gibt, weil es dazu in Standard C nichts gibt.

Bye

Jaja. Genau _das_ wollte ich ja auch wissen.

Danke!

Robert

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required