185 похожих чатов

Читал сейчас в интеловском мануале раздел про стек и возникло

пару вопросов:
1. Написано, что ebp обычно указывает на return instruction pointer, здесь имеется в виду, что с помощью него легко вычислить указатель на предыдущий фрейм? Потому что я читал, что сам регистр bp статически указывает на начало фрейма, а по адресу хранится указатель на предыдущий bp(я так понимаю, для профилировалия, чтоб пробежаться по стеку)
2. Написано, что процессор автоматически ссылается на ss регистр для операциями со стеком. Здесь же просто имеется я виду, что автоматически смещение проставляется по отношению к текущему сегменту ss?

20 ответов

57 просмотров

1: это совершенно не обязательно; 2: это значит, что при чтении со стека или записи в него, автоматически используется сегмент в SS

Evg-Resh Автор вопроса
disba1ancer
1: это совершенно не обязательно; 2: это значит, ч...

1. А на практике какие-то компиляторы так делают? 2. Да, это и имел в виду, спасибо

Evg Resh
1. А на практике какие-то компиляторы так делают? ...

1: как именно? почти все компиляторы со включённой оптимизацией могут не использовать ebp в качестве указателя фрейма

Evg-Resh Автор вопроса
Evg-Resh Автор вопроса
Михаил Брусникин
Почитай про -fno-omit-frame-pointer

Да, я уже глянул на годболт, что его вообще нет, но мне скорее интересно, когда он есть

Evg Resh
ebp для указателя на return instruction pointer

это поведение по умолчанию у большинства в т.ч. при отключённой оптимизации, только ebp не на return указывает, а на старое значение ebp, после которого уже идёт return instruction pointer

Evg Resh
Да, я уже глянул на годболт, что его вообще нет, н...

Ну цепочка строится только если явно no-omit укажешь. Для исполнения программы эти фрейм поинтеры не особо нужны за исключением редких конвенций вызова.

Evg-Resh Автор вопроса
disba1ancer
это поведение по умолчанию у большинства в т.ч. пр...

return ip разве не после первого ebp идет(в смысле после ebp callee)?

Evg Resh
return ip разве не после первого ebp идет(в смысле...

обычно функции при входе сразу сохраняют ebp, в конце обычно делается: mov esp, ebp pop ebp ret

а где ты картинку взял?

Evg-Resh Автор вопроса
disba1ancer
а где ты картинку взял?

1 том интеловского манула 6.2

> что с помощью него легко вычислить указатель на предыдущий фрейм ... если он вообще пишется в ebp например на том же GCC его генерацию можно отключить с помощью -fomit-frame-pointer

Evg Resh
1 том интеловского манула 6.2

у меня, кстати, прямо под картинкой хороший абзацс пояснением твоего второго вопроса

usernameak
> что с помощью него легко вычислить указатель на ...

но лучше оставить решение на усмотрение компилятора, ибо адресация по стеку относительно ebp генерирует более короткие инструкции

Evg-Resh Автор вопроса
disba1ancer
у меня, кстати, прямо под картинкой хороший абзацс...

Ну там только написано, что сегмент автоматически используется, который сейчас в ss, но что это на уровне адресации значит не совсем было понятно

disba1ancer
но лучше оставить решение на усмотрение компилятор...

это не совсем так - оно отключает их только там где он не используется внутри функции :)

usernameak
это не совсем так - оно отключает их только там гд...

ну тогда ладно, но оно емнип и так включается на O2/O3

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

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
10
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
открыть папку в проводнике: 1 - ShellExecute 2 - ExecuteProcess 3 - OpenDocument что лучше выбрать?
Alexey Kulakov
12
Изменение типа с SomeException на String и правда удобней @cheese_hs . А вот такой вариант насколько некрасив еще? loadConfigDB :: IO (Either String ConfigDataBase) loadConfi...
Camara
7
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Карта сайта