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

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

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

20 ответов

89 просмотров

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта