Com Datei

Com
Dateiname Erweiterung
.Com
Internet -Medientyp Anwendung/X-Dosexec
Art des Formats Ausführbar
Erweitert um Dos mz ausführbar
Eine Reihe von COM -Dateien in IBM PC DOS 1.0

A Com Datei ist eine Art von einfacher ausführbare Datei. Auf der Digital Equipment Corporation (Dez.) Vax Betriebssysteme der 1970er Jahre, .Com wurde als ein verwendet Dateiname Erweiterung zum Textdateien Befehle enthalten, die dem Betriebssystem ausgestellt werden sollen (ähnlich wie a Stapeldatei).[1] Mit der Einführung von Digitale Forschung's CP/m (a Mikrocomputer Betriebssystem), der Typ der Dateien, die üblicherweise der COM -Erweiterung zugeordnet sind, änderte sich in die von ausführbaren Dateien. Diese Übereinkommen wurde später übertragen DOS. Auch wenn der allgemeine Ergänzung ergänzt Exe Datei Format Bei ausführbaren Ausführungen blieben die kompakten COM -Dateien praktikabel und häufig unter DOS verwendet.

Das .Com Die Erweiterung der Dateinamen hat keinen Zusammenhang mit der .com (für "kommerziell") Top-Level-Internet-Domain-Name. Diese Ähnlichkeit des Namens wurde jedoch von genutzt Malware Schriftsteller.

DOS -Binärformat

Das COM -Format ist das in verwendete ursprüngliche ausführbare ausführbare Format CP/m (einschließlich SCP und MSX-dos) ebenso gut wie DOS. Es ist sehr einfach; Es hat keinen Header (mit Ausnahme von CP/M 3 -Dateien).[2] und enthält keinen Standard Metadaten, nur Code und Daten. Diese Einfachheit fordert einen Preis an: die binär hat eine maximale Größe von 65.280 (FF00)h) Bytes (256 Bytes von 64 kb) und speichert alle seine seiner Code und Daten in Eins Segment.

Da fehlt es Verlegung Informationen ist es geladen durch das Betriebssystem an einer voreingestellten Adresse bei Offset 0100H unmittelbar nach dem PSP, wo es ausgeführt wird (daher die Einschränkung der Größe der ausführbaren Datei): die Einstiegspunkt ist um 0100H festgelegt.[NB 1] Dies war kein Problem bei 8-Bit-Maschinen, da sie 64.000 Speicher MAX ansprechen können, aber 16-Bit-Maschinen haben einen viel größeren Adressraum, weshalb das Format nicht verwendet wurde.

In dem Intel 8080 CPU -Architektur, nur 65.536 Speicherbytes (Adressbereich 0000H bis FFFFH). Unter CP/M wurden die ersten 256 Bytes dieses Speichers von 0000H bis 00ffh für die Systemverwendung durch die reserviert Null Seiteund jedes Benutzerprogramm musste genau um 0100h geladen werden, um ausgeführt zu werden.[NB 1] COM -Dateien passen perfekt zu diesem Modell. Vor der Einführung von MP/m und Gleichzeitiger CP/MEs gab keine Möglichkeit, mehr als ein Programm oder Befehl gleichzeitig auszuführen: Das um 0100H geladene Programm wurde ausgeführt und kein anderes.

Obwohl das Dateiformat in DOS und CP/M gleich ist, sind .com -Dateien für die beiden Betriebssysteme nicht kompatibel. DOS COM -Dateien enthalten x86 Anweisungen und möglicherweise dos Systemaufrufe, während CP/M COM -Dateien enthalten 8080 Anweisungen und CP/M -Systemaufrufe (Programme, die auf bestimmte Maschinen beschränkt sind 8085 oder Z80).

.Com -Dateien in DOS setzen alle X86 -Segmentregister auf denselben Wert und das SP (Stack -Zeiger) Registrieren Sie sich zum Offset des letzten im ersten 64 kb -Segments verfügbar Das Programm ist für beide geladen, das Programm plus mindestens 256 Bytes -Stapel, was auch immer kleiner ist. Daher beginnt der Stapel ganz oben im entsprechenden Speichersegment und funktioniert von dort aus.[3][4]

Im ursprünglichen dos 1.x API, die eine Ableitung der CP/M -API war, würde die Programmabschluss einer .com -Datei durch Aufrufen der int 20H -Funktion (Terminate Program) oder int 21H -Funktion 0 durchgeführt, die den gleichen Zweck diente, und der Programmierer hatte auch Um sicherzustellen, dass die Register des Code- und Datensegments bei Programmabschluss den gleichen Wert enthielten, um einen potenziellen Systemabsturz zu vermeiden. Obwohl dies in jeder DOS -Version verwendet werden könnte, empfahl Microsoft die Verwendung von Int 21H -Funktion 4CH für die Programmabschluss von DOS 2.x weiter, wobei das Daten- und Codesegment nicht auf denselben Wert festgelegt werden musste.

