Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows


Структура CONTEXT - часть 2


// не включаются в CONTEXT_FUlL.
//

DWORD Dr0;
DWORD Dr1;
DWORD Dr2;
DWORD Dr3;
DWORD Dr6;
DWORD Dr7;

//
// Этот раздел определяется/возвращается, когда в ContextFlags
// установлен флаг CONTEXT_FLOATING_POINT,
// FLOATING_SAVE_AREA FloatSave;

//
// Этот раздел определяется/возвращается, когда в ContextFlags
// установлен флаг CONTEXT_SEGMENTS
//

DWORD SegGs;
DWORD SegFs;
DWORD SegEs;
DWORD SegDs;

//
// Этот раздел определяется/возвращается, когда в ContextFlags
// установлен флаг CONTEXT_INTEGER
//

DWORD Edi;
DWORD Esi,
DWORD Ebx;
DWORD Fdx;
DWORD Ecx;
DWORD Eax;

//
// Этот раздел определяется/возвращается, когда в ContextFlags
// установлен флаг CONTEXT_CONTROL.
//

DWORD Ebp,
DWORD Eip;
DWORD SegCs; // следует очистить
DWORD EFlags, // следует очистить
DWORD Esp,
DWORD SegSs;

//
// Этот раздел определяется/возвращается, когда в ContextFlags
// установлен флаг CONTEXT_EXTENDED_REGISTERS
// Формат и смысл значений зависят от типа процессора.
//

BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];

} CONTEXT;

Эта структура разбита на несколько разделов. Раздел CONTEXT_CONTROL содер жит управляющие регистры процессора: указатель команд, указатель стека, флаги и адрес возврата функции. (В отличис от x86, который при вызове функции помещает адрес возврата в стек, процессор Alpha сохраняет адрес возврата в одном из регист ров,) Раздел CONTEXT_INTEGER соответствует целочисленным регистрам процессо ра, CONTEXT_FLOATING_POINT — регистрам с плавающей точкой, CONTEXT_SEG MENTS — сегментным регистрам (только для x86), CONTEXT_DEBUG_REGISTERS — регистрам, предназначенным для отладки (только для x86), a CONTEXT_EXTEN DED_REGISTERS — дополнительным регистрам (только для x86).

Windows фактически позволяет заглянуть внутрь объекта ядра "поток" и получить сведения о текущем состоянии регистров процессора. Для этого предназначена функция:

BOOL GetThreadContext( HANDLE hThread, PCONTEXT pContext);

Создайте экземпляр структуры CONTEXT, инициализируйте нужные флаги (в эле менте ContextFlags) и передайте функции GetThreadContext адрес этой структуры. Функция поместит значения в элементы, сведения о которых Вы запросили




Начало  Назад  Вперед



Книжный магазин