SEH Context + Vista

Тема в разделе "WASM.WIN32", создана пользователем zaaqq1, 16 ноя 2008.

  1. zaaqq1

    zaaqq1 New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    2
    Проясните пожалуйста ситуацию, теперь чего в Vista нельзя читать/писать значения отладочных регистров DR0-DR4 через SEH? (у меня там нули стоят) или изменилась структура контекста?....
     
  2. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Прежде юзали посредством NtSetContextThread/NtContinue. хз..
     
  3. PE_Kill

    PE_Kill New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    107
    zaaqq1 в первое поле контекста, где лежат флаги, втыкаете флаг изменения DR регистров?

    PS В XP он там по дефолту выставлен, возможно в Vista подрезали и теперь руками надо.
     
  4. xorrax

    xorrax New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2008
    Сообщения:
    11
    PE_Kill
    Флаги теже (0x0001003F = CONTEXT_ALL), брякается одинаково на XP SP3 и Vista SP1.
    Видимо, у zaaqq1 ошибка в настройке Dr1-3 и Dr7.

    А что там должно быть при первом заходе в SEH если ты ничего на делал?
    Нули.
    Ставь BP и возращайся из SEH-обработчика с ExceptionContinueExecution.
    Как точка сработает, снова вывалишься в SEH-обработчик - нулей не будет :)

    Код (Text):
    1. FORMAT PE GUI 4.0
    2. entry start
    3. include 'include\win32a.inc'
    4. section '.main' code readable writable executable
    5. proc start
    6.          call    base
    7. base:
    8.          xor    eax, eax
    9.          add    dword [esp], (exhnd - base)
    10.          push   dword [fs:eax]
    11.          mov    dword [fs:eax], esp
    12. bugcode:
    13.          mov    eax,  [eax]
    14.          pop    dword [fs:eax]
    15.          pop    eax
    16.          retn
    17. exhnd:
    18.          xor    eax, eax
    19.          mov    ecx,  [esp + 0Ch]
    20.          cmp    dword [ecx + 0B8h], bugcode
    21.          jnz    drbp
    22.          add    dword [ecx + 0B8h], 02h
    23.          mov    dword [ecx + 018h], 0101h
    24.          push   dword [ecx + 0B8h]
    25.          pop    dword [ecx+04h]
    26.          jmp    exend
    27. drbp:
    28.          push   0
    29.          pop    dword [ecx+04h]
    30. exend:
    31.          retn
    32. endp
     
  5. zaaqq1

    zaaqq1 New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    2
    все прояснилось) при удаленной отладке туда не помещаются точки останова (windbg), при обыкновенной - помещаются