Зависит ли ABI скомпилированной библиотеки от операционной системы?

Зависит ли ABI скомпилированной библиотеки от операционной системы?

Я просто читалпримерABI. Правильно ли, что

  • ABI похож на API, за исключением того, что ABI написан на машинном языке, а API — на языке программирования высокого уровня.

  • ABI — это интерфейс, предоставляемый скомпилированной библиотекой на машинном языке и принадлежащий ей? (Если я прав, самодельная скомпилированная библиотека предоставляет свой ABI (см. пример выше). Операционную систему можно рассматривать как скомпилированную библиотеку, и, таким образом, она предоставляет приложениям свой собственный ABI для доступа к ее службам системных вызовов.)

В приведенном выше примере не упоминается, зависит ли ABI самодельной скомпилированной библиотеки от операционной системы.

https://en.wikipedia.org/wiki/Application_binary_interfaceоднако упоминает операционную систему:

ABI охватывают такие детали, как:

набор инструкций процессора (с такими подробностями, как структура файла регистра, организация стека, типы доступа к памяти и т. д.)

размеры, макеты и выравнивания основных типов данных, к которым процессор может получить прямой доступ

соглашение о вызовах, которое управляет тем, как передаются аргументы функций и извлекаются возвращаемые значения; например, передаются ли все параметры в стеке или некоторые передаются в регистрах, какие регистры используются для каких параметров функции и помещается ли первый параметр функции, переданный в стек, в первую или последнюю очередь в стек

как приложение должно выполнять системные вызовыоперационная системаи, если ABI определяет прямые системные вызовы, а не вызовы процедур для заглушек системных вызовов, номера системных вызовов

а в случае полной операционной системы ABI — двоичный формат объектных файлов, программных библиотек и т. д.

Зависит ли ABI скомпилированной библиотеки от операционной системы? (Полагаю, нет. Даже если скомпилированная библиотека использует службы системных вызовов через ABI операционной системы, именно скомпилированная библиотека, а не ее ABI, зависит от (ABI) ОС.)

Может ли ABI скомпилированной библиотеки быть независимым от (ABI) операционной системы?

Спасибо.

решение1

ABI скомпилированной библиотеки зависит от ее цели, и это не обязательно должно включать операционную систему. Существуют библиотеки для встроенных систем без операционной системы, а также библиотеки для таких платформ, как Java, которые абстрагируют ABI операционной системы.

Как вы говорите, ABI операционной системы определяет, как библиотека (или программа) вызывает ее; он не обязательно определяет, как библиотека вызывается. Что определяет ABI библиотеки, так это ее API вместе со спецификой используемого ею компилятора. Компилятор обычно следует ABI целевой платформы, но это не зависит от ОС; например, в Linux ABI платформыСистема V ELF ABI, с процессорными дополнениями, специфичными для конкретной архитектуры.

Однако возможна утечка ABI операционной системы в ABI библиотеки, например, если библиотека напрямую раскрывает специфичные для системы структуры в своем ABI.

Связанный контент