WinVer

Desde los inicios de Windows, recordaba lo compacto que era el programa WinVer. En efecto, al coger todo el código necesario del nucleo de Windows, la funcionalidad que realmente incorporaba el ejecutable era poco más que invocar a un par de funciones.

Sorprendemente en Vista x86, su peso llega a los 8.704 bytes. Quizás hoy día 8 Kb no parezcan demasiado, pero teniendo en cuenta que básicamente sólo se invoca a ShellAboutA, es desmesurado.

Mi versión, se conforma con 1.024 bytes, la mayoría por la alineación requerida del ejecutable, aunque podrían ser algunos menos. Esto hace un total más de 8 veces inferior.

El programa en cuestión debería funcionar en Windows 9x y posteriores; y NT 3.5 y posteriores, es decir, todos los Windows de 32 y 64 bits, a excepción del NT 3.1, cubriendo todos aquellos aparecidos a partir de 1994.

El truco está en haberlo escrito enteramente en ensamblador, lo que permite ahorrar la sobrecarga generada por la RTL del lenguaje que fuera. Además especificamente se han omitido recursos no imprescindibles (iconos, manifiesto, …).

El código (Microsoft Macro Assembler -MASM- 9.0) es como podéis imaginar realmente sencillo:

.386
.model flat, stdcall
option casemap:none

include windows.inc
include kernel32.inc
include shell32.inc

includelib kernel32.lib
includelib shell32.lib

.code

acWindows db "Windows", 0

start:
xor eax, eax
invoke ShellAbout, eax, addr acWindows, eax, eax
invoke ExitProcess, eax
end start

Si estáis interesados, podéis descargar el fuente y sus binarios directamente aquí.

WinVer

Deja un comentario