Program counter Wert ermitteln

Hallo

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

Gruss

Robert

Reply to
R.Freitag
Loading thread data ...

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/
 Click to see the full signature
Reply to
MaWin

...

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
Reply to
Axel Schwenke

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

Reply to
Uwe Hercksen

Jaja. Genau _das_ wollte ich ja auch wissen.

Danke!

Robert

Reply to
R.Freitag

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.