Пользовательский обработчик SEH с /SAFESEH

В настоящее время я пытаюсь создать компилятор на C++, который генерирует машинный код во время выполнения. Однако в настоящее время я пытаюсь включить безопасную обработку исключений (при компиляции с /SAFESEH ). Мой собственный обработчик исключений работает в режиме отладки, но когда я запускаю тот же код в режиме выпуска, мой процесс просто завершается.

Я совершенно уверен, что проблема в том, что я не могу зарегистрировать свой собственный обработчик исключений как таковой, потому что, когда я компилирую свой код с параметром /SAFESEH :NO, все работает нормально даже в режиме выпуска.

Мой собственный обработчик исключений написан в моем другом коде C++ -, и я попытался зарегистрировать его в качестве обработчика исключений, добавив в свой проект файл.asm -с содержимым:

.386
.model flat
_MyExceptionHandler@16 proto
.safeseh _MyExceptionHandler@16
end

как описано здесь . Затем был собран файл asm -с параметром /safeseh (среди прочих ).

Моя функция-обработчик в настоящее время имеет следующее объявление:

extern "C" EXCEPTION_DISPOSITION __stdcall MyExceptionHandler(struct
_EXCEPTION_RECORD *ExceptionRecord, void * EstablisherFrame, struct 
_CONTEXT *ContextRecord, void * DispatcherContext);

Каким будет правильный способ зарегистрировать эту функцию в качестве обработчика исключений?

Спасибо за любые предложения!

5
задан Filip 18 August 2012 в 21:43
поделиться