소스코드에서 SysCall을 추출하려고 하는데 조금 헷갈립니다. 비슷한 소스를 찾았어요https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md그리고https://filippo.io/linux-syscall-table/시스템 호출은 C에서 호출되는 함수와 동일합니까? 아니면 시스템 호출 함수가 호출되고 실제 시스템 호출이 이루어지는 syscall(SYS_gettid)과 같은 시스템 호출입니까?
애플리케이션에서 사용하는 시스템 호출을 추출하려고 합니다.
답변1
대부분의 경우 프로그램의 소스 코드에서 명시적인 시스템 호출을 찾을 수 없습니다. 애플리케이션은 해당 언어의 런타임 라이브러리를 호출하여 작성되며 커널 호출을 담당하는 것은 바로 이 라이브러리입니다. 많은 언어 런타임 라이브러리는 C 라이브러리를 사용하여 이 책임을 차례로 위임합니다.
C 라이브러리 함수와 시스템 호출 사이에는 일대일 대응조차 없습니다. 일부 C 라이브러리 함수는 시스템 호출을 전혀 사용하지 않으며 다른 함수는 여러 개를 사용합니다. 한 스키마에서 다른 스키마로의 변경 사항도 매핑 -Linux에는 아키텍처별 시스템 호출이 많이 있습니다.— 사용되는 실제 시스템 호출은 실행 중인 커널과 C 라이브러리에 크게 의존합니다.예를 들어커널이 새로운 시스템 호출을 추가하고 이에 대한 지원이 C 라이브러리에 추가됩니다.
답변2
소스 코드 installwatch
와 일부 checkinstall
패키지를 다운로드하고 수정합니다 installwatch
.
installwatch
트릭 을 사용하여 LD_PRELOAD
모든 시스템 호출을 가로채십시오. 읽다 man ld.so
.