Debian為什麼
為什麼 /boot/System.map-*
和 /proc/kallsyms
中的地址不匹配?
考慮Ubuntu 20.10 (Groovy Gorilla)
/boot/System.map-5.8.0-50-generic
的輸出:/proc/kallsyms
$ sudo cat /boot/System.map-5.8.0-50-generic | grep sys_call_table ffffffff820002e0 D sys_call_table ffffffff82001360 D ia32_sys_call_table ffffffff82002120 D x32_sys_call_table $ sudo cat /proc/kallsyms | grep sys_call_table ffffffff978002e0 D sys_call_table ffffffff97801360 D ia32_sys_call_table ffffffff97802120 D x32_sys_call_table
AFAIK,這些文件應該包含核心符號的目前載入地址,那麼為什麼它們不匹配呢?
是因為只
/proc/kallsyms
受KASLR影響嗎?如果是這樣,我如何驗證是否啟用了 KASLR?
是的,這是由 KASLR 引起的。請注意,所有地址的偏移量相同。核心不知道,
System.map
所以它不會更新它。我不知道有任何方法可以檢測是否在執行時從使用者空間啟用了 KASLR,缺少比較
/proc/kallsyms
andSystem.map
,或者可能導致 x86 上的恐慌(核心在恐慌時轉儲其偏移量)。