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

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

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

20 ответов

94 просмотра

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта