Arquivo COM - COM file

COM
Extensão de nome de arquivo
.COM
Tipo de mídia da Internet aplicação / x-dosexec
Tipo de formato Executável
Alargado a Executável DOS MZ
Vários arquivos COM no IBM PC DOS 1.0

Um arquivo COM é um tipo de arquivo executável simples . Nos sistemas operacionais VAX da Digital Equipment Corporation (DEC) da década de 1970, era usado como uma extensão de nome de arquivo para arquivos de texto contendo comandos a serem emitidos para o sistema operacional (semelhante a um arquivo em lote ). Com a introdução da Digital Research 's CP / M (a microcomputador sistema operacional), o tipo de arquivos comumente associados com extensão COM alterado para o de arquivos executáveis. Essa convenção foi posteriormente transportada para o DOS . Mesmo quando complementados pelo formato de arquivo EXE mais geral para executáveis, os arquivos COM compactos permaneceram viáveis ​​e freqüentemente usados ​​no DOS. .COM

A .COMextensão do nome do arquivo não tem relação com o nome de domínio da Internet de nível superior .com (para "comercial"). No entanto, essa semelhança de nome foi explorada por criadores de malware .

Formato binário DOS

O formato COM é o formato binário executável original usado no CP / M (incluindo SCP e MSX-DOS ), bem como no DOS . É muito simples; não tem cabeçalho (com exceção dos arquivos CP / M 3) e não contém metadados padrão , apenas código e dados. Essa simplicidade tem um preço: o binário tem um tamanho máximo de 65.280 (FF00 h ) bytes (256 bytes menores que 64 KB) e armazena todo o seu código e dados em um segmento .

Por não possuir informação de realocação , é carregado pelo sistema operacional em um endereço pré-definido, no deslocamento 0100h imediatamente após o PSP , onde é executado (daí a limitação do tamanho do executável): o ponto de entrada é fixado em 0100h. Isso não era um problema em máquinas de 8 bits, pois elas podem lidar com 64k de memória máxima, mas as máquinas de 16 bits têm um espaço de endereço muito maior, razão pela qual o formato caiu em desuso.

Na arquitetura de CPU Intel 8080 , apenas 65.536 bytes de memória podiam ser endereçados (intervalo de endereço 0000h a FFFFh). No CP / M, os primeiros 256 bytes desta memória, de 0000h a 00FFh foram reservados para uso do sistema pela página zero , e qualquer programa do usuário teve que ser carregado exatamente às 0100h para ser executado. Os arquivos COM se encaixam perfeitamente neste modelo. Antes da introdução do MP / M e do CP / M Simultâneo , não existia a possibilidade de executar mais do que um programa ou comando de cada vez: rodava-se o programa carregado à 0100h, e nenhum outro.

Embora o formato do arquivo seja o mesmo no DOS e no CP / M, os arquivos .COM para os dois sistemas operacionais não são compatíveis; Os arquivos DOS COM contêm instruções x86 e possivelmente chamadas de sistema DOS , enquanto os arquivos CP / M COM contêm instruções 8080 e chamadas de sistema CP / M (programas restritos a certas máquinas também podem conter instruções adicionais para 8085 ou Z80 ).

Os arquivos .COM no DOS configuram todos os registradores de segmento x86 com o mesmo valor e o registrador SP (ponteiro da pilha) para FFFCh ou FFFEh, portanto, a pilha começa no topo do segmento de memória e desce a partir daí.

Na API DOS 1.x original , que era um derivado da API CP / M, o encerramento do programa de um arquivo .COM seria executado chamando a função INT 20h (Terminar Programa) ou então a Função INT 21h 0, que atendia ao mesmo propósito, e o programador também tinha que garantir que os registradores de segmento de código e dados contivessem o mesmo valor no encerramento do programa para evitar uma falha potencial do sistema. Embora isso pudesse ser usado em qualquer versão do DOS, a Microsoft recomendou o uso da Função 4Ch do INT 21h para o encerramento do programa do DOS 2.x em diante, que não exigia que os dados e o segmento de código fossem definidos com o mesmo valor.

É possível fazer um arquivo .COM ser executado em ambos os sistemas operacionais na forma de um binário gordo . Não há compatibilidade verdadeira no nível de instrução; as instruções no ponto de entrada são escolhidas para serem iguais em funcionalidade, mas diferentes em ambos os sistemas operacionais, e fazem a execução do programa saltar para a seção do sistema operacional em uso. São basicamente dois programas diferentes com a mesma funcionalidade em um único arquivo, precedidos por um código que seleciona aquele a ser usado.

No CP / M 3, se o primeiro byte de um arquivo COM for C9h, haverá um cabeçalho de 256 bytes; uma vez que C9h corresponde à instrução 8080RET , isso significa que o arquivo COM será encerrado imediatamente se executado em uma versão anterior do CP / M que não suporta esta extensão. (Como os conjuntos de instruções do 8085 e Z80 são superconjuntos do conjunto de instruções 8080, isso funciona em todos os três processadores.) C9h é um opcode inválido no 8088/8086 e causará uma exceção de interrupção 6 gerada pelo processador em v86 modo nos chips 386 e x86 posteriores. Desde C9h é o código de operação de licença desde o 80188 / 80186 e, portanto, não é usado como a primeira instrução em um programa válido, o carregador executável em algumas versões do DOS rejeita arquivos COM que começam com C9h, evitando um acidente.

