Wie hat diese Person „Hello World“ mit Microsoft Paint codiert?

Lesezeit: 3 Minuten

Benutzeravatar von Eamonn O'Brien
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:

QlGpd

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

Benutzeravatar von Matteo Italia
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.

Weitere Informationen zum DIB-Format


  1. Es gibt RLE-komprimierte DIBs, aber in diesem Fall werden unkomprimierte Bitmaps verwendet (und sie werden ohnehin sehr selten verwendet).
  2. 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…

1421090cookie-checkWie hat diese Person „Hello World“ mit Microsoft Paint codiert?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy