這更像是一個知識問題而不是實際的實現。我想知道是否有任何內核函數在系統啓動後可以擁有不同的虛擬地址。我對編譯可執行文件的理解是虛擬地址被分配給它的二進制文件,但是虛擬地址到物理地址是在運行時通過操作系統來完成的(分頁,我知道這些東西,所以不需要解釋) 但是在內核函數的情況下,每次重新啓動系統時,都會看到它們具有不同的虛擬地址。 1.內核函數如何映射到地址範圍? 2.它們可以在運行時映射到不同的虛擬地址。 (我想知道它是如何可能的)3. dll的地址映射如何?他們是在編譯時給虛擬地址還是在運行時分配了一個相對地址? (我認爲這是如何完成的。)4.是否有任何方法來查找是否有內核虛擬地址被固定到物理內存。內核函數可以有不同的虛擬地址
謝謝
Thanks.Can內核在運行時在不同的位置卸載和重新加載模塊。它試圖執行內核庫的相對映射,但是一旦加載,虛擬地址就會改變?(我猜NO是因爲其他模塊依賴於這些地址。但是如果這些地址保存在需要查詢的表中,那麼運行時加載/卸載可以工作。因此,內核可以在運行時保持虛擬地址的移動。然而,系統可能無法爲一些不能執行的關鍵內核例程在運行時卸載)你知道我們是否可以找出是否有任何虛擬地址固定在phy內存中? –
@ agent.smith,請打開一個不同的問題,而不是在評論中提出複雜的跟進。此外,你似乎有多個問題要問,請確保將這些問題作爲分離問題_,因爲有些人可能只知道某些問題的答案,但不是全部。 – bdonlan