컴파일된 라이브러리의 ABI는 운영 체제에 따라 달라지나요?

컴파일된 라이브러리의 ABI는 운영 체제에 따라 달라지나요?

난 방금 읽었어한 가지 예ABI. 이 올바른지

  • ABI는 ABI가 기계어이고 API가 고급 프로그래밍 언어라는 점을 제외하면 API와 유사합니다.

  • ABI는 기계어로 컴파일된 라이브러리에 속하고 제공되는 인터페이스입니까? (제 추측이 맞다면 집에서 만든 컴파일된 라이브러리는 자체 ABI를 제공합니다(위의 예 참조). 운영 체제는 컴파일된 라이브러리로 간주될 수 있으므로 애플리케이션이 시스템 호출 서비스에 액세스할 수 있도록 자체 ABI를 제공합니다.)

위의 예에서는 자체 컴파일된 라이브러리의 ABI가 운영 체제에 종속되는지 여부를 언급하지 않습니다.

https://en.wikipedia.org/wiki/Application_binary_interface그러나 운영 체제는 다음과 같이 언급됩니다.

ABI는 다음 세부 사항을 다룹니다.

프로세서 명령어 세트(레지스터 파일 구조, 스택 구성, 메모리 액세스 유형 등과 같은 세부정보)

프로세서가 직접 접근할 수 있는 기본 데이터 유형의 크기, 레이아웃, 정렬

함수 매개변수가 전달되고 반환 값이 검색되는 방식을 제어하는 ​​호출 규칙(예: 모든 매개변수가 스택에 전달되는지 아니면 일부 매개변수가 레지스터에 전달되는지, 어떤 레지스터가 어떤 함수 매개변수에 사용되는지, 어떤 매개변수) 함수 매개변수가 스택에 처음으로 푸시되는지 아니면 마지막으로 푸시되는지 여부입니다.

애플리케이션이 시스템 호출을 수행하는 방법운영 체제또한 ABI가 시스템 호출 스텁에 대한 프로시저 호출이 아닌 직접 시스템 호출을 지정하는 경우 시스템 호출 번호

완전한 운영 체제 ABI의 경우 개체 파일, 프로그램 라이브러리 등의 바이너리 형식입니다.

컴파일된 라이브러리의 ABI는 운영 체제에 따라 달라지나요? (아닌 것 같습니다. 컴파일된 라이브러리가 운영 체제의 ABI를 통해 시스템 호출 서비스를 사용하더라도 ABI가 아닌 운영 체제(ABI)에 의존하는 컴파일된 라이브러리입니다.)

컴파일된 라이브러리의 ABI는 운영 체제(ABI)와 독립적일 수 있나요?

감사해요.

답변1

컴파일된 라이브러리의 ABI는 대상에 따라 다르며 반드시 운영 체제를 포함하지는 않습니다. 운영 체제가 없는 임베디드 시스템용 라이브러리가 있고, 운영 체제의 ABI를 추상화하는 Java와 같은 플랫폼용 라이브러리가 있습니다.

말씀하신 것처럼 운영 체제의 ABI는 라이브러리(또는 프로그램)가 호출하는 방법을 결정하지만 반드시 라이브러리가 호출되는 방법을 결정하는 것은 아닙니다. 라이브러리의 ABI를 결정하는 것은 실제로 API와 라이브러리가 사용하는 컴파일러의 세부 사항입니다. 컴파일러는 일반적으로 대상 플랫폼의 ABI를 따르지만 이는 운영 체제에 국한되지 않습니다. 예를 들어 Linux에서는 플랫폼 ABI가 다음과 같습니다.시스템 V ELF ABI, 아키텍처별 프로세서 추가.

그러나 운영 체제의 ABI는 라이브러리의 ABI로 유출될 수 있습니다. 예를 들어 라이브러리가 시스템별 구조를 해당 ABI에 직접 노출하는 경우입니다.

관련 정보