¿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?
Respuesta
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
- AL, AH estado de letra de unidad
- DS, ES -> segmento de PSP (ver http://en.wikipedia.org/wiki/Program_Segment_Prefix)
- SS: SP -> puntero de pila (definido en la cabecera exe)
- 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
- http://www.cs.cmu.edu/~ralf/files.html
- Int 21/AH = 4Bh http://www.delorie.com/djgpp/doc/rbinter/id/51/29.html
- Int 21/AH = 4Bh http://www.ctyme.com/intr/rb-2939.htm
y un ejemplo de uso:
- arte de la Asamblea/19.1.1.1 cargar y ejecutar http://webster.cs.ucr.edu/AoA/DOS/ch19/CH19-1.html#HEADING1-10
y el formato del encabezado dos exe:
(esto se basa fuera de algunas google, así que por favor libre de añadir sugerencias)
- 1. Cualquier ejercicio práctico para comprender cómo se carga un programa en la memoria y ejecutarlo
- 2. ¿Puede un programa asignar la memoria directamente?
- 3. Cómo obtener la memoria utilizada por un programa Delphi
- 4. carga Ehcache contenidos en la memoria diskstore
- 5. ¿Cómo escribir un programa Python eficiente en memoria?
- 6. ¿Cómo puedo perfilar la memoria del programa multiproceso en Python?
- 7. ¿Un programa C++ libera automáticamente la memoria cuando se bloquea?
- 8. ¿Tomcat carga el mismo archivo de biblioteca en la memoria dos veces si están en dos aplicaciones web?
- 9. Cómo aumentar la asignación de memoria al programa
- 10. ¿Cómo se obtiene la cantidad de memoria que usa un programa?
- 11. ¿Cómo bloquear la ejecución de dos instancias del mismo programa?
- 12. La imagen no se carga desde la memoria caché después de cargarla en un iframe
- 13. ¿Cómo puedo encontrar pérdidas de memoria en mi programa Python?
- 14. Liberar memoria dos veces
- 15. Cómo perfilar el uso de la memoria de un programa en C
- 16. ¿Cómo puedo acceder a la memoria de un programa en otro
- 17. ¿Cómo se diagnostica una fuga en la memoria C causada por un programa Java?
- 18. Cómo vaciar la memoria caché en un entorno equilibrado de carga de Magento
- 19. Programa para ver la memoria compartida en Windows?
- 20. Cómo deshabilitar la carga de símbolos al depurar un programa de Visual C++?
- 21. cómo usar la memoria compartida para comunicar entre dos procesos
- 22. Usar toda la memoria RAM en MS-DOS
- 23. ¿Cómo abrir un archivo en la memoria?
- 24. RestSharp está cargando todo el archivo en la memoria durante la carga. ¿Cómo evitarlo?
- 25. ¿Cómo limitar la memoria de un programa OS X? ulimit -v tampoco -m funciona
- 26. ¿Por qué un programa Java vacío consume memoria?
- 27. Python Imaging: carga el archivo JPEG desde la memoria
- 28. Durante la ejecución, ¿cómo puede un programa Java decir cuánta memoria está usando?
- 29. ¿Cómo puedo determinar cuánta memoria está usando mi programa .NET?
- 30. ¿Cómo acceder a la estructura en la memoria de otro programa?
Pregunte Paterson, el autor original de DOS: http: // dosmandrivel. blogspot.com/ – vulkanino