
방금 읽었어예ABI의. 그게 맞나요?
ABI는 ABI가 기계어로 되어 있고 API가 고급 프로그래밍 언어로 되어 있다는 점을 제외하면 API와 유사합니다.
ABI는 기계어로 컴파일된 라이브러리에 속하고 제공되는 인터페이스입니까? (내가 맞다면 자체 제작 컴파일된 라이브러리는 ABI를 제공합니다(위 예 참조). 운영 체제는 컴파일된 라이브러리로 볼 수 있으므로 응용 프로그램이 시스템 호출 서비스에 액세스할 수 있도록 자체 ABI를 제공합니다.)
위의 예에서는 자체 제작한 컴파일된 라이브러리의 ABI가 운영 체제에 종속되는지 여부를 언급하지 않습니다.
https://en.wikipedia.org/wiki/Application_binary_interface그러나 운영 체제를 언급합니다.
ABI는 다음과 같은 세부 사항을 다룹니다.
프로세서 명령어 세트(레지스터 파일 구조, 스택 구성, 메모리 액세스 유형 등과 같은 세부 정보 포함)
프로세서가 직접 액세스할 수 있는 기본 데이터 유형의 크기, 레이아웃 및 정렬
함수의 인수가 전달되고 반환 값이 검색되는 방식을 제어하는 호출 규칙; 예를 들어 모든 매개변수가 스택에 전달되는지 아니면 일부 매개변수가 레지스터에 전달되는지, 어떤 레지스터가 어떤 함수 매개변수에 사용되는지, 스택에 전달된 첫 번째 함수 매개변수가 스택에 처음으로 푸시되는지 아니면 마지막으로 푸시되는지 여부 등이 있습니다.
애플리케이션이 시스템 호출을 수행하는 방법운영 체제ABI가 시스템 호출 스텁에 대한 프로시저 호출이 아닌 직접 시스템 호출을 지정하는 경우 시스템 호출 번호
완전한 운영 체제 ABI의 경우 개체 파일, 프로그램 라이브러리 등의 바이너리 형식입니다.
컴파일된 라이브러리의 ABI는 운영 체제에 따라 달라지나요? (아닌 것 같습니다. 컴파일된 라이브러리가 운영 체제의 ABI를 통해 시스템 호출 서비스를 사용하더라도 OS(의 ABI)에 의존하는 것은 ABI가 아니라 컴파일된 라이브러리입니다.)
컴파일된 라이브러리의 ABI는 운영 체제(ABI)와 독립적일 수 있습니까?
감사해요.
답변1
컴파일된 라이브러리의 ABI는 대상에 따라 다르며 운영 체제를 포함할 필요는 없습니다. 운영 체제가 없는 임베디드 시스템용 라이브러리도 있고 운영 체제의 ABI를 추상화하는 Java와 같은 플랫폼용 라이브러리도 있습니다.
말씀하신 대로 운영 체제의 ABI는 라이브러리(또는 프로그램)가 이를 호출하는 방법을 결정합니다. 라이브러리 호출 방법이 반드시 결정되는 것은 아닙니다. 라이브러리의 ABI를 결정하는 것은 실제로 API와 라이브러리가 사용하는 컴파일러의 세부 사항입니다. 컴파일러는 일반적으로 대상 플랫폼의 ABI를 따르지만 이는 OS별로 다르지 않습니다. 예를 들어 Linux에서 플랫폼 ABI는 다음과 같습니다.시스템 V ELF ABI, 아키텍처별 프로세서 보충 자료 포함.
그러나 운영 체제의 ABI가 라이브러리의 ABI로 유출될 가능성이 있습니다. 예를 들어 라이브러리가 해당 ABI에서 시스템별 구조를 직접 노출하는 경우입니다.