Debian

為什麼 /boot/System.map-*/proc/kallsyms 中的地址不匹配?

  • May 4, 2021

考慮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/kallsymsand System.map,或者可能導致 x86 上的恐慌(核心在恐慌時轉儲其偏移量)。

引用自:https://unix.stackexchange.com/questions/648029