Что происходит, если процесс вызывает код, принадлежащий другому процессу?
Что произойдет, если процесс вызовет для выполнения кода дальний указатель, принадлежащий другому процессу?
В 32-разрядном режиме работы GDT используется нетривиально, и сегментация может использоваться полностью.
Итак, что произойдет, если запрошенный указатель CS указывает на сегмент другого процесса?
Иногда это разрешено, я думаю.
Но, как правило, это не так.
В 64-битном режиме сегментация наполовину отключена.
Все сегменты идут от 0 до вершины линейного пространства процессора.
Кроме того, GDT, кажется, тривиально используется; Linux, например, выбрасывает весь пользовательский код из всех процессов в один сегмент.
То же самое для системного кода.
Таким образом, в 64-битном режиме вам даже не понадобится дальний указатель для вызова кода другого процесса.
Может быть, мой вопрос можно свести к следующему:
Что происходит, когда процесс пытается вызвать код другого процесса?
1 ответ
На какой ОС вы работаете?
В целом, ваша ОС запускает ваш процесс в защищенной памяти, то есть нет доступа к памяти, не принадлежащей вашему процессу. Попытка получить доступ к памяти вне вашей виртуальной памяти приводит к ошибке сегментации. Чтобы получить доступ к такой памяти, вы должны быть частью ядра.