Перехват "Ошибка проверки времени выполнения # 0 - значение ESP не было правильно" - PullRequest
2 голосов
/ 01 марта 2010

Итак, я вызываю функцию из неуправляемого DLL-файла из моего кода C #. В зависимости от аргументов, переданных этой функции, она может вызвать ошибку «Ошибка проверки времени выполнения # 0 - значение ESP не было правильно». Это совершенно нормальное поведение для функции (да, я знаю, это звучит ОЧЕНЬ странно, но потерпите меня ). Однако, если это произойдет, я хочу иметь возможность обрабатывать это, как если бы я обрабатывал исключение: просто изящно потерпеть неудачу, вывести сообщение пользователю и избежать сбоя всей моей программы. Возможно ли это?

1 Ответ

1 голос
/ 01 марта 2010

Если вы используете флаг GS, вы можете переопределить поведение, вызвав функцию __set_security_error_handler. Это позволяет вам указать функцию, которая вызывается при срабатывании флага GS и других ошибок безопасности.

Я настоятельно советую против этого все же. Любая функция, которая регулярно портит ESP, звучит как настоящая проблема. Вы также рискуете скрыть другие реальные проблемы безопасности, переопределив эту функцию.

Гораздо лучшим решением было бы пометить отдельный метод как обнаженный и не допустить проверки GS.

...