> Может, ещё как может. Стандарты защиты таковы, что системный код разбивают на
> две части: ядро + системная библиотека.я не знаю что ты такое называешь "системной библиотекой".
libc состоит из вполне банальных сишных функций - позиксных оберток, никакой совершенно "системной" мистики там нет. Ты можешь ими не пользоваться, а изобрести собственный велосипед с квадратным колесом, вот прямо в userspace, это ни на йоту не увеличит права твоей программы.
Вход в ядро возможен только через гейт, на x86/64 архитектуре это, внезапно, вызов int80, опять таки, у нас тут не винда, совершенно не нужно быть libc чтобы его вызвать, и да, пространство адресов ядра - отображается в твое, но ни прочитать что-то оттуда в обход гейта, ни тем более записать, ни исполнить, у тебя не получится, прилетит sig11 (наоборот тоже есть фокусы, в принципе, ядро умеет читать/писать твое адресное пространство, но старается этого не делать). Смысла флэт-модели ты тоже так и не осилил понять.
> *.dll, причём системная библиотека грузится в адресное пространство программы. Т.к.
libc -_самая_обычная_ библиотека, из самых обычных функций - можешь считать, что она и есть твоя программа. Так же, как если бы ты впрямую ее исходники себе в код воткнул.
(у винды все в разы сложнее, но в сторону еще больших ограничений, а не наоборот)
Разница только в том, что она есть не только у тебя, и как правило, байт-в-байт одинаковая, никто у себя это не пересобирает, поэтому гаджеты пресловутые проще собирать из ее частей, чем из неведомой твоей.
> библиотеки у всех общие, то системные библиотеки грузятся в разделяемую память,
мля, как все запущено.
Еще одна страшная новость: ВСЕ, включая только что тобой полученный из mycoolproga.c a.out - грузится "в разделяемую память". Запустишь 500 экземпляров - код в памяти будет все равно только один.
А на самом деле даже и не грузится, а mmap'ается прямо с диска.
И нет, он (при некоторых ограничениях) доступен и на запись тоже. Как это происходит и почему при этом не рушатся все остальные 499 - написано в том же учебнике, который ты так и не прочитал за эти пять часов дальше первого абзаца.
И нет, libc в этом плане ничем от твоей программы не отличается.
Не сдашь ты завтра информатику, даже не пытайся.
> Зная адреса, можно передать управление напрямую в системный код. Обычно, это
нет, нельзя. И про "кольца защиты" тоже забудь, их не используют по прямому назначению двести лет как.
Итого - даже про суть проблемы, которую решает патч - ты не понял ровным счетом ничего. Она не имеет ни малейшего отношения ни к ядру, ни к системным библиотекам.