在對這個答案 - can i implement counter in the .text area without using registers?收到負面評論之後,我進行了一些調查,試圖瞭解RWX記憶頁面是否真的非常用並且很少見,或者每個流行的程序都有一些。 (Science!)RWX記憶頁面的風險
我連接到MSVS通過WinDBG中,執行!address /f:Image,PAGE_EXECUTE_READWRITE
,
,我看到像這樣的很多線路:
7a534000 7a537000 3000 MEM_IMAGE MEM_COMMIT PAGE_EXECUTE_READWRITE Image "C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System\6836a951700c2eb01a933212425cda4e\System.ni.dll"
我檢查它的部分,並有.xdata
節以「執行讀寫「旗幟。
這是否意味着每個加載了.NET庫的應用程序都有RWX內存頁?
您的瀏覽器,例如(如果您運行Windows)。(幸運的是,既不FF8,也不IE8不使用.NET)
那麼,爲什麼我們打擾RWX內存呢?
這就是即時編譯器的本質,生成代碼並立即執行它。如果代碼是可預測的,則NX很重要。 –
@HansPassant,但將它保留在已知RVA的RWX部分中是不安全的(幾乎所有進程都可能具有相同的虛擬地址)。 – Abyx