Wie hat diese Person „Hello World“ mit Microsoft Paint codiert?
Lesezeit: 3 Minuten
Eamonn O’Brien
Ich habe das gerade in den letzten Tagen gesehen und kann nicht herausfinden, wie es funktioniert. Das Video, über das ich spreche, ist hier:
Es ist die am besten bewertete Antwort auf diese Stack Overflow-Frage: Warum wurde dieses Programm von drei Compilern abgelehnt?
Wie kann diese Bitmap ein C++-Programm für „Hello World“ darstellen?
Bitmap-Werte sind nur Bits in einer Datei. Wenn Sie diese Bits als ASCII interpretieren, wird etwas angezeigt. Sorgfältige Auswahl der Bits und Sie können einen Buchstaben oder die Verfassung in eine Bitmap schreiben (modulo den Dateikopf). Was ist nicht zu verstehen? Es ist nur eine dumme Sache, wie der schlechteste Redakteur der Welt.
– Thomas M. DuBuisson
7. April 2011 um 23:11 Uhr
Für das, was es wert ist, dort ist wenigstens eine Programmiersprache wo der Quellcode als Bild ausgedrückt wird. Nicht, dass dieses spezielle Bild damit funktionieren würde, aber …
– Michael Madson
7. April 2011 um 23:44 Uhr
Der Thread, nach dem Sie gesucht haben, ist stackoverflow.com/questions/5508110/…
– Phwd
9. April 2011 um 2:33 Uhr
Dieses animierte GIF macht meinen Browser kaputt (IE und Chrome) – es gibt bessere Möglichkeiten, Videos zu posten als ein animiertes GIF.
– MusiGenesis
10. April 2011 um 12:47 Uhr
@MusiGenesis Oh, wie ich mich an die Probleme von 2011 erinnere.
– Charles Clayton
20. November 2015 um 18:27 Uhr
Matteo Italien
Ein BMP (DIB)-Bild besteht aus einem Header gefolgt von unkomprimiert1 Farbdaten (für 24-bpp-Bilder sind es 3 Bytes pro Pixel, gespeichert in umgekehrter Zeilenreihenfolge und mit 4 Bytes Zeilenschrittweite).
Die Bytes für Farbdaten werden verwendet, um Farben darzustellen (d. h. keine davon sind durch das Dateiformat “vorgeschrieben”.2, sie stammen alle von der Farbe jedes Pixels), und es gibt eine perfekte 1:1-Entsprechung zwischen Pixelfarben und Bytes, die in die Datei geschrieben werden; Mit perfekt gewählten Farben können Sie also eigentlich alles in die Datei schreiben, was Sie wollen (mit Ausnahme des Headers).
Wenn Sie die generierte Datei im Editor öffnen, werden die Farbdaten als Text angezeigt; sieht man noch deutlich am Header (der Teil aus BM bis zum Textanfang), die durch das Dateiformat vorgegeben ist.
Meiner Meinung nach wurde dieses Video so gemacht: Zuerst hat der Autor die Größe berechnet, die für die Bitmap benötigt wird, und eine DIB-Datei der richtigen Größe erstellt, die mit einer Farbe gefüllt ist, die sich zu einem einfachen Muster erweitert (z. B. alle Bytes 65 => 'A'); ersetzte dann dieses Muster durch den “Payload”-Code, wie im Video gezeigt.
Beachten Sie jedoch, dass es nicht unmöglich ist, das Ganze mit Notepad zu erstellen – mit dem Farbauswahldialog, einer ASCII-Tabelle und Grundkenntnissen des DIB-Formats ist dies zwar möglich, aber viel langsamer und fehleranfälliger.
Es gibt RLE-komprimierte DIBs, aber in diesem Fall werden unkomprimierte Bitmaps verwendet (und sie werden ohnehin sehr selten verwendet).
Mit Ausnahme des Schritts wurde dies vermieden, indem Zeilen mit Vielfachen von 4 Bytes verwendet wurden.
Ich nehme an, Sie beziehen sich auf die Antwort auf eine der Aprilscherzfragen.
Meine Vermutung ist, dass jedes Pixel eine binäre Darstellung dafür hat. Und dass jedes Zeichen im Quellcode eine binäre Darstellung dafür hat.
Die Person, die das Programm erstellt hat, muss die Farbe für jedes Pixel ausgearbeitet haben, das eine binäre Darstellung hätte, die jedem Zeichen entspricht.
+1: Am Ende sind Bytes Bytes. Notepad interpretiert sie als Textzeichen, während mspaint sie als Pixel in einer Bitmap interpretiert. Der führende “Junk”-Text sind zusätzliche Bildinformationen (möglicherweise Dinge wie Auflösung, Version usw.).
– Chris Schmich
7. April 2011 um 23:12 Uhr
Aus Sicht der theoretischen Informatik wäre es interessant zu fragen, ob jedes Programm so geschrieben werden kann, dass man als Bitmap betrachtet tatsächlich den Quellcode sieht, der dasselbe tut. Wenn Sie ernsthaft an solchen Ergebnissen interessiert sind, lesen Sie zB über die Kleenes Fixpunktsatz.
Program-as-an-Image kann auch als eine Form der Code-Verschleierung angesehen werden. Nicht, dass es besonders praktisch wäre…
14210900cookie-checkWie hat diese Person „Hello World“ mit Microsoft Paint codiert?yes
Bitmap-Werte sind nur Bits in einer Datei. Wenn Sie diese Bits als ASCII interpretieren, wird etwas angezeigt. Sorgfältige Auswahl der Bits und Sie können einen Buchstaben oder die Verfassung in eine Bitmap schreiben (modulo den Dateikopf). Was ist nicht zu verstehen? Es ist nur eine dumme Sache, wie der schlechteste Redakteur der Welt.
– Thomas M. DuBuisson
7. April 2011 um 23:11 Uhr
Für das, was es wert ist, dort ist wenigstens eine Programmiersprache wo der Quellcode als Bild ausgedrückt wird. Nicht, dass dieses spezielle Bild damit funktionieren würde, aber …
– Michael Madson
7. April 2011 um 23:44 Uhr
Der Thread, nach dem Sie gesucht haben, ist stackoverflow.com/questions/5508110/…
– Phwd
9. April 2011 um 2:33 Uhr
Dieses animierte GIF macht meinen Browser kaputt (IE und Chrome) – es gibt bessere Möglichkeiten, Videos zu posten als ein animiertes GIF.
– MusiGenesis
10. April 2011 um 12:47 Uhr
@MusiGenesis Oh, wie ich mich an die Probleme von 2011 erinnere.
– Charles Clayton
20. November 2015 um 18:27 Uhr