"/boot/System.map-*" 및 "/proc/kallsyms"의 주소가 일치하지 않는 이유는 무엇입니까?

"/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/kallsymsKASLR에만 영향을 받기 때문인가요 ? 그렇다면 KASLR이 활성화되어 있는지 어떻게 확인할 수 있나요?

답변1

응, 바로 이거야KASLR로 인해 발생함. 모든 주소의 오프셋은 동일합니다. 커널은 이를 모르므 System.map로 업데이트하지 않습니다.

/proc/kallsymsKASLR이 런타임 시 사용자 공간에서 활성화되었는지, 비교 합계가 누락되었는지 , System.map또는 x86에서 패닉을 일으킬 수 있는지(패닉이 발생하면 커널이 오프셋을 덤프함) 감지할 수 있는 방법이 없습니다 .

관련 정보