programing

시스템 호출 소스 코드는 어디에서 찾을 수 있습니까?

lastcode 2023. 8. 15. 11:08
반응형

시스템 호출 소스 코드는 어디에서 찾을 수 있습니까?

Linux에서 소스 트리가 있는 경우 모든 시스템 호출에 대한 소스 코드를 어디서 찾을 수 있습니까?또한 특정 시스템 호출에 대한 소스 코드와 어셈블리를 찾고 싶다면 터미널에 입력할 수 있는 것이 있습니까?my_system_call?

시스템 호출의 실제 소스를 보려면 Linux 커널 소스가 필요합니다.수동 페이지(로컬 시스템에 설치된 경우)는 통화의 문서만 포함하고 소스 자체는 포함하지 않습니다.

불행히도 시스템 호출은 전체 커널 트리의 특정 위치에 저장되지 않습니다.이는 다양한 시스템 호출이 시스템의 다른 부분(프로세스 관리, 파일 시스템 관리 등)을 참조할 수 있으므로 시스템의 특정 부분과 관련된 트리 부분과 별도로 저장할 수 없기 때문입니다.

당신이 할 수 있는 최선의 방법은 그것을 찾는 것입니다.SYSCALL_DEFINE[0-6]매크로. 주어진 코드 블록을 시스템 호출로 정의하는 데 사용됩니다.예를들면,fs/ioctl.c코드는 다음과 같습니다.

SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)
{
/* do freaky ioctl stuff */
}

그러한 정의는 다음을 의미합니다.ioctlsyscall이 선언되고 세 개의 인수를 사용합니다.옆에 있는 번호SYSCALL_DEFINE인수의 수를 의미합니다.예를 들어, 의 경우.getpid(void)로 선언된.kernel/timer.c코드는 다음과 같습니다.

SYSCALL_DEFINE0(getpid)
{
        return task_tgid_vnr(current);
}

그것이 일을 조금이나마 해결해주길 바랍니다.

응용 프로그램의 관점에서 시스템 호출은 커널에 의해 수행되는 기본적이고 원자적인 작업입니다.

어셈블리 사용법은 기계 명령의 측면에서 무슨 일이 일어나고 있는지 설명합니다.

물론, 커널은 syscall을 처리할 때 많은 일을 하고 있습니다.

실제로 전체 커널 코드가 모든 시스템 호출을 처리하는 데 사용된다는 것을 거의 믿을 수 있습니다(이것은 완전히 사실은 아니지만, 응용 프로그램의 관점에서 커널은 시스템 호출을 통해서만 볼 수 있습니다).Daniel Kamil Kozar의 또 다른 대답은 커널 함수가 어떤 시스템 호출의 처리를 시작하는지 설명하는 것입니다. (그러나 매우 자주 커널의 많은 다른 부분들은 간접적으로 시스템 호출에 참여합니다. 예를 들어 스케줄러는 간접적으로 구현에 참여합니다.fork성공적으로 만들어진 자식 프로세스를 관리하기 때문입니다.forksyscall)을 선택합니다.

_system_call()나도 그리고 이 티빗을 발견했습니다.

system_call 진입점에 대한 실제 코드는 /usr/src/linux/kernel/sys_call에서 찾을 수 있습니다.S 많은 시스템 호출에 대한 실제 코드는 /usr/src/linux/kernel/sys.c에서 찾을 수 있고, 나머지는 다른 곳에서 찾을 수 있습니다. find is your find is your friend.

제 생각에 이건 날짜가 된 것 같아요, 왜냐하면 저는 그 파일도 가지고 있지 않기 때문입니다.은 러나그 grep가발습니다었견되다니습었▁however를 발견했습니다.ENTRY(system_call)sys/arch/x86/sys/entry_64의 파일입니다.모래는 개별 시스템이 호출하는 것으로 보입니다.저는 지금 제 인텔-시너택스 x86 시스템을 사용하고 있지 않으므로, 이것이 당신이 원했던 것인지 확인해야 할 것입니다.

언급URL : https://stackoverflow.com/questions/10149621/where-can-i-find-system-call-source-code

반응형