É possível executar um arquivo maior que 4 GB .exe?


10

Criei um arquivo SFX de> 4 GB (os arquivos auto-extraíveis) no 7-Zip, sem aviso prévio. Quando o destinatário tentou extraí-lo, ele recebeu esta faixa de erro:

insira a descrição da imagem aqui

Eu achei que é porque o .exeé maior que 4GB. Depois de instalar o 7-Zip, ele conseguiu extrair o arquivo, mas estou me perguntando por que o Windows não pode executar esse executável? E é possível através de alguma substituição?


2
Você normalmente pode apenas não em sistemas de 32 bits
Ramhound

11
Para expandir o que Ramhound disse, é possível que o auto-extrator 7-Zip se armazene na RAM que, para sistemas de 32 bits, possui um tamanho máximo de acesso de 4 GB. Também explicaria por que o 7-Zip foi capaz de extrair, pois o arquivo não precisa ser totalmente armazenado na memória (embora isso dependa se o arquivo é sólido ou possui outras configurações de compactação).
Doktoro Reichard

Sim, eu pensei que esse era o problema no começo, mas ele está usando o Win64 com 16 GB de RAM. Eu também estou usando com 8GB.
Louis Waweru 31/10

Respostas:


10

O Windows não suporta executáveis ​​com tamanho superior a 4 GB, de acordo com este tópico:

http://sourceforge.net/p/sevenzip/discussion/45798/thread/337fc13e/

O comentarista "Igor Pavlov" é o criador e o mantenedor do 7-Zip. Embora esse comentário seja um pouco curto, há outros tópicos nos fóruns do sourceforge que repetem o mesmo conselho. Não acredito que a execução do executável em um sistema operacional de 64 bits faça alguma diferença, pois isso pode ser uma limitação do tamanho de um arquivo executável do Windows, ou seja, uma limitação do próprio formato do Windows PE .

Este artigo sobre como escrever programas de 64 bits sugere que:

A "imagem" executável (o código / dados carregados na memória) de um arquivo Win64 é limitada em tamanho a 2 GB. Isso ocorre porque os processadores AMD64 / EM64T usam o endereçamento relativo para a maioria das instruções e o endereço relativo é mantido em um dword. Um dword é capaz apenas de armazenar um valor relativo de ± 2 GB.

Presumivelmente, o Igor criou uma maneira de usar ± 2 GB para atingir 4 GB.


11
Um dword assinado tem um intervalo de 2.147.483.647. Um dword não assinado tem um intervalo de 4.294.967.295 e esse número é a fonte da maioria das limitações no Windows e em sistemas de 32 bits fora dele.
Hashim

@Hashim está absolutamente correto, o limite é 4GiB - 1B = 2^32 - 1 bytes = 4,294,967,295 bytes. Consegui verificá-lo no Windows 10 de 64 bits, criando arquivos de extração automática com o WinRAR na forma de arquivos .exe. Um executável com um tamanho de 4GiBnão será iniciado, mas 4GiB - 1Bfunciona bem.
Robin Hartmann

0

Ter um executável de extração automática maior que 4 GB está no lado extremo, pois há um limite de 4 GB nos arquivos executáveis ​​do Windows, como * .exe, * .dll etc. para PE32 e uma versão de 32 bits PE32 + (aplicável a 32 e 64 bits). versões de bits).

Segundo, o arquivo executável é carregado completamente na RAM antes da execução e, mesmo que você não seja limitado pelo Windows (mas você é), você pode ser facilmente limitado pelo hardware, que é a quantidade física de RAM nesse caso


Como eu sei, existem maneiras de dizer ao Windows para carregar apenas uma seção específica do arquivo exe, não o arquivo inteiro com recursos. Eu acho que muitos programas DOS grandes usar esse truque demasiado desde que o limite de 16-bit x86 é muito pequeno
phuclv
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.