Comment cette personne a-t-elle codé «Hello World» avec Microsoft Paint?

Je viens de voir cela au cours des derniers jours et je n’arrive pas à comprendre comment cela fonctionne. La vidéo dont je parle est ici :

C’est la réponse la mieux notée de cette question de Stack Overflow: Pourquoi ce programme a-t-il été rejeté par trois compilateurs?

Comment ce bitmap peut-il afficher un programme C ++ pour “Hello World”?

Une image BMP (DIB) est composée d’un en-tête suivi de données de couleur 1 non compressées (pour 24 images par seconde, il s’agit de 3 octets par pixel, stockées dans l’ordre inverse des lignes et avec une foulée de 4 octets).

Les octets pour les données de couleur sont utilisés pour représenter les couleurs (c’est-à-dire qu’aucun d’entre eux n’est “mandaté” par le format de fichier 2 , ils proviennent tous de la couleur de chaque pixel). dans le fichier; Ainsi, en utilisant des couleurs parfaitement choisies, vous pouvez réellement écrire tout ce que vous voulez dans le fichier (à l’exception de l’en-tête).

Lorsque vous ouvrez le fichier généré dans le Bloc-notes, les données de couleur sont affichées sous forme de texte. vous pouvez toujours voir clairement depuis l’en-tête (la partie de BM au début du texte), qui est obligatoire pour le format de fichier.

A mon avis, cette vidéo a été réalisée de cette manière: tout d’abord, l’auteur a calculé la taille requirejse pour le bitmap et créé un fichier DIB de la taille correcte, rempli d’une couleur qui se transforme en un simple motif (tous les octets 65 => 'A' ); puis remplacé ce modèle avec le code “payload”, comme indiqué dans la vidéo.

Notez cependant qu’il n’est pas impossible de fabriquer le tout avec notepad – avec la boîte de dialog de sélection de couleur, une table ASCII et une connaissance de base du format DIB, cela peut être beaucoup plus lent et sujet aux erreurs.

Plus d’infos sur le format DIB


  1. Il existe des DIB compressés RLE, mais dans ce cas des bitmaps non compressés sont utilisés (et ils sont très rarement utilisés).
  2. À l’exception de la foulée, cela a été évité en utilisant des lignes multiples de 4 octets.

Je suppose que vous faites référence à la réponse à l’une des questions du poisson d’avril.

Je suppose que chaque pixel a une représentation binary. Et que chaque caractère du code source ait une représentation binary.

La personne qui a créé le programme doit avoir déterminé la couleur de chaque pixel qui aurait une représentation binary correspondant à chaque caractère.

D’un sharepoint vue théorique en informatique, il serait intéressant de se demander si chaque programme peut être écrit de telle manière que, vu en tant que bitmap, vous avez réellement vu le code source qui fait la même chose. Si vous êtes sérieusement intéressé par de tels résultats, lisez par exemple le théorème du point fixe de Kleene .

Program-as-an-image peut également être considéré comme une forme de masquage de code. Non que ce soit particulièrement pratique …