linux linkage ldd

¿Qué son ld-linux.so.2 y linux-gate.so.1?



linkage ldd (1)

Espero que no esté preguntando acerca de las entradas principales, que indican que para la biblioteca solicitada libm.so.6 se encontró en el archivo /lib/libm.so.6 , por ejemplo, pero están preguntando sobre las dos valores atípicos

¿Por qué se muestran de manera diferente? para linux-gate.so.1 es porque en realidad no es un archivo en el disco, está expuesto por el kernel como el mecanismo para hacer llamadas al sistema. Para /lib/ld-linux.so.2 es porque este es el intérprete del programa que se utiliza para ejecutar la aplicación.

Hay una entrada de blog bastante buena que describe linux-gate.so, y se explica bastante bien.

Para /lib/ld-linux.so.2 , debes entender un poco de lo que sucede cuando /lib/ld-linux.so.2 un binario ELF. La respuesta corta es que el controlador del kernel para estos tipos de binarios usa este archivo para lanzar la aplicación.

El propósito principal de este programa es asignar el binario a la memoria, cargar las bibliotecas a las que se hace referencia en el programa (por ejemplo, el libm.so.6 mencionado anteriormente) y luego entregar el control a la dirección de inicio del binario que se está ejecutando.

Este programa se define como parte de la estructura del archivo ELF, en la sección INTERP del encabezado del programa. Para los binarios de 32 bits de Linux, este es el nombre típico del intérprete de 32 bits. Para los binarios de 64 bits, encontrará que normalmente se llama ld-linux-x86_64.so.2 (para plataformas de 64 bits x86).

Puede determinar esta información usted mismo usando readelf -l , y la sección INTERP:

INTERP 0x0000000000000238 0x0000000000400238 0x0000000000400238 0x000000000000001c 0x000000000000001c R 1 [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

Cuando ldd program obtengo una salida del formulario

linux-gate.so.1 => (0xb77ae000) libstdc++.so.6 => /lib/libstdc++.so.6 (0xb76bc000) libm.so.6 => /lib/libm.so.6 (0xb7691000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7674000) libc.so.6 => /lib/libc.so.6 (0xb74c2000) /lib/ld-linux.so.2 (0xb77af000)

¿Puede explicar la salida y la razón por la cual linux-gate.so.1 y ld-linux.so.2 muestran de manera diferente a otras entradas? ¿Cuáles son sus roles?