Запутаться с ABI соглашение о вызовах и арки

Я путаюсь со всеми этими терминами:

ABI, соглашение о вызовах и аппаратная архитектура.

ABI является связью с архитектурой: x86-64 имеют другой ABI, чем i386. Но тогда вы также можете определить свое собственное соглашение о вызовах cdecl...

Ну так какова связь между всеми этими понятиями? Какой из них определяет другой?

В основном я думаю, что я путаю с ABI. Что вы вкладываете в деталь из соглашения о вызовах?

Спасибо

1 ответ

Решение

Это обширная тема, которая еще даст вам несколько советов:

ABI (двоичный интерфейс приложения) охватывает детали, которые необходимо указать, чтобы приложение могло работать в определенной системе (обычно с операционной системой). Итак, чтобы добраться до примеров:

  • размеры типов данных (например, стандарт C задает минимальные требования к типам. Тип int должен быть по крайней мере таким же большим, как short, а short должен составлять 16 бит).
  • расположение в памяти структур и битовых полей
  • соглашение о вызовах (когда функция вызывается там, где она может найти свои параметры, которые в регистрах, которые в стеке и т. д.)
  • кадр стека (то, что присутствует в стеке, полезно для отладчика)
  • номера системных вызовов
  • другие

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

Аппаратная архитектура также может рассматриваться как спецификация, но еще более низкого уровня (речь идет об аппаратном обеспечении, а не о программном обеспечении). Аппаратная архитектура определяет такие вещи, как доступный набор команд, иерархию памяти и способы доступа к периферийным устройствам. Для одной аппаратной архитектуры могут быть разные ABI-ы. Также вы можете иметь один и тот же ABI для нескольких (но обычно похожих) аппаратных архитектур.

Другие вопросы по тегам