Здравствуйте, gear nuke:
Спасибо за наиболее вразумительный ответ, ведь ассемблер я пока не знаю и глядя на лист дизасемблированной программы не могу найти нужного. Темболее там полно др. вещей.
GN>В общем случае нельзя по исходнику сказать, в каких адресах будет переменная n, но скорее всего — ниже, т.е. надо
GN>[c]
GN> b[-2]='C'; //Переполнение
Этот вариант подошол и сработал отлично, тут вы по моему ошиблись с моделями заполнения памяти, но лиш чуть чуть.
Стек памяти под функцию, для переменных класса auto:
Направление заполнения: <---
--------------------------------------|
| Переменная | Массив ------------> |
--------------------------------------|
Из этой модели которую представил себе я наглядно видно, что массивы индексируются и распологаются с лева на право.
Ну а стек памяти под функцию с права на лево, по этому ваш пример который вы привели (откорректировав мой сработал), но можно было не писать b[-2]='C'; достаточно b[-2]='C';.
И отсюда вопрос: b[-2]='C'; — это уже расширение массива до ячейки за переменной n которую требовалось переписать, но видимо это влечет за собой уничтожение значений в переменной n из за того что эта ячейка памяти теперь автоматически вошла в пределы массива, так ли это или я ошибаюсь?
И во вторых почему вернулся мусор, возможно из за догадки которая описана мной чуть выше?
GN>Но обычно переполнение делают не для того, что бы функция вернула не то значение, а что бы выполнился некоторый код, из-за перезаписи на стеке адреса возврата.
Спасибо за разъяснение, это я знал но всеравно пока не понимаю точно как.....
Эти знания мне нужны для того что бы сразу привыкать писать устойчивый к таким атакам код, ибо проверка при включенной опции компилятора для защиты от таких вещей показала не состоятельность компилятора — получается то же что и при выключенной опции!
Еще раз спасибо gear nuke, за наиболее вразумительную помощь в этом вопросе
--------------------------------------------------------------------------------------------------------------------
P.S: Мне кажется это тот вопрос на который надо найти ответ уже сейчас, а то потом

............