In che modo questa persona ha codificato "Hello World" con Microsoft Paint?


99

L'ho appena visto negli ultimi giorni e non riesco a capire come funziona. Il video di cui parlo è qui :

È la risposta più votata da questa domanda di Stack Overflow: Perché questo programma è stato rifiutato da tre compilatori?

In che modo questa bitmap può mostrare un programma C ++ per "Hello World"?


7
i valori bitmap sono solo bit in un file. Se interpreti quei bit come ASCii, mostrerà qualcosa. Un'attenta selezione dei bit e puoi scrivere una lettera, o la costituzione, in una bitmap (modulo l'intestazione del file). Cosa non bisogna capire? È solo una cosa sciocca, come il peggior editor del mondo.
Thomas M. DuBuisson

3
Per quel che vale, non v'è almeno un linguaggio di programmazione in cui il codice sorgente è espresso come un'immagine. Non che questa particolare immagine possa funzionare con essa, ma ...
Michael Madsen

1
Il filo che stavi cercando stackoverflow.com/questions/5508110/...
phwd

6
Quella GIF animata sta uccidendo il mio browser (IE e Chrome): ci sono modi migliori per pubblicare video rispetto a una GIF animata.
MusiGenesis

3
@MusiGenesis Oh, come ricordo i problemi del 2011.
Charles Clayton

Risposte:


56

Un'immagine BMP (DIB) è composta da un'intestazione seguita da dati di 1 colore non compressi (per immagini a 24 bpp sono 3 byte per pixel, memorizzati in ordine di riga inverso e con passo di riga di 4 byte).

I byte per i dati di colore sono usati per rappresentare i colori (cioè nessuno di essi è "obbligatorio" dal formato di file 2 , provengono tutti dal colore di ogni pixel), e c'è una perfetta corrispondenza 1: 1 tra i colori dei pixel e i byte scritti nel file; quindi, usando colori scelti perfettamente, puoi effettivamente scrivere tutto ciò che vuoi nel file (ad eccezione dell'intestazione).

Quando apri il file generato nel blocco note, i dati del colore verranno visualizzati come testo; puoi ancora vedere chiaramente dall'intestazione (la parte BMdall'inizio del testo), che è richiesta dal formato del file.

Secondo me questo video è stato fatto in questo modo: prima l'autore ha calcolato la dimensione necessaria per la bitmap, e ha creato un file DIB della dimensione corretta riempito con un colore che si espande in un semplice pattern (es. Tutti i byte 65 => 'A'); quindi sostituito tale modello con il codice "payload", come mostrato nel video.

Si noti tuttavia che non è impossibile creare a mano il tutto con il blocco note: con la finestra di dialogo di selezione dei colori, una tabella ASCII e una conoscenza di base del formato DIB può essere fatto, ma sarebbe molto più lento e soggetto a errori.

Maggiori informazioni sul formato DIB


  1. Ci sono DIB compressi con RLE, ma in questo caso vengono utilizzate bitmap non compresse (e comunque sono usate molto raramente).
  2. Con l'eccezione del passo, ciò è stato evitato utilizzando righe multiple di 4 byte.

19

Presumo che ti stia riferendo alla risposta a una delle domande del pesce d'aprile.

La mia ipotesi è che ogni pixel abbia una rappresentazione binaria per esso. E che ogni carattere nel codice sorgente ha una rappresentazione binaria per esso.

La persona che ha creato il programma deve aver elaborato il colore per ogni pixel che avrebbe una rappresentazione binaria che corrisponderebbe a ciascun carattere.


7
+1: alla fine, i byte sono byte. Blocco note li interpreta come caratteri di testo mentre mspaint li interpreta come pixel in una bitmap. Il testo "spazzatura" iniziale è costituito da informazioni aggiuntive sull'immagine (possibilmente cose come risoluzione, versione, ecc.).
Chris Schmich

6

Da un punto di vista teorico dell'informatica, sarebbe interessante chiedersi se ogni programma può essere scritto in modo tale che, visto come una bitmap, si vedesse effettivamente il codice sorgente che fa la stessa cosa. Se sei seriamente interessato a tali risultati, leggi ad esempio il teorema del punto fisso di Kleene .

Il programma come immagine può anche essere visto come una forma di offuscamento del codice. Non che fosse particolarmente pratico ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.