Noté algo mientras hacía find /bin -exec file {} \;:
el filecomando informa algunas entradas en /binare shared objects, mientras que otras como executables. Por ejemplo,
/ bin / ntfsck: objeto compartido
LSB ELF de 64 bits , x86-64, versión 1 (SYSV), vinculado dinámicamente (usa libs compartidas), para GNU / Linux 2.6.24, BuildID [sha1] = 312d93fd0d8653e7236a61db2e67b93c63225a00, despojado
Mismo informe para gawk
/ usr / bin / gawk: objeto compartido
LSB ELF de 64 bits , x86-64, versión 1 (SYSV), vinculado dinámicamente (usa libs compartidas), para GNU / Linux 2.6.24, BuildID [sha1] = 76bb13aac7e212164bd6e0d7b8a5d92db44543c9, despojado
En contraste filepara /bin/echoes:
/ bin / echo:
ELF ejecutable LSB de 64 bits , x86-64, versión 1 (SYSV),
vinculado dinámicamente (usa libs compartidas), para GNU / Linux 2.6.24,
BuildID [sha1] = 193e75fc13e9c4599e772b8d79125a5934cf601c, despojado
Esencialmente, quiero saber cuál es la diferencia entre executablearchivos y shared objectarchivos.
fuente

Respuestas:
Tl; dr
No hay diferencia, aparte del hecho de que un ejecutable compilado podría estar vinculado a un objeto compartido pero no a un ejecutable.
En general, hay dos formas de compilar 1 un ejecutable:
Hay ventajas / desventajas en el uso de cada uno de estos métodos, pero ese no es el punto de la pregunta;
/bin/ntfscky/usr/bin/gawkson objetos compartidos: esto significa que un ejecutable podría compilarse y luego vincularse contra ellos para usar sus funcionalidades;/bin/echoes un ejecutable: esto significa que un ejecutable podría no compilarse y luego vincularse contra él para usar sus funcionalidades;Así
/bin/ntfscky/usr/bin/gawkbibliotecas están compilados técnicamente (u objetos en perspectiva del enlazador), pero, como uno puede tener presentía, nada impide que un objeto compartido que se ejecuten como un ejecutable.En una nota al margen, observe también que los
fileinformes (para cada uno de ellos):Esto significa que cada uno de ellos está vinculado dinámicamente (y probablemente usa) otros objetos compartidos también.
1. "Compilar" en su aceptación más amplia, que incluye preprocesamiento, compilación y vinculación.
fuente
Otra diferencia es que los ejecutables tienen un desplazamiento de dirección de punto de entrada definido, es decir, 0x08048000 para i386, 0x00400000 para x86 y 0x00010000 para arm.
Un archivo de objeto compartido puede ser una biblioteca, pero también un ejecutable. Cuando se trata de un ejecutable, no existe ese desplazamiento. Un ejecutable de objeto compartido , por así decirlo, es un ejecutable independiente de la posición (PIE) que utiliza la aleatorización del diseño del espacio de direcciones (ASLR). Por lo tanto, al mirar su archivo / proc / pid / maps, notará que la ubicación de los segmentos cargados varía en cada ejecución en contraste con los ejecutables estándar.
La idea detrás de esta característica es agregar seguridad a los ejecutables al impedir que los atacantes realicen ataques de programación orientados al retorno. Muchos mantenedores decidieron construir paquetes con PIE habilitado como predeterminado, por ejemplo, desde Fedora 23 o con Ubuntu 17.10.
fuente