Quelles sont les étapes que MS-DOS prend pour charger un fichier COM ou EXE en mémoire? Existe-t-il encore des références en ligne sur la façon dont cela se passe? Le mieux que je puisse penser est peut-être se référant à la source dosbox.Comment DOS charge un programme en mémoire?
Répondre
Lorsque command.com est invité à exécuter un fichier .com ou .exe, il appelle le service d'interruption 21h/AH = 4B, le service EXEC. Il appartient au programme appelant à:
- construire un bloc de paramètres DOS EXEC (voir http://www.delorie.com/djgpp/doc/rbinter/it/90/15.html) (informations sur les variables d'environnement, les lignes de commande arguments, FCB et enregistrer les valeurs en retour)
- gratuitement tous la mémoire du programme appelant est de ne pas utiliser
- setup arguments appelant enregistre
- ah = 4Bh (EXEC type de service)
- al = 00h (fonction 'charge et exécuter')
- ds: dx -> Nom du programme
- es: bx -> ptr au bloc de paramètres exec
- appel d'interruption 21 h
- sur le pointeur de la pile de réinitialisation de retour et test pour les erreurs.
Lorsque 21 h d'interruption est appelé (ici où ça devient brumeux pour moi):
- une page bloc alignée de la mémoire est allouée
- l'extension de fichier est ignoré, au lieu DOS vérifiera la première deux octets du fichier pour la signature "MZ" ou "ZM" si un EXE, et aucune signature pour COM.
pour exe:
- tête exe est lu pour le registre des valeurs initiales
- section de code de copie de exe dans la table de relocation mémoire
- (voir http://en.wikipedia.org/wiki/Relocation_table) est lu et pointeurs loin sont ajustés en mémoire
- valeurs de registre de configuration
- AL, état de la lettre de lecteur AH
- DS, ES -> segment de PSP (voir http://en.wikipedia.org/wiki/Program_Segment_Prefix)
- SS: SP -> pointeur de pile (défini en-tête exe)
- saut à CS: IP -> point d'entrée (défini en-tête exe, par rapport au début du programme)
pour com:
- toute copie.fichier com dans la mémoire
- registre de valeurs de configuration
- AL, état de la lettre de lecteur AH
- CS, DS, ES, SS -> segment PSP
- SP = décalage dernier mot disponible dans le premier segment de 64k
- saut IP = 100h
devrait maintenant être en cours d'exécution.
Notes:
Dans le document KB de Microsoft "Ordre de priorité dans la localisation des fichiers exécutables", il mentionne l'utilisation de fonction "MS-DOS EXEC (interruption 4Bh service de 21 h)" pour exécuter .com et les fichiers .exe http://support.microsoft.com/kb/35284
nous pouvons donc regarder la liste de Ralph Brown Interrompre sur 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
et un exemple d'utilisation:
- Art de l'Assemblée/19.1.1.1 charger et d'exécuter http://webster.cs.ucr.edu/AoA/DOS/ch19/CH19-1.html#HEADING1-10
et le format d'en-tête DOS:
(c'est basé sur quelques googler, donc s'il vous plaît ne hésitez pas à ajouter des suggestions)
- 1. Comment conserver un programme RPG en mémoire?
- 2. Comment exécuter un programme C dans l'invite DOS
- 3. Comment puis-je compiler un programme C sur l'invite DOS en utilisant tcc et tc
- 4. c Charge ++ fichier de mémoire en python
- 5. Comment entrer quelque chose à l'invite DOS par programme?
- 6. Télécharger par programme un fichier en mémoire php
- 7. Comment laisser un programme D lire un emplacement de mémoire dans la mémoire allouée à un programme A?
- 8. Mémoire pour un programme spécifique sur l'iPhone
- 9. MS-SQL prend-il en charge les tables en mémoire?
- 10. mémoire programme Problème
- 11. Comment augmenter l'allocation de mémoire au programme
- 12. Compilation du programme Turbo C dans l'invite DOS?
- 13. Comment construire un shell GUI pour DOS?
- 14. Comment construire un shell GUI pour DOS?
- 15. Dos à dos UIScrollView zoom
- 16. comment exécuter la commande DOS avec des options en java
- 17. sections programme fichier ELF TLS et CHARGE
- 18. Programme de débogage comme DOS pour l'assemblage x86 32 bits
- 19. Étant donné un objet, comment puis-je dire par programme quelles interfaces il prend en charge?
- 20. Comment profiler un programme Erlang en termes d'utilisation de la mémoire?
- 21. Comment convertir un fichier en mémoire en un tableau d'octets?
- 22. Comment activer DOS sous Vista ou Win7
- 23. Trouver et remplacer un fichier de commandes en utilisant DOS
- 24. Supprimer/dans un fichier texte en utilisant le script DOS
- 25. Exécuter un programme avec une certaine quantité de mémoire physique?
- 26. Réduire ou tronquer partiellement un fichier sous DOS/FAT
- 27. Programme de mémoire partagée de base en C
- 28. comment scanner la mémoire du système par programme?
- 29. Comment exécuter un programme en utilisant Maven?
- 30. Comment écrire un programme d'écho en C?
Demandez Paterson, l'auteur original de dos: http: // dosmandrivel. blogspot.com/ – vulkanino