Сегментация x86 в пользовательском режиме - PullRequest
2 голосов
/ 17 февраля 2011

Можно ли использовать сегментированную память в x86, когда у вас есть программа, работающая в пользовательском режиме?Если да, есть ли инструменты (например, компиляторы C / C ++), чтобы облегчить это?Кажется, это действительно мощный механизм, позволяющий запускать программы внутри программ.

Я слышал, что Chromium использует сегментацию для песочницы в Native Client, но я не уверен, как или использует ли онподдержка сборки или встроенного компилятора.

1 Ответ

2 голосов
/ 17 февраля 2011

Собственный клиент использует как поддержку компилятора (расширение asm, здесь форма gnu), так и сборку для работы с сегментными регистрами:

http://www.google.com/codesearch/p?hl=en#IAaH75l62fw/service_runtime/linux/sel_segments.c&l=71

uint16_t NaClGetEs(void)
{
  uint16_t seg1;
  asm("mov %%es, %0" : "=r" (seg1) : );
  return seg1;
}
void    NaClSetEs(uint16_t   seg1)
{
  asm("movw %0, %%es;" : : "r" (seg1));
}

Итак,это возможно, но довольно сложно для программирования.

Есть статья о Native Client: http://nativeclient.googlecode.com/svn/trunk/src/native_client/documentation/nacl_paper.pdf

NaCl выполняет дополнительную проверку кода (запрещает ненадежный код перепрограммировать регистры сегментов), номеняет сами сегменты.Это приводит к некоторым проблемам .... прочитайте раздел 3 статьи.

Другим пользователем сегментации является ОС OpenBSD с технологией W ^ X на i386 (ограничение сегмента CS) http://www.openbsd.org/papers/ven05-deraadt/mgp00010.html (вся презентация http://www.openbsd.org/papers/ven05-deraadt/index.html)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...