Как отследить Stack Frame вручную, используя только необработанную запись в памяти программы?

У меня есть дамп памяти программы, и я знаю диапазон памяти стека. Мой вопрос вращается вокруг идентификации кадра стека в этом фрагменте памяти. Проще говоря, как я могу определить часть памяти, где хранится адрес возврата, который помещается в стек после инструкции вызова?

Я наткнулся на статью , в которой рекомендуется использовать Frame Pointer Unwinds. Это объясняет, что в начале кадра стека помещается адрес возврата, за которым следует указатель кадра. Указатель кадра указывает на адрес памяти в предыдущем кадре стека, который, в свою очередь, содержит адрес памяти еще более раннего кадра и так далее. Отслеживая эти адреса, можно перемещаться по всем кадрам стека. Однако, несмотря на анализ данных моего дампа, мне не удалось установить эту цепочку памяти.

Я ищу совет или методы у всех, у кого есть решение этой проблемы. Может ли кто-нибудь предложить подсказки или методы, которые помогут мне решить эту проблему?

Обратите внимание, что я не могу использовать CaptureStackBackTrace, я могу просто проверить ожидаемый статус исполняемого файла страницы памяти. Я работаю над оконной системой x86-64.

Я пытался читать многочисленные онлайн-ресурсы и анализировать данные из дампов памяти, но не знаю, какой подход использовать для определения кадра стека.

0 ответов

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