В компьютерном программном обеспечении двоичный интерфейс приложения (ABI ) является интерфейс между двумя двоичными программными модулями; часто один из этих модулей - это библиотека или операционная система, а другой - программа, запускаемая пользователем.
ABI определяет, как осуществляется доступ к структурам данных или вычислительным процедурам в машинном коде, который является низкоуровневым аппаратно-зависимым форматом; Напротив, API определяет этот доступ в исходном коде, который является относительно высокоуровневым, аппаратно-независимым, часто читаемым человеком форматом. Общим аспектом ABI является соглашение о вызовах, которое определяет, как данные предоставляются в качестве входных или считываются в качестве выходных данных вычислительных процедур; примерами являются соглашения о вызовах x86..
Соблюдение ABI (который может быть или не быть официально стандартизированным) обычно является задачей компилятора, операционной системы или автора библиотеки; однако прикладному программисту, возможно, придется иметь дело с ABI непосредственно при написании программы на смеси языков программирования (или даже в разных компиляторах для одного и того же языка).
Обложка ABI такие детали, как:
Полных ABI, таких как Intel Binary Compatibility Стандарт (iBCS) позволяет программе из одной операционной системы, поддерживающей этот ABI, запускаться без изменений в любой другой такой системе при условии наличия необходимых разделяемых библиотек и выполнения аналогичных условий.
Другие ABI стандартизируют детали, такие как изменение имени C ++, исключение распространение и соглашение о вызовах между компиляторами на одной платформе, но не требуют кросс-платформенной совместимости.
Бинарный интерфейс встроенного приложения (EABI) определяет стандартные соглашения для форматов файлов, типов данных, использования регистров, кадра стека организация и передача параметров функции встроенной программы программного обеспечения для использования с встроенной операционной системой.
Компиляторы, которые поддерживают EABI create объектный код, то есть совместим с кодом, сгенерированным другими такими компиляторами, что позволяет разработчикам связывать библиотеки, созданные одним компилятором, с объектным кодом, сгенерированным другим компилятором. Разработчики, пишущие свой собственный код языка ассемблера, также могут взаимодействовать со сборкой, созданной совместимым компилятором.
EABI предназначены для оптимизации производительности в рамках ограниченных ресурсов встроенной системы. Поэтому EABI опускает большинство абстракций, которые делаются между ядром и пользовательским кодом в сложных операционных системах. Например, динамического связывания можно избежать, чтобы разрешить исполняемые файлы меньшего размера и более быструю загрузку, использование фиксированного регистра позволяет использовать более компактные стеки и вызовы ядра, а запуск приложения в привилегированном режиме обеспечивает прямой доступ к пользовательской работе оборудования без косвенного обращения. вызова драйвера устройства. Выбор EABI может повлиять на производительность.
Широко используемые EABI включают PowerPC, Arm EABI и MIPS EABI. Конкретные программные реализации, такие как библиотека C, могут налагать дополнительные ограничения для формирования более конкретных ABI; одним из примеров является GNU OABI и EABI для ARM, которые являются подмножествами ARM EABI.