для ЯВУ нужно (и не для SEH, а, скорее, вообще для работы с локальными переменными, потому что Си любит локальные переменные)? Уровень вложенности это вообще понятие от enter op2, вроде как, пошло
Кстати, на 16ти битах нельзя адресовать относительно sp, только относительно bp
А как это относится к SEH на Windows
Никак, это просто интересный факт
еще через bx можно
Можно, но сегмент по умолчанию будет не тот
значит надо указывать нужный
Установить-то ты можешь что угодно, но вот адресовать локальные переменные в обработчике относительно esp сложно. Кто его знает, что там в esp было, когда исключение произошло. А с ebp достаточно лишь восстановить этот самый ebp.
Ну вот я и говорю - дело в локальных переменных А изначально вообще всё пошло от того, почему компилятор Си создаёт кадр стека там, где без него можно обойтись. И вот на O3 он без него и обходится Но ProMinick выдвинул идею, что это с SEH связано. С SEH это не связано, а вот с локальными переменными - да. Но это не относится к тому, что без EBP можно обойтись, где нужны локальные переменные. Как раз где локальные переменные - и нужен кадр EBP
Есть ещё плюсовые исключения, которые в винде через SEH реализованы. Там всё как раз на ebp завязано. А что касается кадра стека — банально анализировать крэшдампы гораздо проще. И дёшево. Если быстродействие настолько важно, что какой-то там push ebp сильно влияет, функцию лучше заинлайнить. Не будет ни функции, ни кадра стека.
где локальные переменные достаточно кадра esp. добавляются макросы для трекинга смещения ESP push`ей, pop`ов, sub`ов esp,imm , add`ов esp, imm, invoke`ов, добавляются макросы для ручных фиксов, т.к. поток исполнения не линейный и есть jmp`ы. Так что локальные переменные я предпочитаю использовать через ESP frame pointer. И когда нибудь введу автоматизацию расчета смещений дружащую с макросетами local & struct.
Зачем? Макросы.. автоматизация рассчётов.. Что-то, что я точно не буду использовать для локальных переменных К тому же, в FASM уже есть подобное Вроде, входит в макрос locals/local
есть, но реализовано криво. точнее в официальном пакете все реализовано из расчета на ebp frame, а вот esp frame я пока реализовал криво.
И зачем тебе это нужно? Чем EBP не угодил?
Обсуждают сегодня