В стеке вызовов у нас есть указатель на фрейм, который дает нам расположение аргументов для процедуры и адрес указателя на предыдущий кадр. У нас также есть обратный адрес. Зачем нужен обратный адрес? Не могли бы мы просто следовать указателям фрейма в стек, выталкивая фреймы стека, когда мы шли? Является ли обратный адрес просто оптимизацией?Зачем нам нужен обратный адрес?
ответ
Обратный адрес не указывает на предыдущий стек кадра, он указывает на сегмент кода следующей инструкции в вызывающем методе.
«В сегмент кода» -> Это то, что напомнило мне, что мой сон лишил мозг того, насколько я был глуп. Благодаря! –
Кадр указывает на пространство для хранения параметров и локальных переменных. Вы можете привести это в исходное состояние, но это не приведет к восстановлению указателя инструкции, старое значение которого было потеряно при вызове функции.
Обратный адрес - это только что сохраненный указатель инструкции.
Обратный адрес относится к адресу сегмента кода или инструкции, вызов функции которой создал этот стек. Это очень важные данные в соответствии с уязвимостями, так как в случае переполнения буфера злоумышленники получают адресное пространство, которое может привести к компрометации состояния
- 1. strtok_s() Зачем нам нужен адрес указателя?
- 2. Зачем нам нужен org.junit.ComparisonFailure?
- 3. Зачем нам нужен Control.Lens.Reified?
- 4. Зачем нам нужен contexClassLoader
- 5. Зачем нам нужен mktemp?
- 6. Зачем нам нужен strdup()?
- 7. Зачем нам нужен cmake?
- 8. Зачем нам нужен кеш?
- 9. Зачем нам нужен enabled_shared_from_this
- 10. Зачем нам нужен конструктор?
- 11. Зачем нам нужен @GeneratedValue?
- 12. Зачем нам нужен частный конструктор?
- 13. Зачем нам нужен сервер Fuseki?
- 14. Зачем нам нужен новый оператор?
- 15. Зачем нам нужен длинный тип?
- 16. Зачем нам нужен оператор «delete []»?
- 17. Зачем нам нужен сгенерированный код?
- 18. Зачем нам нужен полукруглый разъем?
- 19. Зачем нам нужен двумерный массив?
- 20. Зачем нам нужен TensorFlow tf.Graph?
- 21. Зачем нам нужен request.getSession (true)?
- 22. Зачем нам нужен IIS Express?
- 23. Зачем нам нужен компилятор C++?
- 24. Зачем нам нужен частный конструктор?
- 25. Зачем нам нужен SocketOptions.SO_BROADCAST для включения трансляции?
- 26. Зачем нам нужен протокол разрешения адресов?
- 27. Зачем нам кормить адрес scanf?
- 28. Зачем нам нужен оператор космического корабля?
- 29. Зачем нам нужен force.on ('tick' .. in d3
- 30. Зачем нам нужен karma-test-shim.js
Обратный адрес содержит адрес инструкции для возврата. Это иначе не хранится нигде. – Jester
Указатель на раму - это, как правило, предыдущие указатели стека. Обратный адрес является указателем предыдущей инструкции. –
Кадр необязательный, указатель кадра необязателен, обратный адрес не является необязательным. Также сильно оптимизирован внутри процессора для улучшения предсказания ветвления. –