Linux 커널 시스템 호출 서비스 루틴의 소스 코드는 어디에 있습니까?

QnA

syscall (높은 수준) 워크 플로에 대한 나의 이해는 다음과 같습니다.

  1. 사용자가 libc 래퍼를 호출합니다.
  2. 래퍼는 syscall 번호와 인수를 올바른 위치, 레지스터 또는 스택에 넣습니다.
  3. 래퍼는 syscall 또는 int 0x80 명령을 실행합니다.
  4. 커널 인터럽트 처리기가 sys_xxx () 서비스 루틴을 호출합니다.

이 경우 커널 소스에 sys_xxx () 함수가 많이 있어야합니다. 예를 들어, read()커널 2.6 코드에서 sys_read를 찾았습니다 . 그러나 커널 5.4 코드에서는 그러한 서비스 루틴 코드를 찾지 못했습니다. 내가 찾은 유일한 sys_read 는 libc 래퍼를 대체하는 드롭 인 것처럼 작동합니다. 그래서 헷갈리네요 ..

관련 질문-커널이 sys_xxx ()에 구현을 배치하는 이유는 커널 공간도 이러한 함수를 호출 할 수 있기 때문입니다. 맞습니까?

네이트 엘 드리지

커널은 실제로 sys_read당신이 말한 것처럼 작동 하는 함수를 정의합니다 . 토큰 연결을 사용하는 도우미 매크로를 통해 정의 되었기 때문에 검색으로 찾기가 약간 어렵습니다 . fs/read_write.c595 행 참조 :

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Linux 커널 2.6에는 몇 개의 시스템 호출이 있습니까?

Linux 커널의 make_request_fn 소스 코드는 어디에 있습니까?

ARM 시스템 호출을위한 인터페이스는 무엇이며 Linux 커널에서 어디에 정의되어 있습니까?

Linux에서 fork () 호출의 소스는 어디에 있습니까?

특정 Linux 시스템 라이브러리의 소스 코드는 어디에서 찾을 수 있습니까?

빌드에서 커널 소스는 어디에 있습니까?

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

Linux 커널 모듈에서 Linux 시스템 호출을 사용하는 방법

Linux 커널에서 Switch Pro 블루투스 조이스틱 처리를위한 코드는 어디에 있습니까?

명령 'ls'커널 소스 코드는 어디에 있습니까?

Linux 커널 4.x에서 내 시스템 호출을 구현하는 방법은 무엇입니까?

Linux 커널 4.x에서 시스템 호출을 추가하는 방법

시스템 호출이 커널에 추가되었는지 어떻게 알 수 있습니까?

Linux 커널 파일에서 시스템 호출 사용

커널 공간에서 시스템 콜을 호출 할 수 있습니까?

Linux 커널 소스에서 정의된 TTL(Time-To-Live) 값은 어디에 있습니까?

Linux 용 man 명령의 최신 소스 코드는 어디에 있습니까?

Perl 소스 코드에서 정렬 루틴의 구현을 어디에서 찾을 수 있습니까?

debian armhf BeagleBone Black 빌드에서 커널 패키지의 소스는 어디에서 찾을 수 있습니까?

x86_64 Linux에서 ioctl 시스템 호출 용 사용자 공간 랩퍼는 어디에 정의되어 있습니까?

서스펜션 함수는 vertx의 코루틴 바디 내에서만 호출할 수 있습니다.

도커 컨테이너의 소스 코드는 어디에 있습니까?

64 비트 시스템에서 32 비트 커널 특정 시스템 호출을 테스트하는 방법은 무엇입니까?

Linux 소스의 과거 소스 코드는 어디에서 찾을 수 있습니까?

Linux 커널 소스에서 다른 키보드 스캔 코드 목록을 어디에서 찾을 수 있습니까?

Linux의 Kotlin / Native에서 범위가 지정된 코 루틴이있는 클래스 메서드를 호출하면 예외가 발생합니다.

ftrace는 Linux 커널에 대한 시스템 호출 인수의 캡처를 허용합니까, 아니면 함수 이름 만 허용합니까?

커널 실행에서 지원되는 시스템 호출

HP Loadrunner "시스템"호출의 출력은 어디에 있습니까?

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관