@sddvxd

Почему есть смысл в вычитании из ESP?

Добрый день
Известно, что ESP указывает на вершину стека, читаю книгу:

К содержимому стекового фрейма можно обращать-
ся, используя адреса, "привязанные" к адресу, по которому содержится
адрес возврата, то есть, иначе говоря, ту ячейку памяти, начиная с ко-
торой в стек был занесён адрес возврата, используют в качестве своего
рода реперной точки. Так, если в стек занести три четырёхбайтных па-
раметра, а потом вызвать процедуру, то адрес возврата будет лежать в
памяти по адресу [esp] , ну а параметры, очевидно, окажутся доступны
по адресам [esp+4] , [esp+8] и [esp+12] . Если же разместить в стеке
локальные четырёхбайтные переменные, то они окажутся доступны по
адресам [esp-4] , [esp-8] и т. д.


Смутило последнее предложение: почему автор указал, что можно адресоваться выше стека? Там же ничего нет?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Достаточно подебажить какой-нибудь HelloWorld и сразу становится понятно, где в стеке лежат аргументы, а где локальные переменные.
Там же ничего нет?

На это и расчёт, там нечего испортить, поэтому можно положить на время своё.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Если же разместить в стеке
    локальные четырёхбайтные переменные, то они окажутся доступны по
    адресам [esp-4] , [esp-8] и т. д.

Смутило последнее предложение: почему автор указал, что можно адресоваться выше стека?

Правильно смутило, автор херню написал. Достаточно заглянуть в любой ABI чтобы убедиться, что область стека ниже (по адресам, меньшим) указателя стека зарезервирована и не должна меняться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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