[Lazarus-es] Tamaño ejecutables

JoshyFun joshyfun en gmail.com
Mar Jun 30 21:57:22 CEST 2009


Hello Edwin,

Tuesday, June 30, 2009, 9:02:41 PM, you wrote:

EQ> Alguien puede explicar que hacen esas aplicaciones de UPX y
EQ> Strip porque la verdad me estan asustando. Alguein podria postear
EQ> algun manual o algo por el estilo de como reducir los ejecutables
EQ> porque veo que ya se ha hablado mucho de eso aca

UPX es un compresor especializado en .EXE ya que este tipo de archivos
tiene caractrísticas propias como por ejemplo que algunas partes no se
deben de comprimir, otras tienen comportamientos previsibles (como
tablas de offsets), etc. Lo que hace básicamente es comprimir "a su
estilo" el EXE y añadirlo a un "stub" o cabecera de ejecución. Cuando
lanzas el .EXE sed ejecuta el "stub" que coje el resto del EXE (que es
lo que está comprimido) lo descomprime en memoria y arranca el
programa normalmente. Es detectado como un virus por algunos antivirus
debido a que usa las mísmas técnicas que muchos virus que es cambiar
el "Entry point" de los ejecutables (normal, por culpa del "stub") y
también por que algunos virus han usado UPX para comprimir sus
maliciosos códigos. Es totalmente seguro siempre que la fuente sea la
del autor como todo.

Un ejecutable que vaya a lanzarse en múltiples copias a la vez no debe
de ser comprimido con UPX (ni con ningún otro compresor) aunque esta
es una cosa poco habitual salvando algunos programas de Microsoft como
el famoso "svchost.exe".

Sobre el "strip" como decía del UPX un EXE tiene varias partes,
algunas son obligatorias (son el EXE en si mismo) como el código,
tabla de relocalizaciones, recursos, etc, pero un EXE puede tener más
partes, y en el caso de FreePascal, una que usa es la parte de debug,
donde en el EXE ponen toda la información que permitirá al GDB
mostrarnos los nombres de las funciones que han sido llamadas en el
caso de un error, donde se definen los tipos de las variables, etc.
Esta información sólo es necesaria cuando hacemos un debug, por lo
tanto "strip --strip-debug" nos elimina esa sección del EXE. A parte
existen otros tipos de secciones que son prescindibles totalmente y
que las eliminas con "strip --strip-all". Por supuesto después de un
"strip-all" ese mismo EXE no podrá ser debugado de un modo aceptable,
por eso sólo se debe de usar cuando vamos a entregar el EXE final al
cliente.

-- 
Best regards,
 JoshyFun





More information about the Lazarus-es mailing list