SEH и int 3

Тема в разделе "WASM.WIN32", создана пользователем SolidCode, 29 ноя 2004.

  1. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    В своей проге я делаю final SHE. Он устанавливается апишной функцией (SetUnhandledExceptionFilter) для процесса. Он мне нужен для более приличного сообщения об исключениях. В нём же я отлавливаю дебужные исключения от int 3. В документации сказано, что на момент попадания в фильтр EIP указывает на инструкцию за int 3. В 98SE у меня всё так работает. Но в XP он впадает в бесконечный цикл. Там EIP указывает на саму инструкцию int 3, и я должен инкрементировать указатель на инструкцию, чтобы перейти через эту инструкцию.

    Кто нибудь уже встречался с такой проблемой?
     
  2. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Айс в системе установлен?
     
  3. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    Вообще-то в XP нет. В 98 - да.

    Но это не столь важно. Из фильтра SEH я вызываю MessageBox, который мне значение и говорит на данный момент.
     
  4. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    В том-то и дело, что важно. Айс меняет DPL обработчика, поэтому поведение проца меняется.

    Ты читал вторые упаковщики?
     
  5. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    Ух ты! Это уже довольно глубоко для меня. Возьму статью почитаю ещё раз, постараюсь разобраться.

    Так это надо детектить наличие Айса, чтобы правильно обрабатывать исключения? Или разбираться с DPL.
     
  6. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Да причем тут Айс?

    Я тоже с этим сталкивался, в win98 адрес исключения вытащенный через SEH будет указывать на следующую после int3 инструкцию, в 2k/XP этот адрес будет соответствовать адресу самой int3, вызвавшей исключение.



    В аттаче маленький тест, для сомневающихся :derisive:

    [​IMG] 795515244__seh.exe
     
  7. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Айс тут действительно особо не причем. DPL обработчика прерывания тут причем. Не надо шаманить. Все имеет четкое и логичное объяснение.
     
  8. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    volodya

    Статья об упаковщиках крутая, но для меня пока относительно тяжела. Надо будет ещё покопаться. Пока я нашёл такой выход:

    ;this macro allows to switch on and off all of the int 3 instructions at once

    int3 macro

    int 3 ;here is the funny thing. we avoid problem with different

    nop ;situations with SICE (inc .regEip or not)

    endm
     
  9. MoonShiner

    MoonShiner New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    44
    Asterix, вдогонку вопрос... С int3 все понятно, а что из себя будет представлять адрес исключения, если оно просходит не на CC (int3), а на F1? В ХР-юхе у меня он указывает на следующую, как и в случае с int3, команду. А в 9х нет возможности проверить (впадлу ставить, а рядом нет)... Так не можешь сказать?