#5 리눅스 qemu&gdb 셋팅
qemu
리눅스에서 사용하는 에뮬레이터이며, KVM(1)을 추가하여 가상 머신으로 사용할 수 있다.
qemu-kvm 에서 Hypervisor를 지원한다.
qemu의 다양한 옵션들을 이용해 script를 작성해서 커널을 부팅할 수 있다.
(1) :KVM(Kernel-based Virtual Machine: 커널 기반 가상 머신)은 Linux®에 구축되는 오픈소스 가상화 기술이다.
구체적으로 말해서, KVM을 사용하면 Linux를 하이퍼바이저로 전환하여 호스트 머신에서 게스트 또는 VM(가상 머신) 등 격리된 가상 환경 여러 개가 실행되도록 할 수 있습니다.
1. 리눅스의경우 기본적으로 qemu가 설치되어있으며, qemu-kvm 을 apt-get install qemu-kvm 명령어를 통해 설치 해주자.
2. 일반적으로 사용되는 qemu스크립트는 아래와 같다. vi boot.sh 를통해 스크립트를 작성 후, chmod +x boot.sh명령어를 통해 권한을 획득후, 중요 옵션들을 살펴보자.
-m512M : 주 메모리 512mb 할당
-kernel./bzImage : bzImage를 커널 이미지로 사용
-initrd ./rootfs.cpio : rootfs.cpio를 파일 시스템으로 사용
-append"nokaslr" : KASLR 보호기법 미적용
-cpu smep : SMEP 보호기법 적용
-s : gdb attach를 위한 1234번 포트를 open
gdb
- GNU 시스템에서 사용되는 기본 디버거
- gdb의 remote debugging 기능을 통해 리눅스 커널을 디버깅 할 수 있다.
- 편의를 위해 gdb script를 작성해서 사용하도록 한다.
아래와 같이 스크립트를 작성해주자.
qemu script에서 -s 옵션을 통해 1234번 포트를 열어놨기 때문에, 1234번 포트를 이용해서 qemu를 디버깅 할 수 있다.
target remote localhost:1234 gdb 명령을 통해 attach 가능
직접 gdb를 해보면
한쪽 터미널에서 ./boot.sh 를 실행 시켜준뒤에, 다른 쪽 터미널에서 ./gdb_remote.sh 를 실행 시켜준다.
그 뒤에 반응이 없으면 ctrl + c 를 눌러주어서 gdb 를 실행 시켜주면된다!