syscall (높은 수준) 워크 플로에 대한 나의 이해는 다음과 같습니다.
이 경우 커널 소스에 sys_xxx () 함수가 많이 있어야합니다. 예를 들어, read()
커널 2.6 코드에서 sys_read를 찾았습니다 . 그러나 커널 5.4 코드에서는 그러한 서비스 루틴 코드를 찾지 못했습니다. 내가 찾은 유일한 sys_read 는 libc 래퍼를 대체하는 드롭 인 것처럼 작동합니다. 그래서 헷갈리네요 ..
관련 질문-커널이 sys_xxx ()에 구현을 배치하는 이유는 커널 공간도 이러한 함수를 호출 할 수 있기 때문입니다. 맞습니까?
커널은 실제로 sys_read
당신이 말한 것처럼 작동 하는 함수를 정의합니다 . 토큰 연결을 사용하는 도우미 매크로를 통해 정의 되었기 때문에 검색으로 찾기가 약간 어렵습니다 . fs/read_write.c
595 행 참조 :
SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)
{
return ksys_read(fd, buf, count);
}
다음과 같은 효과가 있습니다.
라는 함수를 선언 sys_read
, 별명 에__se_sys_read
정의 __se_sys_read
, 32 비트 인수를 부호 확장 한 다음 호출합니다.__do_sys_read
__do_sys_read
누구의 몸이 보이는지 정의 (즉 ksys_read
, 실제 작업을하는 호출 ).
206 행 에서 SYSCALL_DEFINEx
매크로 정의를 볼 수 있습니다 .include/linux/syscalls.h
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다