Вы правы относительно определения ABI, до определенного момента. Классическим примером является интерфейс syscall
в Linux (и других UNIX).
Это стандартный код запроса операционной системы для выполнения определенных обязанностей.
Как таковые, они решаются людьми, которые написали ОС, или, в случае, если syscalls
были добавлены позже, кем бы они ни были добавлены (в случаях, когда ОС позволяет это). Например, интерфейс Linux syscall
в x86 сообщает, что вы загружаете число syscall
в eax
, а другие параметры помещаются в ebx
, ecx
и т. Д., В зависимости от того, с каким syscall
вы изготовление (eax
).
Обычно интерфейс выполняет компилятор или компоновщик, а не библиотеки, предоставляемые для используемого вами языка.
Возвращаясь к Linux, библиотеки GNU C содержат код для fopen
(например), который в конечном итоге вызывает соответствующий syscall
для выполнения задач более низкого уровня (системный вызов № 5, open
). Список syscalls
можно найти в этом файле PDF .