Здравствуйте, Ignoramus, Вы писали:
DLM>>Этот подход может очень серьезно повлиять на безопасность. Если в программе возникнет переполнение буфера, злоумышленник сможет узнать адрес метода (объекта)-обработчика. Таким образом, при переполнении буфера во время работы приложения использовать этот способ небезопасно.
I>Наверное имеется в виду, что злоумышленник может намеренно вызвать какое-нибудь исключение, к примеру — переполнение буфера и наблюдая поведение программы (очевидно, в дизассемблере
), получить относительный адрес обработчика этого исключения. И поскольку этот обработчик в данном случае единственный, то достаточно его перезаписать своим кодом и вуаля — можно делать (теоретически) с программой все что хочешь. Я эту фразу так понял, хотя не совсем представляю как сделать описанное на практике
.
Интересно, как его (обработчик) переписать?

Я понимаю, что можно адрес обработчика ПОДМЕНИТЬ.
Но это возможно только (поправьте?) в ситуации, когда обработчик является ОБЕРТКОЙ кода, то есть, его адрес имеется в стеке и его можно при переполнении перезаписать... Хотя смысла все равно не вижу.
DLM>>а во-вторых, чем это может быть опасно?
I>По-моему относительно недавно была обнаружена дыра в безопасности Internet Explorer кажется как раз на переполнении буфера основанная...
А чем ЗНАНИЕ АДРЕСА обработчика может помочь злоумышленнику?..
Что-то ум мой терзает, а что — не пойму