Я никогда не понимал, что такое ABI. Пожалуйста, не указывайте мне статью в Википедии. Если бы я мог это понять, я бы не стал публиковать такие длинные сообщения.
Это мое мышление о различных интерфейсах:
Пульт дистанционного управления - это интерфейс между пользователем и телевизором. Это существующий объект, но сам по себе бесполезный (не предоставляет никакой функциональности). Все функции каждой из кнопок на пульте реализованы в телевизоре.
Интерфейс: это слой «существующей сущности» между
functionality
иconsumer
этой функциональностью. Интерфейс сам по себе ничего не делает. Это просто вызывает функциональность, лежащую позади.Теперь в зависимости от того, кто пользователь, существуют различные типы интерфейсов.
Команды интерфейса командной строки (CLI) являются существующими объектами, потребитель является пользователем, а функциональность скрывается за ним.
functionality:
мой программный функционал, который решает какую-то цель, для которой мы описываем этот интерфейс.
existing entities:
команды
consumer:
пользовательОкно графического интерфейса пользователя (GUI) , кнопки и т. Д. Являются существующими объектами, и опять-таки пользователь является пользователем, а функциональность остается позади.
functionality:
моя функциональность программного обеспечения, которая решает некоторую проблему, к которой мы описываем этот интерфейс.
existing entities:
окно, кнопки и т. д.
consumer:
пользовательФункции интерфейса прикладного программирования (API) (или, если быть более точным), интерфейсы (в интерфейсном программировании) являются существующими объектами, потребитель здесь - другая программа, а не пользователь, и опять-таки функциональность находится за этим уровнем.
functionality:
моя функциональность программного обеспечения, которая решает некоторую проблему, к которой мы описываем этот интерфейс.
existing entities:
функции, интерфейсы (массив функций).
consumer:
другая программа / приложение.Двоичный интерфейс приложения (ABI) Вот где начинается моя проблема.
functionality:
???
existing entities:
???
consumer:
???
- Я написал программное обеспечение на разных языках и предоставил различные виды интерфейсов (CLI, GUI и API), но я не уверен, что когда-либо предоставлял ABI.
ABI охватывает такие детали, как
- тип данных, размер и выравнивание;
- соглашение о вызовах, которое управляет передачей аргументов функций и получением возвращаемых значений;
- номера системных вызовов и как приложение должно выполнять системные вызовы операционной системы;
Другие ABI стандартизируют детали, такие как
- искажение имени в C ++,
- распространение исключений и
- Соглашение о вызовах между компиляторами на одной платформе, но не требует кросс-платформенной совместимости.
Кому нужны эти детали? Пожалуйста, не говорите ОС. Я знаю ассемблерное программирование. Я знаю, как работают ссылки и загрузка. Я точно знаю, что происходит внутри.
Почему в C ++ появилось искажение имен? Я думал, что мы говорим на двоичном уровне. Почему языки входят?
В любом случае, я скачал [PDF] System V Application Binary Interface Edition 4.1 (1997-03-18), чтобы увидеть, что именно в нем содержится. Ну, большая часть этого не имела никакого смысла.
Почему он содержит две главы (4-ю и 5-ю) для описания формата файла ELF ? Фактически, это только две важные главы этой спецификации. Остальные главы посвящены «процессору». Во всяком случае, я думаю, что это совершенно другая тема. Пожалуйста, не говорите, что спецификации формата файлов ELF являются ABI. Это не может быть интерфейсом в соответствии с определением.
Я знаю, поскольку мы говорим на таком низком уровне, он должен быть очень конкретным. Но я не уверен, как это специфично для "архитектуры набора команд (ISA)"?
Где я могу найти Microsoft Windows ABI?
Итак, вот основные запросы, которые меня беспокоят.