Отладка приложений


         

Удобный макрос для заполнения информационной


{ \ 

_asm MOV [stRegState.dwEAX], EAX /* Сохранить значение EAX. */\ 

_asm MOV [stRegState.dwEBX], EBX /* Сохранить значение ЕВХ. */\

_asm MOV [stRegState.dwECX], ECX /* Сохранить значение ЕСХ. */\ 

_asm MOV [stRegState.dwEDX], EDX /* Сохранить значение EDX. */\

 _asm MOV [stRegState.dwEDI], EDI /* Сохранить значение EDI. */\ 

_asm MOV [stRegState.dwESI], ESI /* Сохранить значение ESI. */\

 _asm XOR . EAX, EAX /* Обнулить ЕАХ. */\ 

_asm LAHF /* в АН.*/\

_asm MOV [stRegState.dwEFL], EAX /* Загрузить значение флажков. */\ 

} \ 

dwLastError = GetLastError (); /* Сохранить значение последней */\

/* ошибки. */\

{ \ 

_asm MOV EAX, [stRegState.dwEAX] /* Восстановить ЕАХ */\

/* к его исходному значению. */\ 

/* Установить возвращаемое */\ 

/* значение для информации. */\

_asm MOV [stEvtlnfo.dwRetValue] , ЕАХ \ 

}

/*////////////////////////////////////////////////////////////

Удобный макрос для заполнения информационной структуры события

 /////////////////////////////////////////////////////////////////*/

 #define FILL__EVENTINFO(eFn) \

stEvtlnfo.eFunc = eFn ; \

stEvtlnfo.ePrePost = ePostCall; \

stEvtlnfo.dwThreadld = GetCurrentThreadld ()

 /*///////////////////////////////////////////////////////////////

Объявление для всех DD_*-определений

////////////////////////////////////////////////////////////////*/

#define NAKEDDEF _declspec(naked)

/*/////////////////////////////////////////////////////////////// 

БОЛЬШОЕ ПРИМЕЧАНИЕ

Все следующие прототипы похожи на cdecl-функции. Но это не так — все они stdcall-функции! Заказной пролог и эпилог гарантируют, что используется правильное соглашение о вызовах!

////////////////////////////////////////////////////////////////*/

////////////////////////////////////////////////////////////////*/

// Обязательные функции, которые должны быть перехвачены, чтобы выполнить

// системную работу

HMODULE DD_LoadLibraryA ( LPCSTR IpLibFileName);


Содержание  Назад  Вперед