2010-09-15 21 views
11

¿Qué pasos toma MS-DOS para cargar un archivo COM o EXE en la memoria? ¿Todavía hay referencias en línea sobre cómo sucede esto? Lo mejor que puedo pensar es posiblemente referirme a la fuente dosbox.¿Cómo carga DOS un programa en la memoria?

+0

Pregunte Paterson, el autor original de DOS: http: // dosmandrivel. blogspot.com/ – vulkanino

Respuesta

17

Cuando se le pide command.com para ejecutar un .com o .exe, se llamará al servicio de la interrupción 21h/AH = 4B, el servicio EXEC. Corresponde al programa que llama a:

  • construir un bloque de parámetros DOS EXEC (ver http://www.delorie.com/djgpp/doc/rbinter/it/90/15.html) (incluye información sobre las variables de entorno, líneas de comando argumentos, FCB y registrar los valores de retorno)
  • libre de toda la memoria del programa de llamada no está usando argumento alguno que ponga
  • instalación registra
    • ah = 4Bh (tipo de servicio 'EXEC')
    • aL = 00h ('cargar y ejecutar' función)
    • DS: DX -> nombre del programa
    • ES: BX -> ptr a Exec bloque de parámetros
  • llamada de interrupción 21h
  • el restablecimiento de retorno puntero de pila y la prueba de errores.

Cuando 21h de interrupción se llama (aquí es donde se pone turbia para mí):

  • una página de bloqueo alineados de la memoria se asigna
  • la extensión del archivo se ignora, en lugar de DOS se compruebe la primera dos bytes del archivo para la firma "MZ" o "ZM" si es EXE, y no hay firma para COM.

de exe:

  • cabecera exe se lee para el registro inicial valores de la sección de código
  • copia del exe en la memoria
  • tabla de reubicación (ver http://en.wikipedia.org/wiki/Relocation_table) se lee y se punteros son ajustados en la memoria
  • valores de registro de configuración
  • salto a CS: IP -> punto de entrada (que se define en la cabecera exe, relativa al inicio del programa)

para com:

  • copia completa.archivo com en la memoria
  • valores de registro de configuración
    • AL, AH estado de letra de unidad
    • CS, DS, ES, SS -> segmento de PSP
    • SP = desplazamiento de la última palabra disponible en el primer segmento de 64k
  • salto al IP = 100h Programa

ahora debe estar ejecutando.


Notas:

En el documento KB de Microsoft "orden de precedencia en la localización de archivos ejecutables", menciona el uso de la "función de MS-DOS EXEC (interrumpir el servicio 21h 4Bh)" para la ejecución de .com y .exe http://support.microsoft.com/kb/35284

Así podemos ver Lista de interrupción de Ralph Brown en Int 21/AH = 4Bh

y un ejemplo de uso:

y el formato del encabezado dos exe:

(esto se basa fuera de algunas google, así que por favor libre de añadir sugerencias)

Cuestiones relacionadas