API Spying
Категория реферата: Рефераты по информатике, программированию
Теги реферата: ответы на сканворды, решебник по математике 6
Добавил(а) на сайт: Lisicyn.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата
Рефераты | Рефераты по информатике, программированию | API Spying |
Она сохраняет в стеке адрес, по которому нужно передать управление после окончания функции, и передаёт управление на начало функции.
Передача параметров
Процессор Intel x86 ничего не знает о параметрах вызываемых функций, поэтому механизм передачи параметров может быть произвольным, главное чтобы вызывающий и вызываемый код договорились о нём заранее. Мест, где можно сохранить параметры, не так уж и много: либо в регистрах, либо в стеке, либо часть там, а часть там.
ПРИМЕЧАНИЕ Конечно, можно передавать параметры по ссылке или по значению, в прямом порядке или в обратном, но это для нас не важно, важно только то, где передаваемая информация (параметры или их адреса) находится. |
Передача параметров через регистры используется в основном в двух случаях:
Компилятором для оптимизации.
Ассемблер-программистом из лени или в погоне за производительностью. Чтобы достать параметры из стека, надо написать несколько дополнительных команд, а в регистрах они сразу под рукой.
В большинстве остальных случаев параметры передаются через стек. При этом вызов функции выглядит примерно так:
push ... ; Параметр push ... ; Ещё один параметр push ... ; И последний параметр call xxxxxh ; Вызов |
А стек к моменту начала выполнения функции – так:
Рисунок 1. Состояние стека в начале выполнения функции.
Возврат из функции
Возврат управления производит инструкция ret, имеющая четыре различные формы:
ret ret xxxh retf retf xxxh |
ПРИМЕЧАНИЕ Модификация retf предназначена для возврата из функции, которую вызвали из другого сегмента («дальним вызовом»). Ниже она не упоминается, так как, во-первых, в Windows вы её вряд ли встретите, во-вторых, с точки зрения реализации API Spying-а, она практически не отличается от ret. |
Задача, выполняемая ret*: