¿Es posible ejecutar un archivo .exe de más de 4 GB?

10

Creé un archivo SFX> 4GB (los archivos autoextraíbles) en 7-Zip, sin previo aviso. Cuando el destinatario intentó extraerlo, obtuvo esta cinta de error:

ingrese la descripción de la imagen aquí

Descubrí que es porque .exees más grande que 4GB. Después de instalar 7-Zip, pudo extraer el archivo, pero me pregunto ¿por qué Windows no puede ejecutar un archivo ejecutable? ¿Y es posible mediante alguna anulación?

Louis Waweru
fuente
2
Normalmente no puede en sistemas de 32 bits
Ramhound
1
Para ampliar lo que dijo Ramhound, es posible que el autoextractor 7-Zip se almacene en la RAM, que para sistemas de 32 bits tiene un tamaño de acceso máximo de 4 GB. También explicaría por qué 7-Zip pudo extraer, ya que el archivo no necesitaba estar completamente almacenado en la memoria (aunque eso dependería de si el archivo era sólido o tenía otras configuraciones de compresión).
Doktoro Reichard
Sí, pensé que ese era el problema al principio, pero está usando Win64 con 16 GB de RAM. Lo estoy usando también con 8GB.
Louis Waweru el

Respuestas:

10

Windows no admitirá ejecutables de más de 4 GB de tamaño según este hilo:

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

El comentarista "Igor Pavlov" es el creador y el mantenedor de 7-Zip. Si bien ese comentario es algo breve, hay otros hilos en los foros de sourceforge que repiten el mismo consejo. No creo que ejecutar el ejecutable en un sistema operativo de 64 bits haga ninguna diferencia, ya que esto podría ser una limitación del tamaño de un archivo ejecutable de Windows, es decir, una limitación del formato de Windows PE en sí.

Este artículo sobre la escritura de programas de 64 bits sugiere que:

La "imagen" ejecutable (el código / datos cargados en la memoria) de un archivo Win64 tiene un tamaño limitado a 2 GB. Esto se debe a que los procesadores AMD64 / EM64T usan el direccionamiento relativo para la mayoría de las instrucciones, y la dirección relativa se mantiene en una palabra clave. Un dword solo es capaz de mantener un valor relativo de ± 2GB.

Presumiblemente, Igor ha ideado una forma de usar ± 2GB para lograr 4GB.

sahmeepee
fuente
1
Un dword firmado tiene un rango de 2,147,483,647. Un dword sin firmar tiene un rango de 4,294,967,295, y ese número es la fuente de la mayoría de las limitaciones en Windows y en sistemas de 32 bits fuera de él.
Hashim
@Hashim es absolutamente correcto, el límite es 4GiB - 1B = 2^32 - 1 bytes = 4,294,967,295 bytes. Pude verificarlo en Windows 10 de 64 bits creando archivos autoextraíbles con WinRAR en forma de archivos .EXE. Un ejecutable con un tamaño de 4GiBno se iniciará, pero 4GiB - 1Bfunciona bien.
Robin Hartmann
0

Tener un ejecutable autoextraíble de más de 4 GB está en el extremo, ya que hay un límite de 4 gb en los archivos ejecutables de Windows como * .exe, * .dll, etc. para PE32 y una versión de 64 bits PE32 + (se aplica a 32 bits y 64 -bit versiones).

En segundo lugar, el archivo ejecutable se carga completamente en la RAM antes de la ejecución e incluso si usted no está limitado por Windows (pero usted sí lo está), el hardware, que es la cantidad física de RAM en ese caso, podría limitarlo fácilmente.

Nikola Dimitrijevic
fuente
Como sé, hay formas de decirle a Windows que cargue solo una sección específica del archivo exe, no todo el archivo con recursos. Creo que muchos programas grandes de DOS también usan este truco ya que el límite en x86 de 16 bits es demasiado pequeño
phuclv