2010-09-15 8 views
11

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?

+0

Demandez Paterson, l'auteur original de dos: http: // dosmandrivel. blogspot.com/ – vulkanino

Répondre

17

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
  • 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
du programme

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

et un exemple d'utilisation:

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)

Questions connexes