Es ist möglich, eine .com -Datei zu erstellen, die unter beiden Betriebssystemen in Form von a ausgeführt werden kann fett binär. Es gibt keine echte Kompatibilität auf Anleitung. die Anweisungen am Einstiegspunkt werden in der Funktionalität gleich ausgewählt, aber in beiden Betriebssystemen unterschiedlich und machen die Programmausführung zum Abschnitt für das verwendete Betriebssystem. Grundsätzlich sind es zwei verschiedene Programme mit derselben Funktionalität in einer einzelnen Datei, deren Code, die die verwendete auswählt, vorangegangen ist.

Wenn das erste Byte einer COM-Datei C9H ist, gibt es einen 256-Byte-Header.[2] Da c9h dem entspricht 8080 Anweisung RetDies bedeutet, dass die COM -Datei sofort endet, wenn sie auf einer früheren Version von CP/M ausgeführt werden, die diese Erweiterung nicht unterstützt. (Da die Anweisungssätze des 8085 und Z80 Supersets des 8080 -Befehlssatzes sind, funktioniert dies bei allen drei Prozessoren.) C9H ist ein Ungültiges Opcode am 8088/8086, und es führt zu einer Prozessor-generierten Interrupt 6-Ausnahme in V86 -Modus auf der 386 und später x86 -Chips. Da C9H der Opcode für Urlaub ist, seit der 80188/80186 und daher nicht als erste Anweisung in einem gültigen Programm verwendet, der ausführbare Loader in einigen Versionen von DOS lehnt COM -Dateien ab, die mit C9H beginnen und einen Absturz vermeiden.

Dateien können Namen haben, die in .com enden, aber nicht in dem oben beschriebenen einfachen Format. Dies wird durch a angezeigt magische Zahl zu Beginn der Datei. Zum Beispiel die Command.com Datei in Dr. DOS 6.0 ist eigentlich in DOS ausführbare Datei Format, angezeigt durch die ersten beiden Bytes MZ (4dh 5AH), die Initialen von Mark Zbikowski.

Große Programme

Unter DOS es gibt kein Speicherverwaltung bereitgestellt für com -Dateien von der Lader oder Ausführungsumgebung. Der gesamte Speicher ist einfach für die COM -Datei verfügbar. Nach der Ausführung die Befehlsschale des Betriebssystems, Command.com, wird neu geladen. Dies hinterlässt die Möglichkeiten, dass die COM -Datei entweder sehr einfach sein kann, und verwendet eine einzelne Segmentoder willkürlich komplex, ein eigenes Speicherverwaltungssystem bereitgestellt. Ein Beispiel für ein komplexes Programm ist command.com, die DOS -Shell, die einen Lader zum Laden anderer com oder lieferte Exe Programme. Im .com -System können größere Programme (bis zur verfügbaren Speichergröße) geladen und ausgeführt werden, aber der Systemlader geht davon aus Weitere Organisation. Programme größer als verfügbarer Speicher oder groß Datensegmente, kann von gehandhabt werden von Dynamische Verknüpfung, wenn der erforderliche Code im .com -Programm enthalten ist. Der Vorteil der Verwendung des .com und nicht des .exe -Formats besteht darin Assembler.[5] Einmal Compiler und Linker Von ausreichender Macht wurde es verfügbar, es war nicht mehr vorteilhaft, das .com -Format für komplexe Programme zu verwenden.

Plattformunterstützung

Das Format ist immer noch ausführbar auf vielen modernen Windows NT-basierend Plattformen, aber es wird in einem ausgeführt MS-DOS-Emulierendes Subsystem, Ntvdm, was nicht vorhanden ist in 64-Bit Varianten. COM -Dateien können auch auf DOS -Emulatoren wie z. Dosboxauf jeder Plattform, die von diesen Emulatoren unterstützt wird.

Verwenden Sie aus Kompatibilitätsgründen

Windows NT-Basierte Betriebssysteme verwenden die .com-Erweiterung für eine kleine Anzahl von Befehlen, die von MS-DOS-Tagen übertragen werden, obwohl sie tatsächlich als derzeit als implementiert sind .exe Dateien. Das Betriebssystem erkennt den .exe -Dateiheader und führt sie trotz ihrer technisch falschen .com -Erweiterung korrekt aus. (Tatsächlich kann jede .exe -Datei in .com umbenannt und weiterhin korrekt ausgeführt werden.) Die Verwendung der ursprünglichen .com -Erweiterungen für diese Befehle gewährleistet die Kompatibilität mit älteren DOS -Batch -Dateien, die sie möglicherweise mit ihren vollständigen Original -Dateinamen verweisen. Diese Befehle sind Scheibenkompetenz, Diskkopie, FORMAT, MODUS, MEHR und BAUM.

Ausführungspräferenz

