![cover image](https://wikiwandv2-19431.kxcdn.com/_next/image?url=https://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Api-abi-isa.svg/langru-640px-Api-abi-isa.svg.png&w=640&q=50)
Двоичный интерфейс приложений
Материал из Википедии — свободной encyclopedia
Двоичный (бинарный) интерфейс приложений (англ. application binary interface, ABI) — набор соглашений для доступа приложения к операционной системе и другим низкоуровневым сервисам, спроектированный для переносимости исполняемого кода между машинами, имеющими совместимые ABI[1]. В отличие от API, который регламентирует совместимость на уровне исходного текста, ABI можно рассматривать как набор правил, позволяющих компоновщику объединять откомпилированные модули компонента без перекомпиляции всего исходного текста, в то же время определяя двоичный интерфейс[2].
![Thumb image](http://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Api-abi-isa.svg/640px-Api-abi-isa.svg.png)
Двоичный интерфейс приложений регламентирует[4][2]:
- использование регистров процессора,
- состав и формат системных вызовов и вызовов одного модуля другим;
- формат передачи аргументов и возвращаемого значения при вызове функции.
Двоичный интерфейс приложений описывает функциональность, предоставляемую ядром ОС и архитектурой набора команд (без привилегированных команд)[5]. Если интерфейс программирования приложений разных платформ совпадает, исходный текст для этих платформ можно компилировать без изменений. Если для разных платформ совпадают и API, и ABI, исполняемые файлы можно переносить на эти платформы без изменений. Если API или ABI платформ различаются, исходный текст требует изменений и повторной компиляции. API не обеспечивает совместимости среды выполнения программы — это задача двоичного интерфейса.
Бинарный интерфейс встраиваемых приложений (англ. embedded application binary interface, EABI) — набор соглашений для использования во встраиваемом программном обеспечении, описывающий[6]:
- форматы файлов;
- типы данных;
- способы использования регистров;
- организацию стека;
- соглашение о вызове функций.
Если объектный файл был создан компилятором, поддерживающим EABI, становится возможной компоновка этого объектного файла любым компоновщиком, поддерживающим тот же EABI.
Основное отличие EABI от ABI в ОС общего назначения заключается в том, что в коде приложения допускаются привилегированные команды, а динамическое связывание (компоновка) не требуется (а иногда и полностью запрещена), а также, в целях экономии памяти, используется более компактная организация стека.