|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Igor Plekhov 2:5020/400 27 Oct 2004 02:29:06 To : Zahar Kiselev Subject : Re: неисполняемый стэк в 2.4 ? -------------------------------------------------------------------------------- On Tue, 26 Oct 2004 14:14:34 +0400, Zahar Kiselev <Zahar.Kiselev@p1.f382.n5030.z2.fidonet.org> wrote: > > >> А кто сказал, что буфер в программе обязательно надо объявлять как > >> автоматическую переменную? Я бы даже сказал, что более традиционно > >> размещать буферы при помощи malloc. > IP> те, от переполнения которых якобы защищает неисполняемый стек, > IP> размещаются в стеке. > Стэк - это такой же сегмент как и все прочие. Если реализовать(вернее - > задействовать) возможность установки прав на сегменты, а заодно и проверку > границ сегментов - то защищенность(прежде всего от ошибок в программах) > повысится. стек -- единственный и неповторимый. в нём содержатся автоматические переменные, и адреса возврата из функций. а других сегментов данных может быть много. преимущество использования стека -- в простоте. если под автоматические переменные выделять отдельные сегменты, то придётся отслеживать, какие сегменты заняты, какие свободны. защита от переполнения стека и некоторого сегмента данных имеет разный смысл. если переполнился стек, то его надо расширить (вроде так и делается в Линуксе ?). если переполнился сегмент данных, то это ошибка в программе. > Можно добавить директиву #pragma к тем что уже имеются в gcc. > А можно сделать внешнюю переменую, объявленную в libc и доступную из любого > места в программе - влияющую на поведение функции malloc - при одном значении > malloc будет создавать массив в отдельном сегменте, при другом - в общем > сегменте "кучи". Конечно и то и другое требует небольшой модификации кода > программ, которые захотят этим механизмом пользоваться. Hо ничего сложного я > в этом не вижу. > С одной стороны - не так уж много программ, использующих восемь тысяч > переменных. Имеется в виду не _один_ массив, а 8к, а именно восемь тысяч > _отдельных_ именованых переменных. Так что можно и наделать сегментов. > > С другой стороны - изложенный выше способ лучше так как позволяет > программисту управлять размещением переменных. да, такое было бы приятно иметь... -- Registered Linux User #124759 --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/6577e9f9378f.html, оценка из 5, голосов 10
|