시스템 호출과 raw_syscalls 이벤트의 차이점은 무엇입니까?

시스템 호출과 raw_syscalls 이벤트의 차이점은 무엇입니까?

AFAIK 다양한 Linux 추적 도구는 다양한 이벤트를 기록하는 /sys/kernel/debug/tracing/events 디렉터리에서 정보를 수집합니다. "syscalls" 이벤트와 "raw_syscalls" 이벤트의 차이점을 설명할 수 있는 사람이 있나요?

현재 시스템에서 호출되는 모든 시스템 호출을 기록하고 싶다면 추적할 이벤트를 파악하기 위해 이 차이점을 알고 싶습니다. strace 및 perf 추적과 같은 도구가 있다는 것을 알고 있지만 나만의 도구를 만들고 싶습니다.

답변1

syscalls그룹에는 각 특정 시스템 호출에 대한 별도의 이벤트가 있으며 해당 시스템 호출을 기반으로 매개변수를 추적합니다.

sys_enter발생하는 모든 시스템 호출에 대한 이벤트 sys_exit추적을 수행 raw_syscalls/하지만 이름이 아닌 시스템 호출 번호와 매개변수 값만 표시할 수 있습니다.

strace유사한 도구를 구현하는 데 어느 것이 더 적합한 지에 대해서는 syscalls시스템 호출에 대한 기본 정보(예: 시스템 호출 이름, 매개변수 이름 및 원래 매개변수 값)를 쉽게 표시할 수 있습니다.

straceptrace하지만 이 정보는 프로그램에 첨부된 도구를 통해 얻을 수 있는 정보에 비해 매우 희박하다는 점에 유의하세요 . syscalls이는 커널이 이벤트 중에 시스템 호출에 전달된 포인터를 역참조하지 않는 반면, with는 프로그램의 메모리에 대한 전체 액세스 권한을 ptrace가지며 원하는 대로 인수를 역참조할 수 있기 때문입니다 .strace

관련 정보