2010-02-28 9 views
10

Tengo algunas preguntas:a.out reemplazado por formato de archivo ELF?

  • a.out ¿Por qué se sustituyen por ELF?
  • ¿Cuáles fueron las principales fallas en el formato a.out que llevaron al aumento del formato de archivo ELF?
  • Los volcados de núcleo anteriores se basaban en a.out, pero ahora están basados ​​en ELF. ¿Cuáles son las diversas ventajas proporcionadas por ELF?
+1

¿Has hecho una investigación sobre esto tú mismo? No mencionaste lo que buscaste, etc ... – t0mm13b

+1

Sí, investigué http://en.wikipedia.org/wiki/A.out- "La transición de Linux a ELF fue más o menos forzada debido a la complejidad naturaleza de la creación de bibliotecas compartidas en esa plataforma, que incluía la necesidad de registrar el espacio de direcciones virtuales en el que se encontraba la biblioteca con una autoridad central, ya que a.out ld.so en Linux no podía reubicar las bibliotecas compartidas. Los diversos sabores de BSD pudieron continuar utilizando binarios de aout mucho después de que Linux se viera forzado a cambiar a ELF, debido a la naturaleza algo más flexible del formato BSD a.out en comparación con el de Linux ". –

Respuesta

14

El formato a.out obligó a las bibliotecas compartidas a ocupar un lugar fijo en la memoria. Si desea distribuir una biblioteca compartida a .out, debe registrar su espacio de direcciones. Esto fue bueno para el rendimiento, pero no se amplió en absoluto. Véalo usted mismo how tricky it was (linuxjournal). Por el contrario, en ELF, las bibliotecas compartidas se pueden cargar en cualquier lugar de la memoria e incluso pueden aparecer en diferentes direcciones para diferentes aplicaciones que se ejecutan en la misma computadora (con el código cargado efectivamente en un solo lugar en la memoria física))! Para lograr esto, en la arquitectura IA-32, se debe sacrificar un registro (% ebx). A more comprehensive reference demostrando que las bibliotecas compartidas se volvieron más complicadas en ELF, pero eso era una complejidad del lado del compilador, a diferencia del lado del programador.

+0

Me interesaría saber cómo se usó ebx antes y después, y también qué hizo diferente a coff del elfo –

+0

@EvanCarroll La pregunta original no se refiere a COFF en absoluto. Tu comentario parece una nueva pregunta, que te invito a que hagas. –

+0

@EvanCarroll En a.out, ebx está disponible para el código del usuario como un registro de propósito general. En el ELF ABI x86 (32 bits), ebx contiene la dirección de la tabla de compensación global (GOT) para que no esté disponible para el código de usuario. Las funciones de hoja -funciones que no llaman a ninguna otra función- pueden guardarlo y usarlo, pero a diferencia de un registro de guardado de llamada, no es suficiente guardarlo en la entrada para poder usarlo en general. –

0

Como recuerdo, uno de los problemas originales del formato a.out es que solo admite tres secciones: texto, datos y bss. ELF permite cualquier número (o al menos muchos más). El formato de cabecera a.out era muy simple, algo así como:

word <magic> 
word <text size> 
word <data size> 
word <bss size> 

el formato ELF, por el contrario, tiene encabezados de sección, con nombres, tamaños, etc.

Tener más secciones permite la secciones estándar , pero también nos proporciona secciones const, secciones de constructor e incluso una sección por función, si lo queremos.

+1

Esto explica las diferencias, pero no explica qué es lo que está mal con a.out o por qué tener más secciones es mejor –

1

Un poco de triviality - a.out significaba Assembler OUTput y hasta el día de hoy, gcc compilará el código C y establecerá el nombre del archivo de salida a.out, a menos que se especifique otro nombre de salida, aunque el archivo de salida esté DUENDE. Este fue un remanente de los días en que el código se traducía directamente a la salida del ensamblador ... ¡¡es agradable ver la vida heredada en espíritu !!

Espero que esto ayude, Saludos cordiales, Tom.

+3

Tenga en cuenta que aunque gcc usa el nombre 'a.out', el formato sigue siendo ELF. – hlovdal

+0

@hlovdal: ¡cierto! :) – t0mm13b

+0

que ha votado negativamente? ¡obviamente el infractor no entiende! Por favor, deje un comentario sobre él ... y no sea desfavorablemente downvoting y * ¡NO * dejando un comentario! – t0mm13b

Cuestiones relacionadas