Porqué usar (que son) a.out y ELF como formatos ejecutables

fdfdfPara entender por que FreeBSD usa el formato a.out, debes saber primero un poco sobre los tres formatos dominantes actualmente en UNIX:El antiguo y clásico formato de objeto. Usa una corta y compacta cabecera con un número mágico en el inicio que es usado para caracterizar el formato (mira en a.out(5) para más detalles). Contiene tres segmentos cargados: .text, .data y .bss más una tabla de símbolos y una tabla de cadenas de carácteres.
COFF

El formato de objeto SVR3. La cabecera comprime una sección de tablas, de manera que puedas tener más de una sola sección .test, .data y .bss
ELF

El sucesor de COFF, ofreciendo múltiples secciones y valores posibles de 32 o 64 bits. Un problema importante: ELF fue diseñado con la presunción de que solo existiría un único ABI por arquitectura de sistema. Esta presunción actualmente es incorrecta, incluso en el mundo comercial (el cual tiene al menos tres ABIs: SVR4, Solaris y SCO).

FreeBSD intenta solucionar este problema de manera que provee de una utilidad para marcar un ejecutable ELF con información sobre el ABI con el que es compatible. Para más información, mira el man de brandelf.
FreeBSD viene del sistema clásico y tradicionalmente ha utilizado el formato a.out, una tecnología probada y testeada a través de muchas generaciones de releases de BSD. También es posible construir y ejecutar binarios nativos ELF (y kernels) en sistemas FreeBSD. FreeBSD inicialmente se resistió al salto de cambiar a ELF como su formato por defecto. Porqué?, bien, cuando el mundo Linux hizo su transición a ELF no era nada fácil abandonar el formato ejecutable a.out debido a su inflexible mecanismo de tablas basadas en librerías compartidas. Esto hizo muy difícil para los fabricantes y desarrolladores la creación de librerías compartidas. A partir del momento en el que se ofrecieron una serie de herramientas que ofrecían la solución al problema de las librerías compartidas, el coste de la migración fue aceptado como necesario y la transición se hizo.

En el caso de FreeBSD, el mecanismo de librerías compartidas esta más basado en el estilo de SunOS, mucho más sencillo de usar. De todas maneras, empezando con la version 3.0, FreeBSD soportará oficialmente binarios ELF como el formato por defecto. Aunque pensamos que el formato ejecutable a.out nos ha servidor muy bién, la gente de GNU, que hacen las herramientas de compilación que usamos, ha dejado de dar soporte para el formato a.out. Esto nos ha forzado a mantener dos versiones divergentes del compilador y lincador.
13.3. ¿Porqué chmod no puede cambiar los permisos de los links?
Tienes que usar -H o -L junto con la opción -R para que funcione. Para más información, mira la página de chmod y de symlink.

CUIDADO la opción -R hace un chmod RECURSIVO. Ten cuidado aal especificar directorios o symlinks con chmod. Si quieres cambiar los permisos de un directorio referenciado por un symlink, usa chmod sin ninguna opción y sigue el symlink con una barra /. Por ejemplo, si foo es un symlink al directorio bar, y quieres cambiar los permisos de foo /actualmente bar), deberías hacer algo como esto.

About the author