이전 포스트에서 커널에 새로 시스템콜을 추가함
시스템콜을 GDB를 사용해 추적하기
QEMU 디버그 모드로 실행
- QEMU 실행 시, -s -S 옵션
- -s : gdb가 붙을 수 있도록 1234포트 개방
- -S : QEMU가 시작하자마자 멈추는 상태로
- ARCH=arm64 make menuconfig 실행 후,
- Kernel hacking -> Kernel debugging 선택
- Kernel hacking -> Compile-time checks and compiler options -> Rely on the toolchain's implicit default DWARF version 선택
- 커널 재 컴파일
new_syscall함수에 break point

커널에 gdb를 붙이고, qemu포트 1234로 접속한 뒤
new_syscall 함수에 브레이크 포인트를 걸었다.
과정

cont입력
브레이크 포인트까지 실행,
SYSCALL_DEFINE1 매크로에서 멈춘다. (이전에 작성했던 시스템콜)

next입력
내부적으로 syscall_set_return_value가 실행
시스템콜의 리턴값 설정하며, 여기서의 ret이 최종적으로 사용자 공간에 전달될 리턴값
'Linux' 카테고리의 다른 글
| 커널 모듈 (insmod, lsmod, rmmod) 커널 API (5) | 2025.07.30 |
|---|---|
| ls 명령어 분석 with strace (1) | 2025.07.29 |
| 커널 시스템콜 추가 (3) | 2025.07.25 |
| Makefile (2) | 2025.07.24 |
| OS 기초 이론 (0) | 2025.07.23 |