Soubor COM - COM file

KOM
Přípona názvu souboru
.COM
Typ internetového média aplikace/x-dosexec
Typ formátu Spustitelný
Rozšířeno na Spustitelný soubor DOS MZ
Řada souborů COM v IBM PC DOS 1.0

Soubor COM je typem jednoduchého spustitelného souboru . Na operačních systémech Digital Equipment Corporation (DEC) VAX sedmdesátých let byla použita jako přípona názvu souboru pro textové soubory obsahující příkazy vydávané operačnímu systému (podobně jako dávkový soubor ). Se zavedením Digital Research ‚s CP / M (a mikropočítač operační systém), typ souborů obyčejně spojené s rozšířením COM se změnil na to spustitelné soubory. Tato konvence byla později přenesena do DOSu . I když byly kompaktní soubory COM doplněny obecnějším formátem souboru EXE pro spustitelné soubory, zůstaly životaschopné a často používané v systému DOS. .COM

.COMPřípona názvu souboru nemá žádný vztah k .com (pro „komerční“) názvem Internet domény nejvyšší úrovně. Tuto podobnost v názvu však využili autoři malwaru .

Binární formát DOS

Formát COM je původní binární spustitelný formát používaný v CP/M (včetně SCP a MSX-DOS ) a také v DOSu . Je to velmi jednoduché; nemá žádné záhlaví (s výjimkou souborů CP/M 3) a neobsahuje žádná standardní metadata , pouze kód a data. Tato jednoduchost vyžaduje cenu: binární soubor má maximální velikost 65 280 (FF00 h ) bajtů (256 bajtů krátkých 64 kB) a ukládá veškerý svůj kód a data do jednoho segmentu .

Vzhledem k tomu, že postrádá informace o přemístění , je načten operačním systémem na předem nastavenou adresu, v offsetu 0100h bezprostředně po PSP , kde je spuštěn (tedy omezení velikosti spustitelného souboru): vstupní bod je pevně stanoven na 0100h. U 8bitových počítačů to nebyl problém, protože mohou adresovat maximálně 64 kB paměti, ale 16bitové počítače mají mnohem větší adresní prostor, a proto formát přestal používat.

V architektuře CPU Intel 8080 bylo možné adresovat pouze 65 536 bajtů paměti (rozsah adres 0000h až FFFFh). Pod CP/M bylo prvních 256 bajtů této paměti, od 0000h do 00FFh, vyhrazeno pro systémové použití nulovou stránkou a jakýkoli uživatelský program musel být načten přesně v 0100h, aby mohl být spuštěn. Soubory COM tomuto modelu dokonale vyhovují. Před zavedením MP/M a souběžného CP/M neexistovala možnost spouštět více než jeden program nebo příkaz najednou: byl spuštěn program načtený v 0100 h a žádný jiný.

Přestože je formát souboru v DOS a CP/M stejný, soubory .COM pro oba operační systémy nejsou kompatibilní; Soubory DOS COM obsahují instrukce x86 a možná i systémová volání DOS , zatímco soubory CP/M COM obsahují pokyny 8080 a systémová volání CP/M (programy omezené na určité počítače mohou také obsahovat další pokyny pro 8085 nebo Z80 ).

Soubory .COM v systému DOS nastavují všechny registry segmentů x86 na stejnou hodnotu a registr SP (ukazatel zásobníku) na FFFCh nebo FFFEh, takže zásobník začíná na samém vrcholu segmentu paměti a odtud pracuje dolů.

V původním DOS 1.x API , které bylo derivátem CP/M API, bylo ukončení souboru .COM provedeno voláním funkce INT 20h (Terminate Program) nebo INT 21h Function 0, která sloužila stejný účel a programátor také musel zajistit, aby registry kódových a datových segmentů obsahovaly stejnou hodnotu při ukončení programu, aby se zabránilo potenciálnímu zhroucení systému. Ačkoli to bylo možné použít v jakékoli verzi DOS, společnost Microsoft doporučila použití funkce INT 21h Function 4Ch pro ukončení programu od DOS 2.x a dále, což nevyžadovalo, aby byl segment dat a kódu nastaven na stejnou hodnotu.

Je možné vytvořit soubor .COM, který poběží pod oběma operačními systémy ve formě tlustého binárního souboru . Na úrovni instrukcí neexistuje žádná skutečná kompatibilita; instrukce ve vstupním bodě jsou vybrány tak, aby měly stejnou funkčnost, ale různé v obou operačních systémech, a aby provádění programu přeskočilo do sekce pro používaný operační systém. V zásadě se jedná o dva různé programy se stejnou funkčností v jednom souboru, kterým předchází výběr kódu pro použití.

Pokud je pod CP/M 3 první bajt souboru COM C9h, existuje 256bajtové záhlaví; protože C9h odpovídá instrukci 8080RET , znamená to, že soubor COM se okamžitě ukončí, pokud je spuštěn na dřívější verzi CP/M, která toto rozšíření nepodporuje. (Vzhledem k tomu, že instrukční sady 8085 a Z80 jsou nadmnožiny setu 8080 instrukční, to funguje u všech tří procesorů.) C9h je neplatný operační kód na 8088/8086, a to způsobí, že procesor generované přerušení 6 výjimku V86 režim na čipech 386 a novějších x86. Vzhledem k tomu, C9h je opcode návrh na vstup již od 80188 / 80186 , a proto není použit jako první instrukce v platném programu spustitelný nakladač v některých verzích DOS odmítá soubory typu COM, které začínají C9h, aby se zabránilo zhroucení.

