Проще говоря, привилегированные инструкции обычно связаны с вводом-выводом с аппаратными устройствами или защитой памяти. Доступ к ним из произвольных процессов без прохождения какой-либо центральной логики позволит процессам уничтожить память других процессов, испортить файловую систему и т. д. Либо случайно, либо намеренно.
Если мы рассмотрим некоторые распространенные системные вызовы, например,. open()
, read()
, write()
и другие, которые обращаются к файлам и в конечном итоге приводят к вводу-выводу на диск или другое устройство. Или fork()
и mmap()
, которые влияют на память процесса или других процессов.
Конечно, что-то вроде превращения процесса , а не в системный вызов, не требует привилегий и может быть выполнено с помощью библиотеки. То же самое для подделки результатов системного вызова.Хотя, конечно, что-то вроде изменения всех отметок времени на две недели назад (, как в примере libfaketime
), требует сначала выяснить правильное время, и это должно произойти через системный вызов. В дополнение к libfaketime
и libeatmydata
есть, например. fakeroot
который делает вид, что процесс выполняется под UID 0.