2010-01-30 71 views

回答

4

它標記在虛擬內存系統和TLB(CPU用於解析虛擬內存映射的結構)中不可執行的內存頁。如果有任何程序代碼將從這個頁面執行,則CPU將發生故障並將控制權交給操作系統進行錯誤處理。

程序通常將它們的二進制代碼和靜態數據存儲在只讀存儲器部分,如果他們試圖在那裏寫入,CPU會出錯,然後操作系統通常會殺死應用程序(這被稱爲分段故障或訪問衝突)。

出於安全原因,程序的讀/寫數據存儲器通常默認採用NX保護。這可以防止攻擊者將某些應用程序的惡意代碼作爲數據提供給應用程序,從而使應用程序將其寫入其數據區域,然後以某種方式執行代碼,通常是由於應用程序中存在緩衝區溢出/下溢漏洞,覆蓋函數的返回地址與惡意代碼在數據區域中的位置堆疊在一起。

在運行時編譯代碼時,一些合法的應用程序(尤其是高性能模擬器和JIT編譯器)也需要執行它們的數據,但它們專門爲內存分配沒有設置NX標誌的內存。

+0

爲什麼你需要它?你能做一個簡單的代碼來展示它的行動嗎? – 2010-01-30 16:44:29

+0

添加更多信息。編寫示例代碼很困難,因爲它非常依賴於平臺。 – Tronic 2010-01-30 17:16:24

+0

@Tronic你能解釋這與有效無效位有什麼不同嗎?當你已經有一個有效的無效位時,爲什麼NX位不是多餘的? – Somjit 2016-03-26 15:18:08

2

Wikipedia

NX位,它代表不 EXECUTE,是在CPU的 使用的處理器 指令(或代碼)任一存儲到分離的存儲器中,用於 領域技術或用於存儲數據的 ,通常在哈佛架構處理器中只能找到 的功能。 但是,NX位正在被 越來越多的使用在傳統的von 的Neumann架構處理器上,因爲 的安全原因。

NX支持 的操作系統可能會將某些區域的內存標記爲不可執行。 處理器將拒絕執行 駐留在這些區域的任何代碼。一般的技術,可執行空間保護知 ,被 用來防止某些類型的 惡意軟件通過將他們的代碼到 另一個程序的數據存儲區 和 本節中運行他們自己的代碼接管 電腦;這被稱爲 緩衝區溢出攻擊。

+0

這不是Windows使用DEP標誌所使用的功能,具體取決於處理器的類型? – t0mm13b 2010-01-30 16:38:41

+0

我想要一個更具技術性的答案,希望可以通過一些實際的NX位實例來實現。我並不需要它,我只是要求增加一些關於SO的知識(對我來說也是如此,雖然我知道它是什麼) – 2010-01-30 16:39:06

0

看看這個'DEP'發現在維基百科使用NX位。作爲提供技術答案,對不起,我不知道有足夠的瞭解這一點,但報價:

數據執行保護(DEP)是包含在旨在防止現代 Microsoft Windows操作系統的安全功能 應用程序或服務執行來自不可執行內存區域的代碼。 ....

DEP是在Windows XP Service Pack 2引入,幷包含在Windows XP 平板電腦2005年版,Windows Server 2003 Service Pack 1和更高版本,Windows Vista和Windows Server 2008和Windows的所有新版本。 ...

硬件實施DEP能夠在兼容的CPU NX位,通過32位Windows的 自動使用PAE內核和64位內核 的原生支持。 Windows Vista DEP通過將內存的某些部分標記爲僅支持數據,其中啓用NX或XD位的處理器然後理解爲 不可執行。 這有助於防止成功緩衝區溢出攻擊。在Windows Vista中, 可以在Windows任務 管理器的「進程」選項卡上查看某個進程的DEP狀態,即DEP是啓用還是禁用特定進程。

另請參閱MSDN關於DEP的知識庫中的here。關於如何工作,有一個非常詳細的解釋here

希望這會有所幫助, 最好的問候, 湯姆。