Os arquivos podem ter nomes que terminam em .COM, mas não podem estar no formato simples descrito acima; isso é indicado por um número mágico no início do arquivo. Por exemplo, o arquivo COMMAND.COM no DR DOS 6.0 está, na verdade, no formato executável DOS , indicado pelos primeiros dois bytes sendo MZ (4Dh 5Ah), as iniciais de Mark Zbikowski .

Programas grandes

No DOS, não há gerenciamento de memória fornecido para arquivos COM pelo carregador ou ambiente de execução. Toda a memória está simplesmente disponível para o arquivo COM. Após a execução, o shell de comando do sistema operacional, COMMAND.COM , é recarregado. Isso deixa a possibilidade de que o arquivo COM possa ser muito simples, usando um único segmento , ou arbitrariamente complexo, fornecendo seu próprio sistema de gerenciamento de memória. Um exemplo de programa complexo é COMMAND.COM, o shell do DOS, que fornecia um carregador para carregar outros programas COM ou EXE . No sistema .COM, programas maiores (até o tamanho de memória disponível) podem ser carregados e executados, mas o carregador do sistema assume que todos os códigos e dados estão no primeiro segmento e cabe ao programa .COM fornecer qualquer organização adicional. Programas maiores que a memória disponível, ou grandes segmentos de dados , podem ser manipulados por vínculo dinâmico , se o código necessário estiver incluído no programa .COM. A vantagem de usar o formato .COM em vez do formato .EXE é que a imagem binária geralmente é menor e mais fácil de programar usando um montador . Depois que compiladores e linkers com poder suficiente se tornaram disponíveis, não era mais vantajoso usar o formato .COM para programas complexos.

Suporte de plataforma

O formato ainda é executável em muitas plataformas modernas baseadas no Windows NT , mas é executado em um subsistema de simulação do MS-DOS , NTVDM , que não está presente nas variantes de 64 bits . Os arquivos COM podem ser executados também em emuladores DOS, como o DOSBox , em qualquer plataforma suportada por esses emuladores.

Use por razões de compatibilidade

Os sistemas operacionais baseados no Windows NT usam a extensão .com para um pequeno número de comandos transportados desde os dias do MS-DOS, embora eles sejam atualmente implementados como arquivos .exe . O sistema operacional reconhecerá o cabeçalho do arquivo .exe e os executará corretamente, apesar de sua extensão .com tecnicamente incorreta. (Na verdade, qualquer arquivo .exe pode ser renomeado para .com e ainda assim ser executado corretamente.) O uso das extensões .com originais para esses comandos garante a compatibilidade com arquivos de lote DOS mais antigos que podem se referir a eles com seus nomes de arquivo originais completos. Estes comandos são DISKCOMP, DISKCOPY, FORMAT, MODE, MOREe TREE.

Preferência de execução

No DOS, se um diretório contém um arquivo COM e um arquivo EXE com o mesmo nome, quando nenhuma extensão é especificada, o arquivo COM é preferencialmente selecionado para execução. Por exemplo, se um diretório no caminho do sistema contiver dois arquivos denominados foo.come foo.exe, o seguinte será executado foo.com:

C:\>foo

Um usuário que deseja executar foo.exepode usar explicitamente o nome do arquivo completo:

C:\>foo.exe

Aproveitando esse comportamento padrão, os criadores de vírus e outros programadores maliciosos usaram nomes semelhantes notepad.compara suas criações, na esperança de que, se colocado no mesmo diretório do arquivo EXE correspondente, um comando ou arquivo em lote possa acidentalmente acionar seu programa em vez do editor de texto notepad.exe. Novamente, esses arquivos .com podem na verdade conter um executável no formato .exe.

No Windows NT e derivados ( Windows 2000 , Windows XP , Windows Vista e Windows 7 ), a variável PATHEXT é usada para substituir a ordem de preferência (e extensões aceitáveis) para chamar arquivos sem especificar a extensão na linha de comando. O valor padrão ainda coloca os .comarquivos antes dos .exearquivos. Isso se assemelha bastante a um recurso encontrado anteriormente na linha de processadores de linha de comando estendidos 4DOS , 4OS2 e 4NT da JP Software .

Uso malicioso da extensão .com

Alguns criadores de vírus de computador esperam tirar proveito da provável falta de conhecimento dos usuários de computador modernos sobre a extensão de arquivo .com e o formato binário associado, junto com sua provável familiaridade com o nome de domínio da Internet .com . Os e-mails foram enviados com nomes de anexo semelhantes a "www.example.com". Usuários desavisados ​​do Microsoft Windows que clicarem em tal anexo esperariam começar a navegar em um site chamado http://www.example.com/, mas em vez disso executariam o arquivo de comando binário anexado chamado www.example, dando-lhe permissão total para fazer em sua máquina tudo o que seu autor tinha em mente.

Não há nada de malicioso no próprio formato de arquivo COM; esta é uma exploração da colisão nome coincidência entre .com com mand arquivos e .com com Mercial web sites.

Veja também

Referências

links externos