Что означает, что регистр Ebp указывает на старый Ebp

Недавно я изучал ассемблер x86 для обратного проектирования, и в моем уроке есть предложение, в котором говорится, что Ebp указывает на старый Ebp, однако я этого не понимаю, это сбивает с толку.

Я просмотрел другие сообщения об этом, но никто не ответил на мой вопрос.

1 ответ

Смысл одного указателя кадра, ссылающегося на другой, заключается в том, что это создает связанный список кадров стека, каждый кадр стека может использоваться для идентификации предыдущего (вызова, вызова) кадра стека — это означает, что (A) отладчик может отслеживать вызов stack, (B) мы можем развернуть стек для обработки исключений (catch/throw).

(Обратите внимание, что для завершения этих заданий требуются некоторые дополнительные действия/информация, а также то, что механизм указателя кадра является лишь одним из нескольких способов выполнения трассировки стека.)

Текущее относится к месту, в котором текущий кадр сохранил предыдущее значение.

Это создает классический односвязный список. Итак, разыменуйте current и получите значение Prior, сделайте то же самое с Prior и получите Prior.

Поскольку предшествующее значение передается как первое нажатие недавно вызванной функции, которая была вызвана с использованием какой-либо инструкции вызова, мы знаем, что в стеке есть адрес возврата непосредственно над каждым старым значением.

Поскольку адрес возврата всегда находится рядом с и мы можем проследить за каждым из них до вызывающего объекта (фрейм вызывающего объекта), мы можем найти код, выполнивший вызов — для этого требуется использовать адрес возврата и некоторую проверку диапазонов для идентификации вызывающей функции. . Таким образом, ключевым элементом связанного списка, созданногоebpзначения, указывающие на предыдущий кадр, — это доступ к адресам возврата в кадрах стека, которые можно использовать для идентификации функции (и даже того, какое место в функции), выполнившей вызов.

Другие вопросы по тегам