애플리케이션에서 사용되는 시스템 호출 나열

애플리케이션에서 사용되는 시스템 호출 나열

목록을 얻을 수 있는 방법이 있나요?모두애플리케이션에서 가능한 모든 시나리오를 실행하지 않고 애플리케이션에서 시스템 호출을 사용합니까?

답변1

이론적으로 애플리케이션이 특정 제약 조건을 준수한다면 그렇습니다. 일반적으로 말하면 그렇지 않습니다.

시스템 호출을 호출하는 가장 일반적인 방법은 표준 라이브러리 래퍼를 사용하는 것입니다. 예를 들어, read(fd,buf,BUFLEN)어셈블리로 컴파일되고 call readamd64 개체 코드에서 컴파일됩니다 e8 00 00 00 00(여기서 기호 테이블 항목은 0을 덮어씁니다 read). 표준 라이브러리에서 사용되는 모든 시스템 호출의 테이블을 작성하고, 대상 코드를 읽어 표준 라이브러리에 대한 호출을 찾고, 이를 사용하여 가능한 시스템 호출을 찾습니다.

그러나 프로그램을 syscall직접 사용할 수도 있습니다. 첫 번째 매개변수는 시스템 호출 번호입니다. 파일, 명령줄 인수, 표준 입력, 네트워크 소켓에서 숫자를 읽거나 일부 긴 계산을 수행할 수 있습니다(소수 인수분해 시도, 특정 SHA2 해시를 생성하는 입력을 순차적으로 검색, 범용 Turing 머신 실행). 기계가 멈출 때까지)를 생성합니다.

프로그램은 또한 dlopen/를 사용 dlsym하여 표준 라이브러리 함수를 호출할 수 있으며, 파일, 명령줄 인수, 표준 입력, 네트워크 소켓 또는 일부 긴 계산 후에 호출할 이름을 얻을 수 있습니다. 실제로 찾고 있는 표준 라이브러리 함수는 그 syscall자체일 수도 있습니다.

따라서 일부 프로그램의 경우 대답은 "무엇이든 호출할 수 있습니다"입니다.

관련 정보