и ESP обрабатываются как часть
Заметьте, что регистры ЕВР и ESP обрабатываются как часть пролога.
////////////////////////////////////////////////*/
typedef struct tag__REGSTATE
{
DWORD dwEAX;
DWORD dwEBX;
DWORD dwECX;
DWORD dwEDX;
DWORD dwEDI;
DWORD dwESI;
DWORD dwEFL;
} REGSTATE, * PREGSTATE;
/*//////////////////////////////////////////////////////////
Общий код пролога для всех DD_*-функций
//////////////////////////////////////////////////////////*/
#define HOOKFN_PROLOG() \
/* Все функции подключения автоматически получают три одинаковые */\
/* переменные. */\
DDEVENTINFO stEvtlnfo ; /* Информация о событиях для функции */\
DWORD dwLastError; /* Значение последней ошибки */\
REGSTATE stRegState ; /* Состояние регистра */\
{ \
_asm PUSH EBP /* ЕВР всегда сохраняйте явно. */\
_asm MOV EBP, ESP /* Переместить стек */\
_asm MOV EAX, ESP /* Получить указатель стека для вычисления /\
/* адреса возврата и параметров. */\
_asm SUB ESP, _LOCAL_SIZE /* Сохранить пространство для локальных*/\
/ * переменных * / \
_asm ADD EAX, 04h + 04h /* Счет для PUSH EBP и адреса возврата. */\
/* Сохранить начало параметров в стеке. */\
_asm MOV [stEvtlnfo.dwParams], EAX \
_asm SUB EAX, 04h /* Вернуться к адресу возврата. */\
_asm MOV EAX, [EAX] /* EAX теперь содержит адрес возврата. */\
/* Сохранить адрес возврата. */\
_asm MOV [stEvtlnfo.dwAddr], EAX. \
_asm MOV dwLastError, 0 /* Инициализировать dwLastError. */\
/* Инициализировать информацию событий. */\
_asm MOV [stEvtlnfo.eFunc], eUNINITIALIZEDFE \
_asm MOV [stRegState.dwEDI], EDI /* Сохранить два регистра /\
_asm MOV [stRegState.dwESI], ESI /* на время вызовов функций. */\
}
/*///////////////////////////////////////////////////////////
Общий код эпилога для всех 00_*-функций. INumParams -число параметров функции, которая используется для восстановления стека после вызова подключения.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий