ان‌اکس بیت

**ان‌اکس بیت (به [[زبان انگلیسی|انگلیسی]]: <bdi>NX bit</bdi>)** (**n**o-e**x**ecute) یک فناوری است که در واحد پردازش مرکزی (CPU) برای مجزاسازی مناطق حافظه برای ذخیره سازی دستورالعمل های پردازنده (کد) یا برای ذخیره سازی داده ها استفاده می شود، ویژگی که معمولاً فقط در پردازنده های معماری هاروارد یافت می شود. با این حال، ان‌اکس بیت به دلایل امنیتی به شکل فزاینده ای در پردازنده های معماری von Neumann مرسوم استفاده می شود. 

یک سیستم عامل با پشتیبانی از ان‌اکس بیت ممکن است قسمت های خاصی از حافظه را به عنوان غیر قابل اجرا نشان گذاری کند. سپس پردازنده از اجرای هر کدی که در این قسمت های حافظه وجود دارد خودداری می کند. تکنیک کلی استفاده شده، که به عنوان حفاظت از فضای اجرایی شناخته می‌شود، همچنین Write XOR Execute نیز نامیده می‌شود، که برای جلوگیری از غلبه انواع خاصی از نرم‌افزارهای مخرب به روش وارد کردن کد آن‌ها در فضای ذخیره‌سازی اطلاعات برنامه های دیگر و اجرای کد خود از داخل این بخش مورد استفاده قرار میگیرد. یک دسته از چنین حملاتی به عنوان حمله buffer overflow(سرریز بافر) شناخته می شود.

شرکت اینتل این ویژگی را به عنوان **اکس‌دی بیت** (به انگلیسی: XD bit) (**e**xecute **d**isable) به بازار عرضه می کند. شرکت Advanced Micro Devices (AMD) از اصطلاح بازاریابی **NX bit** استفاده می کند . معماری ARM به ویژگی ای اشاره دارد که در ARMv6 به عنوان **XN** (اجرا هرگز) معرفی شده است، .  خود اصطلاح *NX bit* گاهی اوقات برای توصیف فناوری های مشابه در سایر پردازنده ها استفاده می شود.

## پشتیبانی معماری

### x86
پردازنده‌های x86 ، از 80286 ، دارای قابلیت مشابهی هستند که در سطح بخش(segment) پیاده‌سازی شده‌اند. با این حال، تقریباً تمام سیستم عامل‌های 80386 و پردازنده‌های x86 نسل های بعدی ، مدل حافظه تخت را پیاده‌سازی می‌کنند، بنابراین نمی‌توانند از این قابلیت استفاده کنند. هیچ پرچم «قابل اجرا» در ورودی جدول برنامه (صفحه جدول توصیف) آن پردازنده ها وجود نداشت، تا زمانی که برای در دسترس قرار دادن این قابلیت برای سیستم عامل های که از مدل flat memory استفاده میکنند، AMD یک بیت «no-execute» یا NX را به ورودی جدول برنامه در معماری AMD64 خود اضافه کرد،تا مکانیزمی را ارائه دهد که می تواند اجرا را در هر صفحه به جای کل بخش (segment) کنترل کند.

اینتل در سال 2001 ویژگی مشابهی را در پردازنده Itanium ( *Merced* ) خود با معماری IA-64 اضافه کرد، اما آن را به خانواده‌های پردازنده‌های محبوب‌تر x86 ( Pentium ، Celeron ، Xeon و غیره) ارائه نکرد. ان‌اکس بیت برای اولین بار در معماری x86  توسط AMD برای استفاده در خط پردازنده های AMD64 ، مانند Athlon 64 و Opteron ، پیاده سازی شد. 

پس از تصمیم AMD برای گنجاندن این قابلیت در مجموعه دستورالعمل های AMD64، اینتل ویژگی مشابه XD بیت را در پردازنده های x86 با پردازنده های Pentium 4 بر اساس نسخه های بعدی هسته Prescott اجرا کرد.  ان‌اکس بیت به طور خاص به بیت شماره 63 (مهم ترین بیت) از یک ورودی 64 بیتی در جدول صفحه اشاره دارد . اگر این بیت 0 باشد، کد را می توان از آن صفحه اجرا کرد. اگر 1 باشد، کد را نمی توان از آن صفحه اجرا کرد و هر چیزی که در آنجا ساکن است به عنوان داده فرض می شود. این تنها در حالت طولانی (حالت 64 بیتی) یا تعمیم سبک قدیمی آدرس حقیقی (legacy Physical Address Extension) برای ساختار جدول صفحه موجود است، اما در معماری x86 اصلی 32 بیتی با ساختار جدول صفحه وجود ندارد ،زیرا بیت 63ام ورودی های جدول صفحه در این ساختار برای فعال و غیر فعال کردن اجرا مورد استفاده قرار میگیرد

