· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Содержание EBP

Посл.отвђт Сообщенiе


Дата: Ноя 19, 2003 11:29:27

Добрый день!
Подскажите пожалуйста что содержит регистр EBP сразу после запуска программы. И зачем его сразу сохраняют в стек. Спасибо.


Дата: Ноя 19, 2003 12:01:33

animator
что содержит
Значение установленное вызывающей подпрограммой.

зачем его сразу сохраняют в стек
Таковы правила игры в win32.
Если твой код меняет содержимое одного из регистров: EBX, EDI, ESI, EBP, то необходимо их сохранять.


Дата: Ноя 19, 2003 12:13:25

... мне казалось при запуске любой Win32 программы EBP содержит что-то конкретное(или в EBP -остается всегда ). Мне просто хочется понять как сраатывает код получения delta - смещения.


Дата: Ноя 19, 2003 12:53:54

animator
Обычно через EBP организуют доступ к локальным переменным, поэтому он вполне конкретен для программы вызвавшей startproc.

код получения delta - смещения
Это откуда?
Может быть все что я написал не в тему?


Дата: Ноя 19, 2003 13:07:13

... да нет все в тему подскажите пожалуйста как работает этот кусок кода
CALL CallMe
CallMe:

POP EBP
SUB EBP, OFFSET CallMe ; EBP -> delta


Дата: Ноя 19, 2003 13:11:40

... получается в EBP должен находиться адрес конца программы ( и начала стека )если смещение от начала программы находится таким вычитанием. Я правильно решил ответьте пожалуйста.


Дата: Ноя 19, 2003 14:09:26

call пихает в стек адрес следующей инструкции,(pop ebp) pop его вынимает, а sub вычитает смещение этой самой инструкции. вот тебе и дельта...


Дата: Ноя 19, 2003 14:14:34

Sickle

... спасибо!


Дата: Ноя 19, 2003 15:30:08

носи на здоровье :)


Дата: Ноя 19, 2003 15:53:15

... извините за глупость всетаки хочу понять. Для того чтобы это работало нужно чтобы то что попало в стек после Call ,т.е. адрес следующей команды
Call CallMe
CallMe:

было не равно Offset CallMe, но Следующая команда и лежит то по ссылке СаllMe. То есть результат SUB всегда будет =0. Но ведь в зараженных файлах он не равен 0.
Вопрос как этот прием работает в вирусах.Еще раз извините.


Дата: Ноя 19, 2003 18:39:00

смотри:

00000000: E80000 call 000000003 ; Next
Next:
00000003: 665D pop ebp
00000005: 6683ED03 sub ebp,003 ;offset Next
в ebp будет 0 только если начало кода находится по адресу 0. загрузи в любой другой адрес - он и окажется у тебя в ebp. понятно?


Дата: Ноя 19, 2003 18:51:10

animator
Все очень просто. Вирусу нужно узнать адрес, по которому он загрузился. Адрес этот лежит в EIP - и указывает на текущую команду. Взять бы его оттдуа, и нет проблем. Но доступа к EIP у программы нету (спасибо Интелу). Команда CALL делает слежующее: кладет в стек значение EIP, указывающее на следующую команду, и изменяет значение EIP - передавая управление в соотв. часть кода. Нормальная функция завершается командой RET, которая достанет из стека адрес возврата, и передаст управление по нему. А вирус делает вместо RET команду POP EBP (или любой другой регистр) - и получает значение EIP, которое сохранила команда CALL. Ну, а дальше вычисляется дельта-смещение: разница между текущим адресом и тем, который "планировался" при компиляции.


Дата: Ноя 21, 2003 09:01:12

Sickle
Grenader
... СПАСИБО за терпение, сейчас это редкость! Теперь понятно :)Значит всетаки EIP а не адресс. Я плохо слушал тему CALL RET. Вернусь к первоисточникам дабы не шокировать больше своей глупостью. Еще раз Вам спасибо.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.097