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

8

Eu 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:

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

    
por Louis 30.10.2013 / 23:12

2 respostas

9

O Windows não suporta arquivos executáveis com tamanho superior a 4 GB de acordo com este segmento:

link

O comentarista "Igor Pavlov" é o criador e mantenedor do 7-Zip. Embora esse comentário seja um tanto curto, há outros tópicos nos fóruns do sourceforge que repetem o mesmo conselho. Eu não acredito que executar o executável em um sistema operacional de 64 bits faria qualquer diferença, pois isso pode ser uma limitação do tamanho de um arquivo executável do Windows, ou seja, uma limitação do Windows PE format propriamente dito.

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

The executable "image" (the code/data as loaded in memory) of a Win64 file is limited in size to 2GB. This is because the AMD64/EM64T processors use relative addressing for most instructions, and the relative address is kept in a dword. A dword is only capable of holding a relative value of ±2GB.

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

    
por 31.10.2013 / 00:49
0

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

Em segundo lugar, o arquivo executável é carregado completamente na RAM antes da execução e, mesmo se você não estiver limitado pelo Windows (mas estiver), poderá ser facilmente limitado pelo hardware, que é a quantidade física de RAM em tal caso. / p>     
por 31.10.2013 / 01:15