2011-01-10 15 views

回答

8

內核從進程的虛擬地址空間中的固定位置開始。 Linux內核通常[取決於您的系統架構]位於4GB虛擬地址空間的前1 GB中。因此,具有3G/1G拆分的系統架構的內核從地址0xC0000000開始。根據平臺的內存映射,這將映射到物理內存中的物理地址。

system.map文件是內核符號表。它具有列出的符號及其虛擬地址。要找出這些符號在主存儲器中的加載位置,從符號地址中減去PAGE_OFFSET [對於3G/1G系統,這是0xC00000000]以獲得偏移量,並將該偏移量添加到物理內存中內核的起始物理地址上由系統內存映射確定。

4

這是內核虛擬地址。這就是內存中符號的地址,從內核運行時啓用地址轉換的角度來看,即。 而不是在實模式中。

在大多數平臺上,有一個簡單的公式可將這些地址轉換爲實際地址,即。 RAM中的實際地址,但這可能不一定是這種情況。