#pramga alloc_text(PAGE, foo)
void foo(){ return; }
此代碼通常用於設備驅動程序。
foo函數將在系統需要時進行交換。#pragma alloc_text(PAGE,functionname)
問題。
- 它在用戶空間代碼中工作嗎?該功能是否也被分頁?
- 沒有編譯指示,我的意思是默認情況下,所有內核級別的函數都分配了非分頁內存?
- PE文件加載器是否決定函數的分配位置?
#pramga alloc_text(PAGE, foo)
void foo(){ return; }
此代碼通常用於設備驅動程序。
foo函數將在系統需要時進行交換。#pragma alloc_text(PAGE,functionname)
問題。
默認情況下交換用戶模式程序。你會需要別的東西是不尋常的。聽起來像一個設備驅動程序要求駐留以處理中斷或此類事情。用戶模式程序不這樣做。
如果您編譯了一個簡單的hello world驅動程序,那麼您將看到名爲'.text'的PE(可移植可執行文件)部分將設置'Not pageable'特徵標誌。所以是的,默認情況下,所有驅動程序代碼都在該部分,除非您將其標記爲可分頁,這將使其最終在「PAGE」部分而不是「.text」部分。
那麼,我們如何做用戶模式代碼(文本)不能交換?可能嗎? – Benjamin 2011-02-27 09:00:13
我不知道,從來沒有嘗試過。無論如何,對於一個應用程序來說,爲自己抓取物理內存是非常不禮貌的,而對其他人來說則更少。非分頁的內存實際上是用於中斷處理程序等的,你不能在你已有的頁面上處理頁面錯誤中斷。 – 2011-02-27 09:22:09
你是對的。這只是虛假的。用戶模式數據可以用VirtualLock鎖定。它永遠不會出去。我想我們也可以製作沒有交換的用戶模式功能(TEXT)。 – Benjamin 2011-02-27 10:43:51