¿El ABI de una biblioteca compilada depende del sistema operativo?

¿El ABI de una biblioteca compilada depende del sistema operativo?

acabo de leerun ejemplode ABI. ¿Es correcto que

  • una ABI es similar a una API, excepto que ABI está en lenguaje de máquina y API está en un lenguaje de programación de alto nivel.

  • ¿Una ABI es la interfaz proporcionada por y perteneciente a una biblioteca compilada en un lenguaje de máquina? (Si estoy en lo cierto, una biblioteca compilada de creación propia proporciona su ABI (consulte el ejemplo anterior). Un sistema operativo puede verse como una biblioteca compilada y, por lo tanto, proporciona su propia ABI para que las aplicaciones accedan a sus servicios de llamadas al sistema).

El ejemplo anterior no menciona si la ABI de una biblioteca compilada de creación propia depende del sistema operativo.

https://en.wikipedia.org/wiki/Application_binary_interfacemenciona el sistema operativo sin embargo:

Las ABI cubren detalles tales como:

un conjunto de instrucciones del procesador (con detalles como estructura de archivos de registro, organización de la pila, tipos de acceso a la memoria, ...)

Los tamaños, diseños y alineaciones de los tipos de datos básicos a los que el procesador puede acceder directamente.

la convención de llamada, que controla cómo se pasan los argumentos de las funciones y se recuperan los valores de retorno; por ejemplo, si todos los parámetros se pasan en la pila o algunos se pasan en registros, qué registros se utilizan para qué parámetros de función y si el primer parámetro de función pasado en la pila se inserta primero o último en la pila

cómo una aplicación debe realizar llamadas al sistemaEl sistema operativoy, si la ABI especifica llamadas directas al sistema en lugar de llamadas a procedimientos a los resguardos de llamadas del sistema, los números de llamada del sistema

y en el caso de un sistema operativo completo ABI, el formato binario de archivos objeto, bibliotecas de programas, etc.

¿El ABI de una biblioteca compilada depende del sistema operativo? (Supongo que no. Incluso si una biblioteca compilada utiliza servicios de llamadas al sistema a través de la ABI del sistema operativo, es la biblioteca compilada, no su ABI, la que depende de (la ABI del) sistema operativo).

¿Puede la ABI de una biblioteca compilada ser independiente de (la ABI de) el sistema operativo?

Gracias.

Respuesta1

El ABI de una biblioteca compilada depende de su destino y no tiene por qué incluir un sistema operativo. Hay bibliotecas para sistemas integrados sin sistema operativo y hay bibliotecas para plataformas como Java que abstraen la ABI del sistema operativo.

Como usted dice, la ABI del sistema operativo determina cómo una biblioteca (o programa) lo llama; no necesariamente determina cómo se llama la biblioteca. Lo que determina el ABI de una biblioteca es en realidad su API junto con las características específicas del compilador que utiliza. El compilador normalmente seguirá la ABI de la plataforma de destino, pero eso no es específico del sistema operativo; por ejemplo en Linux, la plataforma ABI esel Sistema V ELF ABI, con complementos de procesador específicos de la arquitectura.

Sin embargo, es posible que la ABI de un sistema operativo se filtre en la ABI de una biblioteca, por ejemplo, si la biblioteca expone directamente estructuras específicas del sistema en su ABI.

información relacionada