728x90
시스템콜 번호 확인하기
나는 ptrace로 프로세스가 호출하는 System Call을 관찰하고 싶다.
만약 프로세스A가 내부적으로 시스템콜을 호출한다면,
system call 과정
- User mode에서 Kernel mode로 진입.
- 커널상에 있는 시스템 호출 핸들러가, 시스템 호출 테이블 참조해서 어떤 시스템 콜인지 알아냄.
- 해당 시스템콜에 대한 커널 함수 실행.
- 유저 모드로 복귀
이런 과정으로 시스템 콜이 일어난다.
나는 메모리 할당, 해제에 관한 시스템콜인 brk()
, mmap()
, munmap()
같은 시스템콜을 추적하면 된다.
현재 사용하고 있는 리눅스 버전은 6.8버전이고 시스템콜 테이블은 리눅스 깃헙에서 확인할 수 있다.
리눅스 x86버전
커널코드의 arch/x86/entry/syscalls/syscall_64.tlb
파일에 있음
https://github.com/torvalds/linux/blob/v6.8/arch/x86/entry/syscalls/syscall_64.tbl
brk(): 12번
mmap(): 9번
munmap(): 11번
리눅스 arm64버전
https://github.com/torvalds/linux/blob/v6.8/include/uapi/asm-generic/unistd.h
brk(): 214
mmap(): 222
munmap(): 215
귀찮게도, arm64 리눅스와 x86리눅스의 시스템콜 테이블의 구성와 위치는 서로 다르다..
일단 나는 arm64 리눅스에서 구동하므로 arm64리눅스 버전으로만 작성하겠다.
그러면 이제 시스템 콜 넘버를 알았으니 외부 프로세스에서 생긴 시스템콜을 모두 추적하면서
214번, 222번, 215번의 시스템콜을 필터링해주면 된다.
728x90
'C프로그래밍 > MemoryTracker' 카테고리의 다른 글
RealtimeMemTracker - 4, ARM64 Linux에서 PTRACE_SYSCALL을 사용한 시스템 콜 트레이싱 (0) | 2025.03.25 |
---|---|
RealtimeMemTracker - 2, 현재 실행중인 프로세스 확인 (0) | 2025.03.23 |
RealtimeMemTracker - 1, 다른 프로세스의 SystemCall 추적하기 (0) | 2025.03.20 |