Можно ли поймать инструкцию, которая записала недопустимое значение в регистр ПК?

221
xiaokaoy

Например, после инструкции

pop 

записывает недопустимое значение, скажем, 0, в pcрегистр, ЦП попытается извлечь инструкцию, расположенную в 0, что обычно вызовет ошибку сегмента.

При обработке ошибки мы можем прочитать значения регистров, включая pcрегистр, который в данном случае равен 0. Очевидно, что если бы мы могли узнать адрес инструкции, вызвавшей недопустимое pcзначение, например адрес popинструкции выше, это помогло бы нам намного больше с отладкой. Есть ли способ отловить ошибку чуть раньше (поймать предыдущую инструкцию, которая вызвала ошибку)?

1
Используйте встроенный эмулятор с возможностью трассировки. sawdust 7 лет назад 0
Возможно, этот вопрос лучше подходит для stackoverflow (и я обычно предлагаю наоборот). Основная предпосылка: инструкция не является недействительной при ее получении - она ​​недействительна, когда процессор пытается ее выполнить. И хотя модель fetch-decode-execute довольно далека от того, как выглядит современный ARM-конвейер, факт, что эти две операции являются совершенно отдельными операциями, остается. unixsmurf 7 лет назад 0
Просто используйте отладчик, там должно быть около миллиарда. MariusMatutiae 7 лет назад 0

0 ответов на вопрос

Похожие вопросы