Windows XP SP2 و نسخه های بعدی از حفاظت از فضای آدرس اجرایی (به انگلیسی:Data Execution Prevention ) پشتیبانی می کند.

### ARM
در ARMv6 یک ساختار ورودی جدول صفحه جدید معرفی شد; این شامل یک بیت "execute never" هست. برای ARMv8-Aو بلوک VMSAv8-64 و توصیفگر صفحه VMSAv8-64 و بلوک توصیفگر طولانی VMSAv8-32 و  توصیفگر صفحه VMSAv8-32 برای بیت تفسیر مرحله یک "execute never" برای هر دو حالت ممتاز و غیر ممتاز را دارند.ولی بلوک و توصیفگرهای صفحه برای یک بیت تفسیر مرحله دو "execute never" دارند (دو بیت به دلیل قابلیت ARMv8.2-TTS2UXN); توصیف‌کننده‌های جدول ترجمه توصیفگر کوتاه VMSAv8-32، در سطح ۱ دارای بیت‌های "اجرا هرگز" برای هر دو حالت ممتاز و غیر ممتاز هستند و در سطح ۲ دارای یک بیت "اجرا هرگز" تکی هستند.

### آلفا
از نسخه چهارم کتابچه راهنمای معماری آلفا، DEC (HP کنونی) Alpha دارای بیت خطای اجرا در ورودی های جدول صفحه با OpenVMS ، Tru64 UNIX ، و (Alpha Linux PALcode) است. 

### SPARC
SPARC Reference MMU برای Sun SPARC نسخه 8 دارای مجوز فقط خواندن، خواندن/نوشتن، خواندن/اجرا، و خواندن/نوشتن/اجرا در ورودی‌های جدول صفحه است،  اگرچه همه پردازنده‌های SPARC دارای MMU مرجع SPARC نیستند.

SPARC نسخه 9 MMU ممکن است ترکیبی از مجوزهای خواندن/نوشتن/اجرا ارائه کند، ولی لزوست.  یک ورودی جدول ترجمه در بافر ذخیره‌سازی ترجمه در (Oracle SPARC Architecture 2011, Draft D1.0.0) دارای بیت‌های اجرایی و قابل نوشتن جداگانه است. 

### PowerPC/Power ISA
ورودی های جدول صفحه برای جدول صفحه هش شده IBM PowerPC دارای یک بیت منع اجرای صفحه هستند.  ورودی‌های جدول صفحه برای جدول صفحه درخت مبنا در Power ISA دارای بیت‌های مجوز جداگانه هستند که دسترسی خواندن/نوشتن و اجرا را می‌دهند. 

### PA-RISC
ورودی‌های بافر نگاهدار ترجمه (TLB) و ورودی‌های جدول صفحه در PA-RISC 1.1 و PA-RISC 2.0 از صفحات فقط خواندن، خواندن/نوشتن، خواندن/اجرا و خواندن/نوشتن/اجرا پشتیبانی می‌کنند.  

### ایتانیوم
ورودی‌های TLB در Itanium از صفحات فقط خواندن، خواندن/نوشتن، خواندن/اجرا و خواندن/نوشتن/اجرا پشتیبانی می‌کنند. 

### z/Architecture
از نسخه دوازدهم  اصول عملیات z/Architecture، پردازنده‌های z/Architecture ممکن است از تسهیلات حفاظت از دستور عمل های اجرایی پشتیبانی کنند، که یک بیت را در ورودی‌های جدول صفحه اضافه می‌کند که کنترل می‌کند آیا دستورالعمل‌ها از یک منطقه، بخش یا صفحه می‌توانند قابل اجرا باشند. اجرا شود. 

## بیشتر ببینید

* حفاظت فضایی قابل اجرا

## منابع

## لینک های خارجی

* AMD, Intel put antivirus tech into chips
* Microsoft Interviewed on Trustworthy Computing and NX
* LKML NX Announcement
* ''Changes to Functionality in Microsoft Windows XP Service Pack 2'' Part 3:  Memory Protection Technologies
* Microsoft Security Developer Center: Windows XP SP 2: Execution Protection

رده:معماری اکس۸۶
رده:امنیت سیستم‌عامل
رده:واحد پردازشگر مرکزی