top of page
  • 작성자 사진Paran Lee

[Practice] 64비트 RISC-V Linux Kernel 을 QEMU + GDB 를 활용하여 동적 분석하기

최종 수정일: 2021년 12월 19일


Linux Kernel 컴파일


우리가 열심히 동적 분석할 대상인 리눅스 커널을 컴파일하기 위해 아래 패키지를 설치해보도록 해요.

이제 컴파일할 리눅스 소스코드를 받아야겠죠!

우선 컴파일 타켓을 설정하구요.

해당 파일을 source 커맨드로 환경변수 설정을 하셔야 하구요.


디버깅 심볼을 좀 더 잘 확인하기 위해서, Makefile 에서 컴파일 옵션을 조금 바꿔보려고 해요.

리눅스 커널은 컴파일한 이미지의 코드 조차도 최적화해서 사용하기 때문에 아래의 한 줄 소스 수정도 필요해요.

컴파일이 문제 없이 잘되었으면, 아래 명령어로 .config 설정을 수정하고 다시 컴파일하면 좋을 것 같아요.

$ make menuconfig

설정 터미널이 나오면 아래의 설정을 on 시켜줄까요?

> Kernel hacking 
    > Compile-time checks and compier options 
        > Provide GDB scripts for kernel debugging

QEMU 컴파일


64비트 RISC-V 프로세서가 있는 보드를 대신해서 우리의 리눅스 커널을 실행시켜줄 QEMU 최신 릴리즈로 설치해볼께요.

(apt 패키지 매니저에 있는 버전은 조금 오래된 버전이에요)

위에서 저는 현 기준 최신 릴리즈인 v6.0.0 을 선택했어요. 우리가 필요한 64비트 RISC-V QEMU만 컴파일하기로 했어요.


Busybox 컴파일 및 설정


이제 파일시스템과 가상 부팅 바이오스, 그리고 기본적인 패키지를 설정해주는 Busybox 를 설정해줍니다.

rootFS 설정을 편하게 하기위해서, Build options for statically linked 'busybox' 을 켜놓을께요.

Setting
    > Build static binary (y)

이제 아래의 커맨드를 실행시켜줄까요?

$ CROSS_COMPILE=riscv64-linux-gnu- make -j $(nproc)

루트 파일시스템을 만들어줄께요,


QEMU 부팅


자 이제 GDB 로 디버깅해볼 QEMU에서 리눅스 커널을 부팅해볼까요?


GDB (gdb-multiarch) 를 사용한 동적 분석


리눅스 커널 코드를 컴파일한 디렉토리에서 아래의 커맨드를 실행해줄께요.

$ gdb-multiarch

(gdb) 터미널이 실행되면 아래의 이미지를 참고해서 동적 분석을 하면되요!

짜잔~ 이렇게 64비트 RISC-V의 동적 분석을 세팅하고 실행하는 부분까지 알아봤습니다.


디버깅을 중단하고, 부팅하면 터미널에 아래와 같이 나오는 걸 확인할 수 있어요.

터미널이 실행되고 아래의 명령어를 사용하면, 우리가 리눅스에서 자주 사용하는 명령어 패키지가 설치할 수 있어요!

# /bin/busybox --install -s

그리고 Ctrl + a + x 단축키를 실행하면 QEMU 에서 다시 터미널 프롬프트로 돌아올 수 있어요.


다음 시간에는 또 재미있는 RISC-V 관련 자료를 정리해보도록 할께요!

조회수 1,269회댓글 5개

관련 게시물

전체 보기

5 commentaires


연규 김
연규 김
23 févr.

너무 잘 봤습니다. 덕분에 riscv에서도 gdb를 활용한 디버깅을 할 수 있게 됐어요. 하지만, 사용하다 보니 CSR이 나오지 않는 것을 확인할 수 있었습니다. 이 경우는 어떻게 해결하셨는지 알고 싶습니다.

J'aime

Paran Lee
Paran Lee
23 avr. 2023

CONFIG_GDB_SCRIPTS 커널을 빌드하면 나오는 vmlinux-gdb.py 를 활용하면 확장된 GDB 기능을 사용할 수 있어서 좋습니다.

https://www.kernel.org/doc/html/latest/dev-tools/gdb-kernel-debugging.html

J'aime

Wonhyuk Yang
Wonhyuk Yang
01 juin 2021

재밌네요~ 마지막의 로그는 너무 긴데 동영상으로 보여주면 어떨까요?

J'aime
Paran Lee
Paran Lee
01 juin 2021
En réponse à

네 ㅋㅋ 감사합니다. 한번 터미널 내리면서 gif 로 만들어봐야겠네요~

J'aime
bottom of page