Ist es möglich, die Anweisung abzufangen, die einen ungültigen Wert in das PC-Register geschrieben hat?

293
xiaokaoy

Nach einer Anweisung zum Beispiel

pop 

schreibt einen ungültigen Wert, z. B. 0, in das pcRegister, die CPU versucht, die Anweisung 0 abzurufen, die normalerweise einen Segmentfehler auslöst.

Während der Fehlerbehandlung können wir die Werte der Register lesen, einschließlich der Werte des pcRegisters, die in diesem Fall 0 sind. Wenn wir die Adresse der Anweisung, die den ungültigen pcWert verursacht hat, wie die Adresse der popobigen Anweisung, herausfinden können, würde dies natürlich beim Debuggen mehr helfen. Gibt es eine Möglichkeit, den Fehler ein wenig früher zu fangen (den vorherigen Befehl abfangen, der den Fehler verursacht hat)?

1
Verwenden Sie einen In-Circuit-Emulator mit Trace-Funktion. sawdust vor 7 Jahren 0
Dies ist wahrscheinlich eine Frage, die besser für den Stackoverflow geeignet ist (und ich schlage generell den umgekehrten Weg vor). Grundvoraussetzung: Die Anweisung ist beim Abrufen nicht ungültig - sie ist ungültig, wenn der Prozessor versucht, sie auszuführen. Auch wenn das Abrufdecodierungs- und -ausführungsmodell von einer modernen ARM-Pipeline ziemlich weit entfernt ist, bleibt die Tatsache, dass es sich bei den beiden deutlich voneinander getrennten Operationen handelt. unixsmurf vor 7 Jahren 0
Verwenden Sie einfach einen Debugger, da muss es ungefähr eine Million sein. MariusMatutiae vor 7 Jahren 0

0 Antworten auf die Frage