In DOS, wenn ein Verzeichnis sowohl eine COM -Datei als auch eine enthält Exe Datei mit gleichem Namen, wenn keine Erweiterung angegeben ist, wird die COM -Datei bevorzugt für die Ausführung ausgewählt. Zum Beispiel ein Verzeichnis in der Systempfad Enthält zwei benannte Dateien foo.com und foo.exeFolgendes würde ausführen foo.com:

C: \> foo

Ein Benutzer, der ausführen möchte foo.exe kann den vollständigen Dateinamen ausdrücklich verwenden:

C: \> foo.exe

Nutzen Sie dieses Standardverhalten, Virus Autoren und andere böswillige Programmierer haben Namen wie verwendet notepad.com In der Hoffnung, dass ein Befehl oder eine Chargendatei für ihre Kreationen in der Hoffnung, wenn es in das gleiche Verzeichnis wie die entsprechende EXE -Datei platziert wird, versehentlich ihr Programm anstelle des Texteditors auslösen kann notepad.exe. Auch diese .com -Dateien können tatsächlich ein .exe -Format enthalten.

An Windows NT und Derivate (Windows 2000, Windows XP, Windows Vista, und Windows 7), das PATHEXT Variable wird verwendet, um die Reihenfolge der Präferenz (und akzeptablen Erweiterungen) für das Aufrufen von Dateien zu überschreiben, ohne die Erweiterung aus der Befehlszeile anzugeben. Der Standardwert platziert noch immer .com Dateien vor .exe Dateien. Dies ähnelt stark einer Funktion, die zuvor in den erweiterten Befehlszeilenprozessoren der JP -Software zu finden ist 4dos, 4OS2, und 4nt.

Böswillige Verwendung der .com -Erweiterung

Einige Autoren des Computervirus haben gehofft, die wahrscheinlichen Mangel an Kenntnis der modernen Computerbenutzer über die zu nutzen .com Dateierweiterung und das zugehörige binäre Format zusammen mit ihrer wahrscheinlicheren Vertrautheit mit dem .com Internet -Domain -Name. E-Mails wurden mit Anhangsnamen gesendet, die "www.example.com" ähnlich sind. Unachtsam Microsoft Windows Benutzer, die auf einen solchen Anhang klicken http://www.example.com/, aber stattdessen würde die angehängte binäre Befehlsdatei mit dem Namen www.example, geben Sie ihm die volle Erlaubnis, ihrer Maschine zu tun, was auch immer der Autor im Sinn hatte.

Das COM -Dateiformat selbst hat nichts bösartig; Dies ist eine Ausbeutung des zufälligen Namens Kollision zwischen .com comManddateien und .com comQuecksilber Websites.

Siehe auch

Anmerkungen

  1. ^ a b In den meisten Versionen von CP/m, der Beginn der TPA war bei Offset +100H, nur im Gedächtnis von der vorausgegangen Null Seite bei Offset +0H. Einige Versionen unterschieden sich aus Hardwaregründen, einschließlich CP/M für die Heath H89, wo es bei Offset +4300H begann (für die Kompatibilität (für die Kompatibilität, gab es eine Hardware -Modifikation von Magnolia Microsystems, um die ROMs nach dem Start nach dem Start nach dem Start zuzuordnen) oder CP/M für die TRS-80 Modell i und TRS-80 Modell III, wo die Programme bei Offset +0H geladen wurden.

Verweise

  1. ^ Christian, Brian; Markson, Tom; Skrenta, Rich (Hrsg.). "Abschnitt 5.3". Das PDP-11-Anleitungen buchen (Revision 1 ed.). Archiviert vom Original am 2018-08-01. Abgerufen 2018-08-01. (NB. Hat eine Referenz für die RT-11 Betriebssystem auf der PDP-11 Minicomputer, das in Abschnitt 5.3 zeigt, dass .COM verwendet wird, um auf eine Befehlsdatei zu verweisen.)
  2. ^ a b Elliott, John C.; Lopushinsky, Jim (2002) [1998-04-11]. "CP/M 3 COM -Dateiheader". Seasip.info. Archiviert von das Original Am 2018-08-01.
  3. ^ Paul, Matthias R. (2002-10-07) [2000]. "Re: Ausführen einer COM -Datei". Newsgroup:ALT.MSDOS.Programmer. Archiviert vom Original am 2017-09-03. Abgerufen 2017-09-03. [1] (NB. Hat Details zum DOS COM -Programm, das Konventionen aufruft.)
  4. ^ Lunt, Benjamin "Ben" D. (2020). "DOS .com Startup Register". Für immer junge Software. Archiviert vom Original am 2020-11-12. Abgerufen 2021-12-14.
  5. ^ Scanlon, Leo J. (1991). "Kapitel 2". Assemblersprachunterroutinen für MS-DOS (2 ed.). Windcrest -Bücher. p. 16. ISBN 0-8306-7649-x.

Externe Links