Различное поведение SEH в debug и release версиях программы.

Тема в разделе "WASM.WIN32", создана пользователем nobodyzzz, 17 мар 2007.

  1. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    Hi, all
    Вообщем у меня такая проблема - один и тот же код(в аттаче) ведет себя по разному в debug и release сборках...
    В кратце, я использую SEH что бы вмешать в работу нужной мне функции. В debug сборке в отлично работает. В release похоже что мой SEH вообще не вызываеться, хотя Olly показывает его в SEH chain. Обработчик устанвливаю стандартным способом т.е.
    Код (Text):
    1. __asm
    2.     {
    3.         push MapiInitHook
    4.         push fs:[0]
    5.         mov fs:[0], esp
    6.     }
    MapiInitHook имеет следуюший прототип:
    Код (Text):
    1. EXCEPTION_DISPOSITION
    2. __cdecl
    3. MapiInitHook(
    4.     struct _EXCEPTION_RECORD *ExceptionRecord,
    5.     void * EstablisherFrame,
    6.     struct _CONTEXT *ContextRecord,
    7.     void * DispatcherContext )
    Может я забыл о чем? Заранее спасибо.
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    стандартным это с помощью встроенных __try/__except к примеру
     
  3. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    ну это не совсем то что мне надо =)) я перехватываю не саму функцию, а вмешиваюсь в работу функции т.е. мне потом в нее нужно вернуть управление.
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    все-равно для этого вряд ли нужно юзать асм вставки
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    nobodyzzz
    SetUnhandledExceptionFilter и в фильтре верни ExceptionContinueExecution
     
  6. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    nobodyzzz
    Если seh на асм вставках, то загляни сюда
     
  7. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    Great
    Спасибо, помогло. Но все-таки интересно было бы узнать почему не работает в release версии...
     
  8. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    nobodyzzz
    http://wasm.ru/forum/viewtopic.php?pid=165633#p165633
    Если в релиз версии будет присутствовать LoadConfig таблица установленые вручную обработчики глючат.
    Обнули LoadConfig RVA и LoadConfig Size и проверь.
     
  9. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    PaCHER
    спасибо, познавательно. Но у меня что release что в debug LoadConfig RVA и LoadConfig Size = 0. Что в принципе логично т.к. я компилю без поддержки CRT.
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    кстати можно заставить вообще-то __try/__except вернуть управление обратно. следующим кодом:

    Код (Text):
    1. ULONG ExceptionFilter( EXCEPTION_POINTERS* Exception)
    2. {
    3.    // Process exception
    4. ...
    5.    return EXCEPTION_CONTINUE_EXECUTION;
    6. }
    7.  
    8. ...
    9.  
    10. __try {
    11. ....
    12. }
    13. __except( ExceptionFilter(GetExceptionInformation()) ) {
    14. // empty handler
    15. }