Hace tiempo puse un programa que se produce a sí mismo. Ahora ví un archivo .gz que, al descomprimirlo, produce el mismo archivo. El dump hexadecimal es:
0000000 8b1f 0008 0000 0000 0300 0f00 f000 1fff 0000010 088b 0000 0000 0000 0003 000f fff0 0000 0000020 ff00 00ff 0000 ffff 7182 5ca1 0000 001e 0000030 ffe1 0000 ff00 00ff 0000 ffff 7182 5ca1 0000040 0000 001e ffe1 0000 ff00 00ff 0000 ffff 0000050 0000 ff00 00ff 0000 ffff 0000 ff00 00ff 0000060 0000 ffff 26c2 6086 0001 0014 ffeb 0000 0000070 ff00 00ff 0000 ffff 26c2 6086 0001 0014 0000080 ffeb 26c2 6086 0001 0014 ffeb 2099 8d35 0000090 2888 3231 3433 b302 2cc0 0000 0014 ffeb 00000a0 b302 2cc0 0000 0014 ffeb 8842 c421 0000 00000b0 0000 ffff 0003 4a43 214d 00d2 0000 8842 00000c0 c421 0000 0000 ffff 0003 4a43 214d 00d2 00000d0 0000
La explicación de cómo hacer esto está en gzip decompression quine aunque el archivo al que enlaza ya no existe. El que puse arriba lo encontré en Any zip or tgz that decompress to itself? (http://www.maximumcompression.com/selfgz.gz). Funciona correctamente con gunzip de freebsd; como la descompresión tiene que ser función bien definida seguramente debe funcionar con cualquier decompresor válido. Lo que no he conseguido es hacerlo funcionar al revés, usando gzip para comprimir el archivo a sí mismo. Naturalmente emplear un nivel diferente de compresión va a crear un archivo diferente; y quiero un nivel de compresión que no comprime, que no está en gzip. Tendría que encontrar los parámetros exactos y escribir el algoritmo directamente.
Relacionados:
No user responded in this post
Leave A Reply
Nota: La moderación de comentarios está activada; no hace falta volver a enviar los comentarios.