Здравствуйте, D1g174LM4n14c, Вы писали:
DLM>С. Макконнелл, книга "Совершенный Код".
DLM>Часть II, Глава 8 — Защитное программирование.
DLM>Раздел 8.3 — Способы обработки ошибок.
DLM>Описываеются варианты способов обработки ошибок, среди которых следующий:
DLM>"Вызвать процедуру или объект — обработчик ошибок"
DLM>DLM>Другим подходом к централизованной обработке ошибок является создание глобальной специализированной процедуры или объекта. Преимущество его в том, что контроль над обработкой ошибок сосредоточен в одном месте, что облегчает отладку.
DLM>...
DLM>Этот подход может очень серьезно повлиять на безопасность. Если в программе возникнет переполнение буфера, злоумышленник сможет узнать адрес метода (объекта)-обработчика. Таким образом, при переполнении буфера во время работы приложения использовать этот способ небезопасно.
DLM>Я выделил жирным шрифтом тот момент, который остался для меня неясным. Хотя я знаю, что такое переполнение буфера и как это работает, — я не понял что имел ввиду автор. Во-первых, каким образом при переполнении можно узнать адрес обработчика (в общем случае),
Наверное имеется в виду, что злоумышленник может намеренно вызвать какое-нибудь исключение, к примеру — переполнение буфера и наблюдая поведение программы (очевидно, в дизассемблере

), получить относительный адрес обработчика этого исключения. И поскольку этот обработчик в данном случае единственный, то достаточно его перезаписать своим кодом и вуаля — можно делать (теоретически) с программой все что хочешь. Я эту фразу так понял, хотя не совсем представляю как сделать описанное на практике

.
DLM>а во-вторых, чем это может быть опасно?
По-моему относительно недавно была обнаружена дыра в безопасности Internet Explorer кажется как раз на переполнении буфера основанная...
DLM>Спасибо.