UNIX 시스템은 어떻게 애플리케이션을 호출합니까?

UNIX 시스템은 어떻게 애플리케이션을 호출합니까?

현재 Arm64 플랫폼용 C 런타임 라이브러리를 구현 중인데, 애플리케이션 실행의 정확한 시점(ELF 파일이 진입점으로 정의됨)에서 환경에 대해 어떤 가정을 할 수 있는지 잘 모르겠습니다. 환경이란 주로 스택 설정과 CPU 레지스터를 의미합니다.

커널 소스 코드를 보고 정보를 종합할 수 있었지만 전부는 아니었습니다.

내 질문은: 응용 프로그램의 호출 규칙이 문서화 및/또는 표준화되어 있습니까? 예를 들어 Arm64 기본 프로시저 호출 표준과 동등한 것을 찾고 있습니다.

나는 특히 Linux에 관심이 있기 때문에 Unix & Linux Stack Exchange에 이 글을 게시하고 있으며, 모든 실행 파일이 준수하는 한 운영 체제는 정의한 방식으로 이 호출을 수행할 수 있다고 가정합니다.

답변1

안타깝게도 Armv8 플랫폼용 System V ABI 표준에는 프로세스 초기화가 존재하지 않는 것으로 보입니다(출처:ARM이 발표한 ABI), 이 표준의 다른 버전에도 존재하지만.

그러나 이는 표준의 일부인 것으로 보이며 내 질문에 대한 답을 찾을 수 있었습니다.AMD64 SystemV ABI, v0.99.

내용을 아주 간략하게 요약하면 프로세스 초기화에는 다음이 포함됩니다.

  • argc, argv 및 envp(및 해당 데이터)를 스택에 넣습니다.
  • 부동 소수점 연산을 활성화해야 합니다.
  • 레지스터 상태는 스택 포인터(경우에 따라 프레임 포인터 및 atexit() 포인터)를 제외하고는 관련이 없습니다.

관련 정보