Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых) |
eXeL@B —› Программирование —› Команда ENTER; вопросы. |
Посл.ответ | Сообщение |
|
Создано: 18 апреля 2006 16:25 · Личное сообщение · #1 Мое почтение всем. Разбираю команду enter и стековые кадры, по книге Григорьева. Не совсем понятна работа вложенной формы команды. В случае уровня 1 команда ENTER только распределяет в стеке запрошенную динамическую память, т.к. предшествующего индикатора для копирования нет.
Пробую такой код: enter 0, 1 call ENTER_l2 leave Регистры перед enter: EBP: 0x12FF80 ESP: 0x12FF18 После: EBP: 0x12FF14 ;как и ожидалось ESP: 0x12FF10 ;вот тут не понял, должно же быть ESP == EBP! Т.е. почему-то в индикатор лег еще и EBP ТЕКУЩЕЙ ф-ии, а не только вызывающей. Это, как я понимаю, противоречит цитате. Да и не совсем понятно зачем он там нужен. Есть еще пара вопросов по этой команде, но, возможно, сам пойму когда с этим вопросом разберусь. |
|
Создано: 18 апреля 2006 20:45 · Личное сообщение · #2 Всё нормально. После {ENTER 0,1} разность между EBP и ESP составляет 4 байта, что соответствует уровню вложености равному единице, т.к. в эти 4 байта пишеццо значение старого EBP, а памяти под переменные выделяеццо ноль. На каждый уровень вложенности требуется 4 байта, для сохранения каждого прежнего EBP. Таким образом, для ENTER X,Y выделяется X байт под локальные переменные + 4*Y под EBP. ----- Я медленно снимаю с неё UPX... *FF_User* |
|
Создано: 20 апреля 2006 00:21 · Личное сообщение · #3 Видимо, я что-то недопонимаю. Зачем писать 2 раза EBP? Т.е. сначала будет выполнено push ebp а потом будет произведено копирование индикатора (в "ENTER 1, 0" копирования происходить не должно, как я понимаю). Еще не ясно, каким образом происходит определение, с какого лексического уровня был произведен вызов? Это входит в компетенцию процессора? |
|
Создано: 23 апреля 2006 22:22 · Личное сообщение · #4 |
eXeL@B —› Программирование —› Команда ENTER; вопросы. |
Эта тема закрыта. Ответы больше не принимаются. |