Kernel 공부하려고 4.11 커널을 사용하다가 별 이유없이 4.14 커널로 바꿨더니, gdb에서 symbol들의 주소를 제대로 못 찾는 문제가 생겼다.

컴파일 할 때 주소가 잘 못 밖혔나 싶어서 Hacking 쪽 옵션도 바꿔보면서 여러번 컴파일 해봐도 마찬가지였다.

구글링해도 잘 안나오고. 하다하다 결국 Kernel 문서, “gdb-kernel-debugging”를 보니까 KASLR을 끄라고 나와있었다.

git log를 보니 Default 4.11-rc1 부터 들어간거 보면 처음에 공부하던 4.11 커널에도 적용이 되 있었어야 하는데 컴파일 하려고 Fedora 22에서 가져다 쓴 .config에서는 꺼져있었나보다.

Author: Ingo Molnar <mingo@kernel.org>  2017-04-18 18:08:12
Committer: Ingo Molnar <mingo@kernel.org>  2017-04-18 18:48:13
Child:  d594aa0277e541bb997aef0bc0a55172d8138340 (x86/boot: Fix BSS corruption/overwrite bug in early x86 kernel startup)
Branches: 4.14, master, remotes/origin/master
Follows: v4.11-rc1
Precedes: v4.12-rc1

    x86: Enable KASLR by default
    
    KASLR is mature (and important) enough to be enabled by default on x86.

Kernel Address Space Layout Randomization

Kernel 이미지가 Physical Memory에 로딩되는 주소와 Virtual Address로 매핑되는 주소를 각각 Randomize를 해서 Kernel을 공격하는 해킹 기법으로 부터 보호하는 수단이라고 한다.

끄기

CONFIG_RANDOMIZE_BASE 설정을 아예 끄고 컴파일 하거나, kernel parameter에 nokaslr를 추가하면 된다.