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?
Antwort
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
- AL, AH Laufwerksbuchstaben Status
- DS, ES -> PSP-Segment (siehe http://en.wikipedia.org/wiki/Program_Segment_Prefix)
- SS: SP -> Stapelzeiger (definiert in exe-Header)
- 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
- 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
und ein Beispiel für die Verwendung:
- Art der Montage/19.1.1.1 Laden und Ausführen http://webster.cs.ucr.edu/AoA/DOS/ch19/CH19-1.html#HEADING1-10
und das dos exe-Header-Format:
(dies wird einige googeln basiert weg, so wenden Sie sich bitte Vorschläge zu machen)
- 1. Lädt Android SQLite-Cursor alle Datensätze gleichzeitig in den Speicher?
- 2. Wie kann das Programm den virtuellen Speicher nutzen?
- 3. In C, wie schreibe ich in einen bestimmten Speicherort z. Videospeicher b800, in DOS (echtes DOS, MS DOS 6.22)
- 4. C# -Programm Nicht genügend Speicher
- 5. Wie lädt die JIT-Kompilierung in Java dynamisch kompilierte Anweisungen in den Speicher?
- 6. Wie geben Sie etwas an einer DOS-Eingabeaufforderung programmatisch ein?
- 7. Wie füge ich Werte in den Speicher in extjs ein
- 8. Informationen zum virtuellen Speicher, den mein Programm verwendet?
- 9. Wie verhindert man, dass Delphi ADO die gesamte Tabelle in den Speicher lädt?
- 10. Wer bringt ein Programm vom sekundären Speicher (Hard Disk) in den primären Arbeitsspeicher (RAM) zur Ausführung?
- 11. DOS-Debug-ähnliches Programm für 32-Bit-x86-Assembly
- 12. Wie man ein Array in OpenFlow lädt
- 13. Undichte Speicher in Wort-Frequenz-Programm
- 14. Ein altes Programm dekompilieren
- 15. Lädt readFile den Inhalt?
- 16. Wie wird ein Zeilenumbruch in einem MS-DOS-Skript gedruckt?
- 17. Text an den Dateinamen anhängen mit DOS
- 18. MBR Booten von DOS
- 19. Wie kann ich mein Programm reaktionsfähiger machen? (Programm, das mindestens 200 Dateien lädt) - ich könnte 1 Idee haben
- 20. @echo in DOS (cmd)
- 21. kann nicht dos MBR
- 22. Rekursive Verzeichnisliste in DOS
- 23. Möglichkeiten, um Ihr Programm weniger Speicher verwenden
- 24. Wie erstellen Sie ein freistehendes C++ - Programm?
- 25. Wie lädt FXMLLoader den FXML-Controller?
- 26. Ein Programm, das den folgenden Code ausgibt
- 27. Wie mache ich ein bootfähiges Programm?
- 28. Wie man ein Essiggurken-Objekt lädt und bestimmte Referenzen auflöst
- 29. Shutdown-Computer in MS-DOS mit ACPI
- 30. Wie diagnostizieren Sie ein Leck im C-Speicher, das durch ein Java-Programm verursacht wurde?
Stellen Sie Paterson, der ursprüngliche Autor von dos: http: // dosmandrivel. blogspot.com/ – vulkanino