Что происходит, если процесс вызывает код, принадлежащий другому процессу?

Что произойдет, если процесс вызовет для выполнения кода дальний указатель, принадлежащий другому процессу?

В 32-разрядном режиме работы GDT используется нетривиально, и сегментация может использоваться полностью.

Итак, что произойдет, если запрошенный указатель CS указывает на сегмент другого процесса?

Иногда это разрешено, я думаю.

Но, как правило, это не так.

В 64-битном режиме сегментация наполовину отключена.

Все сегменты идут от 0 до вершины линейного пространства процессора.

Кроме того, GDT, кажется, тривиально используется; Linux, например, выбрасывает весь пользовательский код из всех процессов в один сегмент.

То же самое для системного кода.

Таким образом, в 64-битном режиме вам даже не понадобится дальний указатель для вызова кода другого процесса.

Может быть, мой вопрос можно свести к следующему:

Что происходит, когда процесс пытается вызвать код другого процесса?

1 ответ

На какой ОС вы работаете?

В целом, ваша ОС запускает ваш процесс в защищенной памяти, то есть нет доступа к памяти, не принадлежащей вашему процессу. Попытка получить доступ к памяти вне вашей виртуальной памяти приводит к ошибке сегментации. Чтобы получить доступ к такой памяти, вы должны быть частью ядра.

Другие вопросы по тегам