|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Zahar Kiselev 2:5030/382.1 26 Oct 2004 15:14:34 To : Igor Plekhov Subject : Re: неисполняемый стэк в 2.4 ? -------------------------------------------------------------------------------- Oct 26 12:00 04, Igor Plekhov wrote to Zahar Kiselev: >> А кто сказал, что буфер в программе обязательно надо объявлять как >> автоматическую переменную? Я бы даже сказал, что более традиционно >> размещать буферы при помощи malloc. IP> те, от переполнения которых якобы защищает неисполняемый стек, IP> размещаются в стеке. Стэк - это такой же сегмент как и все прочие. Если реализовать(вернее - задействовать) возможность установки прав на сегменты, а заодно и проверку границ сегментов - то защищенность(прежде всего от ошибок в программах) повысится. >> IP> для этого надо _каждый_ буфер помещать в отдельный сегмент. >> А что в этом плохого? >> Хотя можно и не каждый, а только критичные с точки зрения >> безопасности. IP> а как компилятору (или кому там) определить, какой критичный, IP> а какой нет ? Можно добавить директиву #pragma к тем что уже имеются в gcc. А можно сделать внешнюю переменую, объявленную в libc и доступную из любого места в программе - влияющую на поведение функции malloc - при одном значении malloc будет создавать массив в отдельном сегменте, при другом - в общем сегменте "кучи". Конечно и то и другое требует небольшой модификации кода программ, которые захотят этим механизмом пользоваться. Hо ничего сложного я в этом не вижу. >> IP> так никаких сегментов не хватит... >> Если я правильно помню(нет под рукой книги) - то на каждую задачу >> может быть 8192 сегментов. Hе так уж много программ, в которых >> требуется _такое_ количество буферов. IP> а как определить, некоторая переменная -- буфер или нет ? наверно IP> при таком подходе придётся каждую переменную в свой сегмент пихать. С одной стороны - не так уж много программ, использующих восемь тысяч переменных. Имеется в виду не _один_ массив, а 8к, а именно восемь тысяч _отдельных_ именованых переменных. Так что можно и наделать сегментов. С другой стороны - изложенный выше способ лучше так как позволяет программисту управлять размещением переменных. IP> в подобной защите ничего плохого конечно же нет. проблема только в IP> том, что её (защиты) нет. её нужно (нужно ли ?) создать. Когда-то, и причем не так давно, и Линукса вообще небыло. IP> тратить на это время, которое можно потратить на что-то более интересное. А когда я в середине 90-х впервые поставил на свою машину Линукс - мне тоже говорили - "зачем ты с этим возишься, есть же вот какие хорошие вин95, под ними столько игрушек работает". Те люди устраивали соревнования по компьютерным играм и приобрели известность в печати, а я зачем-то сидел и учился писать скрипты на bash и настраивать tcp/ip.:-) Zahar(@spbdept.rbc.ru) Остров Большой Березовый: http://birch-island.spb.ru --- Msged/LNX 6.1.1 * Origin: N:60.20' E:28.37' (2:5030/382.1) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/3288417e6df6.html, оценка из 5, голосов 10
|