Soubory mohou mít názvy končící na .COM, ale nemusí být v jednoduchém formátu popsaném výše; toto je indikováno magickým číslem na začátku souboru. Například soubor COMMAND.COM v DR DOS 6.0 je ve skutečnosti ve spustitelném formátu DOS , označeném prvními dvěma bajty je MZ (4Dh 5Ah), iniciály Marka Zbikowski .

Velké programy

V systému DOS neexistuje pro soubory COM žádná správa paměti zaváděcím nebo prováděcím prostředím. Veškerá paměť je jednoduše dostupná pro soubor COM. Po provedení se znovu načte příkazový shell operačního systému COMMAND.COM . To ponechává možnosti, že soubor COM může být buď velmi jednoduchý, s použitím jednoho segmentu , nebo libovolně složitý, poskytující vlastní systém správy paměti. Příkladem složitého programu je COMMAND.COM, prostředí DOS, které poskytovalo zavaděč pro načítání jiných programů COM nebo EXE . V systému .COM lze načíst a spustit větší programy (až do dostupné velikosti paměti), ale zavaděč systému předpokládá, že veškerý kód a data jsou v prvním segmentu, a je na programu .COM, aby poskytl jakékoli další organizace. Programy větší než dostupná paměť nebo velké datové segmenty lze zpracovat dynamickým propojováním , pokud je v programu .COM obsažen potřebný kód. Výhodou použití formátu .COM spíše než .EXE je, že binární obraz je obvykle menší a programovatelnější pomocí assembleru . Jakmile byly k dispozici kompilátory a linkery s dostatečným výkonem, již nebylo výhodné používat formát .COM pro složité programy.

Podpora platformy

Formát je stále spustitelný na mnoha moderních platformách založených na Windows NT , ale je spuštěn v subsystému emulujícím MS -DOS, NTVDM , který není k dispozici v 64bitových variantách. Soubory COM lze spouštět také na emulátorech DOS, jako je DOSBox , na jakékoli platformě podporované těmito emulátory.

Použijte z důvodů kompatibility

Operační systémy založené na Windows NT používají příponu .com pro malý počet příkazů přenesených ze dnů MS -DOS, přestože jsou ve skutečnosti v současné době implementovány jako soubory .exe . Operační systém rozpozná záhlaví souboru .exe a provede je správně i přes jejich technicky nesprávnou příponu .com. (Ve skutečnosti lze jakýkoli soubor s příponou .exe přejmenovat na .com a přesto se spouštět správně.) Použití původních přípon .com pro tyto příkazy zajišťuje kompatibilitu se staršími dávkovými soubory DOS, které na ně mohou odkazovat s jejich původními názvy souborů. Tyto příkazy jsou DISKCOMP, DISKCOPY, FORMAT, MODE, MOREa TREE.

Předvolba provedení

V systému DOS, pokud adresář obsahuje jak soubor COM, tak soubor EXE se stejným názvem, není -li zadána žádná přípona, je pro spuštění přednostně vybrán soubor COM. Pokud například adresář v systémové cestě obsahuje dva soubory s názvem foo.coma foo.exe, spustí se následující foo.com:

C:\>foo

Uživatel, který chce spustit, foo.exemůže explicitně použít úplný název souboru:

C:\>foo.exe

S využitím tohoto výchozího chování používali autoři virů a další škodliví programátoři názvy podobné notepad.comsvým výtvorům a doufali, že pokud je umístěn ve stejném adresáři jako odpovídající soubor EXE, může příkazový nebo dávkový soubor omylem spustit jejich program místo textový editor notepad.exe. Tyto soubory .com mohou ve skutečnosti obsahovat spustitelný soubor ve formátu .exe.

V systému Windows NT a derivátech ( Windows 2000 , Windows XP , Windows Vista a Windows 7 ) se proměnná PATHEXT používá k přepsání pořadí předvoleb (a přijatelných přípon) pro volání souborů bez zadání přípony z příkazového řádku. Výchozí hodnota stále umisťuje .comsoubory před .exesoubory. To se velmi podobá funkci, kterou jsme dříve našli v řadě rozšířených procesorů příkazové řádky JP Software 4DOS , 4OS2 a 4NT .

Škodlivé používání rozšíření .com

Někteří autoři počítačových virů doufali, že využijí pravděpodobné nedostatečné znalosti moderních počítačových uživatelů o příponě souboru .com a přidruženém binárním formátu spolu s jejich pravděpodobnější obeznámeností s názvem internetové domény .com . E-maily byly odeslány s názvy příloh podobnými „www.example.com“. Neznalí uživatelé systému Microsoft Windows, kteří kliknou na takovou přílohu, by očekávali, že začnou procházet web s názvem http://www.example.com/, ale místo toho by spustili připojený soubor binárních příkazů pojmenovaný www.example, což by mu poskytlo plné oprávnění dělat na svém počítači, cokoli jeho autor měl na mysli.

Na samotném formátu souboru COM není nic škodlivého; jedná se o využití zdrojů náhodná jméno srážce .com com mand souborů a .com com mercial webové stránky.

Viz také

Reference

externí odkazy