¿Cómo codificó esta persona “Hola mundo” con Microsoft Paint?


99

Acabo de ver esto en los últimos días y no puedo entender cómo funciona. El video del que hablo está aquí :

Es la respuesta mejor calificada de esta pregunta de Stack Overflow: ¿Por qué este programa fue rechazado por tres compiladores?

¿Cómo puede este mapa de bits mostrar un programa C ++ para "Hello World"?


7
los valores de mapa de bits son solo bits en un archivo. Si interpreta esos bits como ASCii, mostrará algo. Selección cuidadosa de bits y puede escribir una letra, o la constitución, en un mapa de bits (módulo del encabezado del archivo). ¿Qué no es entender? Es una tontería, como el peor editor del mundo.
Thomas M. DuBuisson

3
Por si sirve de algo, no es , al menos, un lenguaje de programación en el que el código fuente se expresa como una imagen. No es que esta imagen en particular funcione con ella, pero ...
Michael Madsen


6
Ese GIF animado está matando a mi navegador (IE y Chrome); hay mejores formas de publicar videos que un GIF animado.
MusiGenesis

3
@MusiGenesis Oh, cómo recuerdo los problemas de 2011.
Charles Clayton

Respuestas:


56

Una imagen BMP (DIB) está compuesta por un encabezado seguido de datos de 1 color sin comprimir (para imágenes de 24 bpp son 3 bytes por píxel, almacenados en orden inverso de fila y con 4 bytes de paso de fila).

Los bytes para los datos de color se utilizan para representar colores (es decir, ninguno de ellos es "obligatorio" por el formato de archivo 2 , todos provienen del color de cada píxel), y hay una correspondencia perfecta 1: 1 entre los colores de los píxeles y los bytes escritos en el archivo; por lo tanto, utilizando colores perfectamente elegidos, puede escribir lo que quiera en el archivo (con la excepción del encabezado).

Cuando abre el archivo generado en el bloc de notas, los datos de color se mostrarán como texto; todavía puede ver claramente desde el encabezado (la parte desde BMel comienzo del texto), que es obligatorio por el formato de archivo.

En mi opinión, este video se hizo de esta manera: primero, el autor calculó el tamaño necesario para el mapa de bits y creó un archivo DIB del tamaño correcto relleno con un color que se expande a un patrón simple (por ejemplo, todos los bytes 65 => 'A'); luego reemplazó dicho patrón con el código de "carga útil", como se muestra en el video.

Sin embargo, tenga en cuenta que no es imposible crear todo a mano con el bloc de notas: con el cuadro de diálogo del selector de color, una tabla ASCII y un conocimiento básico del formato DIB, se puede hacer, pero sería mucho más lento y propenso a errores.

Más información sobre el formato DIB


  1. Hay DIB comprimidos RLE, pero en este caso se utilizan mapas de bits sin comprimir (y de todos modos se utilizan muy raramente).
  2. Con la excepción de la zancada, eso se evitó usando filas múltiples de 4 bytes.

19

Supongo que se refiere a la respuesta a una de las preguntas de April Fools.

Supongo que cada píxel tiene una representación binaria. Y que cada carácter en el código fuente tiene una representación binaria.

La persona que creó el programa debe haber calculado el color de cada píxel que tendría una representación binaria que correspondería a cada carácter.


7
+1: al final, los bytes son bytes. El Bloc de notas los interpreta como caracteres de texto, mientras que mspaint los interpreta como píxeles en un mapa de bits. El texto "basura" inicial es información de imagen adicional (posiblemente cosas como resolución, versión, etc.).
Chris Schmich

6

Desde un punto de vista teórico de la ciencia de la computación, sería interesante preguntar, si cada programa puede escribirse de tal manera que, visto como un mapa de bits, realmente se vea el código fuente que hace lo mismo. Si está realmente interesado en tales resultados, lea, por ejemplo, sobre el teorema del punto fijo de Kleene .

El programa como imagen también se puede ver como una forma de ofuscación de código. No es que fuera particularmente práctico ...

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.