當用戶模式下運行程序時,x86中是否可以使用分段內存?如果是這樣,是否有任何工具(例如C/C++編譯器)來實現這一點?它似乎是一個非常強大的機制,允許程序內運行程序。用戶模式下的x86分段
我聽說Chromium在Native Client中使用分段來實現沙箱化,但我不確定它是如何實現的,或者它是否使用匯編或內置編譯器支持。
當用戶模式下運行程序時,x86中是否可以使用分段內存?如果是這樣,是否有任何工具(例如C/C++編譯器)來實現這一點?它似乎是一個非常強大的機制,允許程序內運行程序。用戶模式下的x86分段
我聽說Chromium在Native Client中使用分段來實現沙箱化,但我不確定它是如何實現的,或者它是否使用匯編或內置編譯器支持。
本機客戶端同時使用編譯器的支持和組件(該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));
}
所以,這是可能的,但比較硬編程。
有一個關於本機客戶端紙:http://nativeclient.googlecode.com/svn/trunk/src/native_client/documentation/nacl_paper.pdf
氯化鈉確實額外的代碼驗證(它不允許不可信代碼重新編程段寄存器),但改變了段本身。這會導致一些問題,......請閱讀論文的第3部分。
分割的另一個用戶是OpenBSD的OS爲W^X技術在i386(CS段限制性的) http://www.openbsd.org/papers/ven05-deraadt/mgp00010.html(整個演示是http://www.openbsd.org/papers/ven05-deraadt/index.html)