2010-09-15 4 views
11

Welche Schritte führt MS-DOS aus, um eine COM- oder eine EXE-Datei in Arbeitsspeicher zu laden? Gibt es noch online Hinweise darauf, wie dies geschieht? Das Beste, was ich mir vorstellen kann, bezieht sich möglicherweise auf die Dosbox-Quelle.Wie lädt DOS ein Programm in den Speicher?

+0

Stellen Sie Paterson, der ursprüngliche Autor von dos: http: // dosmandrivel. blogspot.com/ – vulkanino

Antwort

17

Wenn command.com aufgefordert wird, eine .com- oder .exe-Datei auszuführen, wird der Interrupt-Dienst 21h/AH = 4B, der EXEC-Dienst, aufgerufen. Es liegt an den Aufrufer zu:

  • bauen einen DOS EXEC Parameterblock (siehe http://www.delorie.com/djgpp/doc/rbinter/it/90/15.html) (enthält Informationen über Umgebungsvariablen, Kommandozeilen Argumente, FCBs und Registerwerte auf Rückkehr)
  • frei bis alle Speicher das aufrufende Programm nicht
  • Setup Aufruf Argument Register
    • ah = 4Bh ('EXEC' Service-Typ)
    • al = 00h ('load und ausführen' -Funktion)
    • ds: dx -> Programmname
    • es: bx -> ptr Parameterblock für Fehler
  • Aufruf Interrupt 21h
  • auf Rückkehr Reset-Stapelzeiger und Test von exec.

Wenn Interrupt 21h aufgerufen wird (hier, wo es für mich trüb wird):

  • eine Seite ausgerichtet Speicherblock zugeordnet ist
  • die Dateierweiterung wird ignoriert, stattdessen wird DOS die erste überprüfen zwei Bytes der Datei für die Signatur "MZ" oder "ZM", wenn eine EXE und keine Signatur für COM.

für exe:

  • exe-Header für die erste Register gelesen wird Werte
  • Kopie Codeabschnitt von exe in den Speicher
  • Relocation Tabelle (siehe http://en.wikipedia.org/wiki/Relocation_table) gelesen und weit Zeiger eingestellt werden im Speicher
  • Setup Registerwerte
  • Sprung zu CS: IP -> Einstiegspunkt (in exe-Header definiert, bezogen von Programm zu starten)

für com:

  • Kopie gesamte.com-Datei in den Speicher
  • Setup-Registerwerte
    • AL, Status AH Laufwerksbuchstaben
    • CS, DS, ES, SS -> PSP Segment
    • SP = der letzte Wort Offset in ersten 64k Segment
  • Sprung zu IP = 100h

Programm jetzt ausführen sollte.


Hinweise:

In Microsofts KB Dokument "Order of Precedence in Lokalisierung Executable Files", es erwähnt die Verwendung von "MS-DOS EXEC Funktion (Interrupt 21h Service 4Bh)" für die Ausführung .com und EXE-Dateien http://support.microsoft.com/kb/35284

So können wir bei Ralph Browns Interrupt-Liste auf Int aussehen 21/AH = 4Bh

und ein Beispiel für die Verwendung:

und das dos exe-Header-Format:

(dies wird einige googeln basiert weg, so wenden Sie sich bitte Vorschläge zu machen)

Verwandte Themen