2010-09-25 5 views
1

Знает ли кто-нибудь, если/как я могу читать из callstack с определенного адреса? Предположим, у меня есть адрес смещения от базового адреса callstack, как я могу получить базовый адрес?Callstack address

спасибо :)

+0

C++ на окнах. – Idov

ответ

0

Это сильно зависит от платформы, на которой ABI исполняемый работает. Я бы рекомендовал использовать один из доступных инструментов разборки для вашей платформы по выбору, эти инструменты обычно могут помочь получить такую ​​информацию. Например, IDA Pro для Windows и Linux.

+0

Я использую C++ на окнах, и я пытаюсь сделать это программно ... – Idov

+0

@Idov: все же вы должны использовать инструмент разборки, чтобы увидеть смещения, которые вас интересуют. Я сомневаюсь, что вы получите поваренную книгу решение здесь на SO –

+0

Я использую StackWalk64 для получения смещения. :) – Idov

0

В окнах, у вас есть API ходить полный стек вызовов:

Посмотреть этот пример в codeproject.com

+0

Я знаю, но мне нужен абсолютный адрес указателя рамки. :) – Idov

+0

Извините, у меня нет окна Windows, чтобы попробовать это сразу, но не параметр Offset внутри ADDRESS64 вернулся для AddrFrame именно так, как вы хотите? Если вы не используете старую модель памяти, это будет прямо абсолютная позиция указателя кадра. Я ошибаюсь? :) – Javier

+0

AddFrame, возвращенный из StackWalk, содержит только «смещение» ... – Idov

1

базового адреса стека в регистре ESP на архитектуре x86 Windows. Вы можете просмотреть ESP в «Registers» Windows отладчика VS

+0

Итак, если у меня есть относительный адрес указателя кадра некоторого метод (возвращаемый StackWalk64), все, что мне нужно сделать, чтобы получить его абсолютный адрес, добавляет отношение к ESP? – Idov

+0

Прошу прощения, если это глупый вопрос, но я немного запутался прямо сейчас ... – Idov

+0

В x86 стек растет из более высокой памяти в более низкую память. Так что из EBP вам действительно нужно будет вычесть/(или из ESP вы пришлось бы добавить) – Chubsdad

Смежные вопросы