qemu와 gdb를 사용하여 Linux 커널을 디버깅하려고 합니다. 문제는 gdb가 중단점에서 멈추지 않는다는 것입니다. kASLR이 gdb를 혼동하기 때문에 kASLR을 끄는 것이 도움이 될 수 있다는 것을 검색해 보았습니다.
-- 클라이언트 시스템에 커널을 설치합니다.
+- 게스트에 이 커널을 설치하고, 커널 명령줄에 "nokaslr"을 추가하여 KASLR을 끄세요.
안타깝게도 명령줄에 nokaslr을 추가하는 것이 무엇을 의미하는지, 어떻게 수행하는지 모르겠습니다. 어떤 아이디어라도 크게 감사하겠습니다.
답변1
qemu-system-x86_64 -append nokaslr
-kernel
디스크 이미지에서 부트로더를 사용하는 대신 QEMU 자체를 사용하여 커널을 로드하는 경우 이 접근 방식을 사용할 수 있습니다.Ubuntu ISO 설치 프로그램을 사용하는 것과 같습니다..
Linux nokasrl
명령줄 매개변수는 KASRL을 비활성화합니다.
이는 KASLR이 기본적으로 켜져 있는 v4.12부터 필요합니다.
여기 하나 있어요고도로 자동화된 Buildroot 예그걸 써.
답변2
커널 부팅 매개변수이는 부팅할 때마다 일시적으로 설정하거나 항상 일부 구성 파일을 통해 설정할 수 있습니다. 이 작업이 수행되는 방법은 부트로더에 따라 다르며 현재 Ubuntu 버전은 grub2입니다.
$ grep GRUB_CMDLINE_LINUX_DEFAULT /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
$ sudo perl -i -pe 'm/quiet/ and s//quiet nokaslr/' /etc/default/grub
$ grep quiet /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet nokaslr"
$ sudo update-grub
그런 다음 재부팅하고 매개변수가 예상대로 나타나는지 grub 메뉴에서 확인합니다.