2010-01-12 15 views

Respuesta

10

Sí, código en forma de códigos de operación y operandos, y datos de curso. Cualquier cosa que desee hacer que involucre al sistema operativo de cualquier manera depende del sistema operativo, no de la CPU. Es por eso que necesita diferentes programas para diferentes sistemas operativos. Abrir una ventana en Windows no está hecho con la misma secuencia de instrucciones que en Linux, y así sucesivamente.

+2

Los ejecutables a menudo contienen metadatos sobre el programa en sí que el sistema operativo puede usar para algunas cosas. Creo que los archivos '.com' eran el último remanente de programas ejecutables que eran solo código y datos donde el sistema operativo simplemente cargaba el archivo en la memoria, señalaba la IP y la dejaba correr :-) – Joey

8

Como unwind implícita en su respuesta, un archivo ejecutable contiene llamadas a rutinas en el sistema operativo.

Sería extremadamente ineficiente que un archivo ejecutable intente implementar funciones ya proporcionadas por el sistema operativo (por ejemplo, escribiendo en el disco, aceptando entradas) por lo que se hace un uso intensivo de llamadas a las funciones del sistema operativo.

diferentes sistemas operativos proporcionan funciones que hacen cosas similares, pero los detalles de cómo Para llamar a esas funciones (y donde que son) pueden ser diferentes.

Por lo tanto, aparte de las principales diferencias de tipo de procesador, los ejecutables escritos para un sistema operativo no funcionarán con otro.

4

Para hacer cualquier forma de IO, un ejecutable necesita interconectarse con el sistema operativo mediante sys-calls. en Windows, estas son llamadas a la API de Win32 y en Linux/unidad, en su mayoría son llamadas posix.

Además, el formato de archivo ejecutable difiere con el sistema operativo de la misma manera que un archivo PNG difiere de un archivo GIF. los datos se ordenan de manera diferente y hay diferentes encabezados y subcabeceras.

+0

En Windows, las llamadas al sistema hacen la API nativa, no la API de Win32. Win32 es un remanente de los días previos a NT, y es solo un envoltorio alrededor de la API nativa. – wj32

+0

Es cierto, aparte del hecho de que la API nativa no está oficialmente documentada y se supone que no debes usarla nunca. – shoosh

9

Procesadores entienden los programas en términos de códigos de operación - por lo que su intution sobre ejecutables que contienen códigos de operación es correcta, y usted adivinado correctamente que cualquier ejecutable tiene que tener códigos de operación y los operandos de la ejecución del programa en un procesador.

Sin embargo, los programas se ejecutan principalmente con la ayuda de sistemas operativos (puede escribir programas que no usan un sistema operativo para ejecutar, pero eso sería un trabajo innecesario) que proporcionan abstracciones sobre el hardware que el los programas pueden usar. El SO es responsable de configurar un "contexto" para que se ejecute cualquier programa; es decir, proporcionarle al programa la memoria que necesita, proporcionar bibliotecas de uso general que el programa puede usar para hacer cosas comunes como escribir en archivos, imprimir en consola, etc.

Sin embargo, para configurar el contexto del programa (proporcionar memoria, cargar sus datos, configurar una pila para él), el sistema operativo necesita leer el archivo ejecutable de un programa y necesita saber algunas cosas sobre el programa, como como los datos que el programa espera usar, el tamaño de esos datos, los valores iniciales almacenados en esa región de datos, la lista de códigos de operación que componen el programa (también llamada región de texto de un proceso), su tamaño, etc. Todos estos datos y mucho más (información de depuración, datos de solo lectura como cadenas codificadas en el programa, tablas de símbolos, etc.) se almacenan dentro del archivo ejecutable.Cada sistema operativo entiende un formato diferente de este archivo ejecutable, ya que esperan que toda esta información se almacene en el ejecutable de diferentes maneras. Echa un vistazo a los enlaces provistos por Groo.

Un par de formatos que se han utilizado para almacenar información en un archivo ejecutable son ELF y COFF en sistemas UNIX y PE en Windows.

P.S. - No todos los programas necesitan formatos ejecutables. Busca cargadores de arranque en Google. Estos son programas especiales que ocupan el primer sector de una partición de arranque en el disco duro y se utilizan para cargar el sistema operativo.

0

Un archivo ejecutable contiene varios blobs de datos e instrucciones sobre cómo deben cargarse los datos en la memoria. Algunas de estas secciones contienen código de máquina que se puede ejecutar. Otras secciones contienen datos del programa, recursos, información de reubicación, información de importación, etc.

Cuestiones relacionadas