Сейчас на форуме: kris_sexy, Wenzel, r0lka (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› Контекст структура
Посл.ответ Сообщение

Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 09 февраля 2006 10:36
· Личное сообщение · #1

Вопрос. Можно ли получить доступ к структуре Context без использования SetThreadContext и GetThreadContext ?

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels





Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 09 февраля 2006 10:38
· Личное сообщение · #2

да, можно, внутри обработчика исключения.



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 09 февраля 2006 10:42
· Личное сообщение · #3

Внутри любого обработчика ? Или надо какое то определенное исключение и специальный обработчик ?

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels





Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 09 февраля 2006 10:45
· Личное сообщение · #4

http://www.exelab.ru/art/wasm2.php#10



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 09 февраля 2006 10:52 · Поправил: Smon
· Личное сообщение · #5

Mario555
Пасиб за ссылку, но про то я читал. Везде вид такой -
mov esi, [ebp+KTRAP_FRAME.Dr0]
или xor eax,eax
mov [dr0],eax
Это всё разрешено только в ринг0, а я имею в виду обработчик под ринг3. Каким образом можно вычислить адреса dr'ов в обработчике без использования SetThreadContext и GetThreadContext... К сожалению никакой инфы по тому поводу нигде не нашел...

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




Ранг: 186.8 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 09 февраля 2006 12:50
· Личное сообщение · #6

CONTEXT STRUCT ; sizeof = 02CCh
regDr0 DWORD ? ; 0004h
regDr1 DWORD ? ; 0008h
regDr2 DWORD ? ; 000Ch
regDr3 DWORD ? ; 0010h
regDr6 DWORD ? ; 0014h
regDr7 DWORD ? ; 0018h

; This section is specified/returned if the
; ContextFlags word contians the flag CONTEXT_FLOATING_POINT.

FloatSave FLOATING_SAVE_AREA <> ; 001Ch

; This section is specified/returned if the
; ContextFlags word contians the flag CONTEXT_SEGMENTS.

regSegGs DWORD ? ; 008Ch
regSegFs DWORD ? ; 0090h
regSegEs DWORD ? ; 0094h
regSegDs DWORD ? ; 0098h

; This section is specified/returned if the
; ContextFlags word contians the flag CONTEXT_INTEGER.

regEdi DWORD ? ; 009Ch
regEsi DWORD ? ; 00A0h
regEbx DWORD ? ; 00A4h
regEdx DWORD ? ; 00A8h
regEcx DWORD ? ; 00ACh
regEax DWORD ? ; 00B0h

; This section is specified/returned if the
; ContextFlags word contians the flag CONTEXT_CONTROL.

regEbp DWORD ? ; 00B4h
regEip DWORD ? ; 00B8h
regSegCs DWORD ? ; 00BCh MUST BE SANITIZED
regEFlags DWORD ? ; 00C0h MUST BE SANITIZED
regEsp DWORD ? ; 00C4h
regSegSs DWORD ? ; 00C8h


; This section is specified/returned if the ContextFlags word
; contains the flag CONTEXT_EXTENDED_REGISTERS.
; The format and contexts are processor specific

ExtendedRegisters BYTE MAXIMUM_SUPPORTED_EXTENSION dup(?) ; 00CCh

CONTEXT ENDS


За это описание кланяемся Four-F-у... в твоем обработчике исключения по адресу [ebp+10h] лежит указатель на контекст.



Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 09 февраля 2006 13:17
· Личное сообщение · #7

то же самое для любителей С в winnt.h :
typedef struct _CONTEXT {

//
// The flags values within this flag control the contents of
// a CONTEXT record.
//
// If the context record is used as an input parameter, then
// for each portion of the context record controlled by a flag
// whose value is set, it is assumed that that portion of the
// context record contains valid context. If the context record
// is being used to modify a threads context, then only that
// portion of the threads context will be modified.
//
// If the context record is used as an IN OUT parameter to capture
// the context of a thread, then only those portions of the thread's
// context corresponding to set flags will be returned.
//
// The context record is never used as an OUT only parameter.
//

DWORD ContextFlags;

//
// This section is specified/returned if CONTEXT_DEBUG_REGISTERS is
// set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT
// included in CONTEXT_FULL.
//

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

//
// This section is specified/returned if the
// ContextFlags word contians the flag CONTEXT_FLOATING_POINT.
//

FLOATING_SAVE_AREA FloatSave;

//
// This section is specified/returned if the
// ContextFlags word contians the flag CONTEXT_SEGMENTS.
//

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

//
// This section is specified/returned if the
// ContextFlags word contians the flag CONTEXT_INTEGER.
//

DWORD Edi;
DWORD Esi;
DWORD Ebx;
DWORD Edx;
DWORD Ecx;
DWORD Eax;

//
// This section is specified/returned if the
// ContextFlags word contians the flag CONTEXT_CONTROL.
//

DWORD Ebp;
DWORD Eip;
DWORD SegCs; // MUST BE SANITIZED
DWORD EFlags; // MUST BE SANITIZED
DWORD Esp;
DWORD SegSs;

//
// This section is specified/returned if the ContextFlags word
// contains the flag CONTEXT_EXTENDED_REGISTERS.
// The format and contexts are processor specific
//

BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];

} CONTEXT;




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 09 февраля 2006 18:49
· Личное сообщение · #8

Smon пишет:
Везде вид такой -

ты бы прочитал до конца статью, а не только первые пару абзацев ;)



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 09 февраля 2006 18:58
· Личное сообщение · #9

MoonShiner пишет:
обработчике исключения по адресу [ebp+10h]

Вот это я и хотел услышать
Спасибо всем за ответы

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels



 eXeL@B —› Крэки, обсуждения —› Контекст структура
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати