Рисование стекового фрейма для x86 блока

Так, я отчасти смущен рисованием стекового фрейма для моего ассемблерного кода. У меня есть чувство, что я начал неправильно.

Вот то, что я получил до сих пор, но поскольку Вы видите, что я смущен на шаге 5, потому что я думаю, что мое начальное расположение является неправильным.

enter image description here enter image description here

Можно ли сказать мне, где я пошел не так, как надо?

11
задан Andriy Drozdyuk 9 March 2012 в 02:16
поделиться

3 ответа

Я бы начал с диаграммы, которая показывала некоторое (полу-) произвольное количество пустого пространства на «вершине» стека, и, вероятно, отобразите EBP и ESP слева со стрелками, указывающими, куда они указывают. Я использовал сплошные стрелки для «указывает на» и пунктирные для перемещения данных (оглядываясь назад, возможно, лучше было бы это изменить).

alt text

25
ответ дан 3 December 2019 в 03:17
поделиться

Расстояние между текущим ebp (после захвата из esp) и y в данном случае действительно составляет 8 байтов, как у вас возвращаемый eip и значение предыдущего ebp в стеке. Ваша диаграмма верна, насколько я могу судить, хотя адреса слева более запутаны:)

2
ответ дан 3 December 2019 в 03:17
поделиться

Вы правы со своей диаграммой. Компилятор использует некоторые приемы оптимизации: первый вызов «вполне нормальный», действительно, параметр «f» помещается поверх стека. Второй вызов откладывается после очистки локального контекста (инструкция «leave»), а параметр ir функции «h» «переработан», чтобы содержать «2». Затем второй «вызов» для «f» становится простым «jmp», поскольку это самая последняя строка в вызывающей функции «h» (контекст «h» уже был отброшен командой «leave»).

Пока!

0
ответ дан 3 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

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