正如我們所知道的,使虛擬內存的堆棧和堆區不可執行可以阻止內存中執行惡意代碼(如shellcode)(該技術被稱爲Data Execution Prevention) 。而且,將惡意代碼注入內存的最簡單方法是通過溢出緩衝區。因此,使這些內存區域不可執行可以幫助減少溢出攻擊的嚴重性。需要可執行堆棧和堆內存
但是,還有許多其他技術,如地址空間隨機化,指針保護,使用金絲雀等,這些技術用於防止這種攻擊。我認爲大部分系統使用這些其他方法而不是使堆棧/堆內存不可執行(請糾正我,如果我在這裏錯了)
現在,我的問題是,是否有一些特定的操作或內存堆棧/堆部分需要執行的特殊情況?
如果堆可執行,則JIT很容易實現。不過,不知道一般情況如何。 – 2013-09-25 05:34:26
[GCC的嵌套函數]的蹦牀代碼(http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html)需要一個可執行堆棧AFAIK。 – tangrs