응용 프로그램 바이너리 인터페이스
Application binary interface컴퓨터 소프트웨어에서 응용 프로그램 바이너리 인터페이스(ABI)는 두 개의 바이너리 프로그램 모듈 간의 인터페이스입니다.대부분의 경우 이러한 모듈 중 하나는 라이브러리 또는 운영체제 설비이고 다른 하나는 사용자에 의해 실행되는 프로그램입니다.
ABI는 낮은 수준의 하드웨어 의존형 형식인 기계 코드로 데이터 구조 또는 계산 루틴에 액세스하는 방법을 정의합니다.이와는 대조적으로 API는 이 액세스를 비교적 높은 수준의 하드웨어에 의존하지 않고 사람이 읽을 수 있는 형식인 소스 코드로 정의합니다.ABI의 공통적인 측면은 호출 규약으로, 데이터가 계산 루틴에 입력 또는 출력으로 제공되는 방법을 결정합니다.그 예로는 x86 호출규칙이 있습니다.
ABI(공식적으로 표준화되거나 표준화되지 않을 수 있음)를 준수하는 것은 보통 컴파일러, 운영체제 또는 라이브러리 작성자의 작업입니다.그러나 애플리케이션 프로그래머는 프로그래밍 언어를 혼합하여 프로그램을 작성하거나 다른 컴파일러와 같은 언어로 작성된 프로그램을 컴파일할 때 ABI를 직접 처리해야 할 수 있습니다.
묘사
ABI의 세부사항은 다음과 같습니다.
- 레지스터 파일 구조, 스택 구성, 메모리 액세스 유형 등의 세부 정보를 포함하는 프로세서 명령 세트.
- 프로세서가 직접 액세스할 수 있는 기본 데이터 유형의 크기, 레이아웃 및 정렬
- 함수 인수 전달 및 반환 값을 제어하는 호출 규칙. 예를 들어 다음을 제어합니다.
- 모든 매개 변수가 스택에 전달되는지 또는 일부 매개 변수가 레지스터에 전달되는지 여부
- 어떤 레지스터가 어떤 기능 파라미터에 사용됩니까?
- 스택에 전달된 첫 번째 함수 매개 변수가 먼저 푸시되는지 아니면 마지막으로 푸시되는지 여부
- 응용 프로그램이 운영시스템에 시스템콜을 발신하는 방법 및 ABI가 시스템콜 스터브에 대한 프로시저 콜이 아닌 직접 시스템콜을 지정하는 경우 시스템콜 번호
- 완전한 operating system ABI의 경우 오브젝트 파일, 프로그램 라이브러리 등의 바이너리 포맷.
ABI의 완료
인텔 바이너리 호환성 표준(iBCS)[1]등의 완전한 ABI를 사용하면, 필요한 공유 라이브러리가 존재해, 같은 전제 조건이 충족되고 있는 한, ABI 를 서포트하는 operating system으로부터의 프로그램이, 그 외의 시스템상에서 변경 없이 동작할 수 있습니다.
또한 ABI는 C++ 이름 망글링,[2] 예외 전파,[3] 같은 플랫폼 상의 컴파일러 간의 호출 규칙 등의 세부사항을 표준화할 수 있지만 크로스 플랫폼 호환성은 필요하지 않습니다.
임베디드 ABI
Embedded-Application Binary Interface(EABI; 임베디드 응용 프로그램 바이너리 인터페이스)는 임베디드 운영체제와 함께 사용하기 위해 임베디드 소프트웨어 프로그램의 파일 형식, 데이터 유형, 레지스터 사용, 스택 프레임 구성 및 함수 파라미터 전달에 대한 표준 규약을 지정합니다.
EABI를 지원하는 컴파일러는 다른 컴파일러에 의해 생성된 코드와 호환되는 오브젝트 코드를 작성합니다.이를 통해 개발자는 한 컴파일러에서 생성된 라이브러리를 다른 컴파일러에서 생성된 오브젝트 코드와 연결할 수 있습니다.자체 어셈블리 언어 코드를 작성하는 개발자는 호환 컴파일러에 의해 생성된 어셈블리와 인터페이스할 수도 있습니다.
EABI는 임베디드 시스템의 제한된 리소스 내에서 성능을 최적화하도록 설계되었습니다.따라서 EABI는 복잡한 운영체제에서 커널과 사용자 코드 사이에서 이루어지는 대부분의 추상화를 생략합니다.예를 들어, 보다 작은 실행 파일과 보다 빠른 로드를 가능하게 하는 동적 링크를 회피할 수 있습니다.고정 레지스터를 사용하면 보다 콤팩트한 스택과 커널 콜이 가능하며, 특권 모드로 애플리케이션을 실행하면 디바이스 [4]드라이버를 호출하지 않고도 커스텀 하드웨어 동작에 직접 액세스할 수 있습니다.EABI의 선택은 [5][6]퍼포먼스에 영향을 줄 수 있습니다.
널리 사용되는 EABI에는 PowerPC,[4] Arm[7] EABI 및 MIPS [8]EABI가 있습니다.C 라이브러리와 같은 특정 소프트웨어 구현은 보다 구체적인 ABI를 형성하기 위해 추가적인 제한을 가할 수 있습니다.예를 들어 GNU OABI와 EABI for ARM이 있습니다.이것들은 모두 ARM EABI의 [9]서브셋입니다.
「 」를 참조해 주세요.
레퍼런스
- ^ 인텔 바이너리 호환성 표준(iBCS)
- ^ "Itanium C++ ABI". (복수의 아키텍처에 대응)
- ^ "Itanium C++ ABI: Exception Handling". (복수의 아키텍처에 대응)
- ^ a b "EABI Summary". PowerPC Embedded Application Binary Interface: 32-Bit Implementation (PDF) (Version 1.0 ed.). Freescale Semiconductor, Inc. 1 October 1995. pp. 28–30.
- ^ "Debian ARM accelerates via EABI port". Linuxdevices.com. 16 October 2016. Archived from the original on 21 January 2007. Retrieved 11 October 2007.
- ^ Andrés Calderón and Nelson Castillo (14 March 2007). "Why ARM's EABI matters". Linuxdevices.com. Archived from the original on 31 March 2007. Retrieved 11 October 2007.
- ^ "ABI for the Arm Architecture". Developer.arm.com. Retrieved 4 February 2020.
- ^ Eric Christopher (11 June 2003). "mips eabi documentation". binutils@sources.redhat.com (Mailing list). Retrieved 19 June 2020.
- ^ "ArmEabiPort". Debian Wiki.
Strictly speaking, both the old and new ARM ABIs are subsets of the ARM EABI specification, but in everyday usage the term "EABI" is used to mean the new one described here and "OABI" or "old-ABI" to mean the old one.
외부 링크
- C++와의 정책/바이너리 호환성 문제– 라이브러리 릴리스 간의 바이너리 호환성을 해치지 않는 개발 규칙의 개요
- OS X ABI 펑션콜 가이드
- Debian ARM EABI 포트
- μClib: Motorola 8/16비트 임베디드 ABi
- AMD64(x86-64) 애플리케이션 바이너리 인터페이스(아카이브 2008-05-28)
- ARM 아키텍처용 Application Binary Interface(ABI; 응용 프로그램바이너리 인터페이스)
- MIPS EABI 매뉴얼
- Sun Studio 10 컴파일러와 AMD64 ABI at the Wayback Machine (아카이브 2015-01-14)– 인기 있는 ABI의 개요와 비교
- Freescale M·CORE 프로세서용 M•CORE 애플리케이션 바이너리 인터페이스 표준 매뉴얼