Widziałem to w ciągu ostatnich kilku dni i nie mogę dowiedzieć się, jak to działa. Film, o którym mówię, jest tutaj :
To najwyżej oceniana odpowiedź na pytanie dotyczące przepełnienia stosu: Dlaczego ten program został odrzucony przez trzy kompilatory?
W jaki sposób ta mapa bitowa może pokazać program C ++ dla „Hello World”?
Odpowiedzi:
Obraz BMP (DIB) składa się z nagłówka, po którym następują nieskompresowane 1 dane koloru (dla obrazów o rozdzielczości 24 bpp są to 3 bajty na piksel, przechowywane w odwrotnej kolejności i z 4-bajtowym krokiem między wierszami).
Bajty dla danych koloru są używane do reprezentowania kolorów (tj. Żaden z nich nie jest „narzucony” przez format pliku 2 , wszystkie pochodzą z koloru każdego piksela) i istnieje idealna zgodność 1: 1 między kolorami pikseli a zapisanymi bajtami w pliku; w ten sposób, używając idealnie dobranych kolorów, możesz faktycznie zapisać w pliku wszystko, co chcesz (z wyjątkiem nagłówka).
Gdy otworzysz wygenerowany plik w notatniku, dane koloru zostaną pokazane jako tekst; nadal możesz wyraźnie zobaczyć z nagłówka (części od
BM
do początku tekstu), co jest wymagane przez format pliku.Moim zdaniem to wideo zostało zrobione w ten sposób: najpierw autor obliczył wymagany rozmiar bitmapy i stworzył plik DIB o odpowiednim rozmiarze wypełniony kolorem, który rozwija się do prostego wzoru (np. Wszystkie bajty 65 =>
'A'
); następnie zastąpił taki wzorzec kodem „ładunku”, jak pokazano na filmie.Zauważ jednak, że nie jest niemożliwe ręczne wykonanie całości za pomocą notatnika - z oknem wyboru kolorów, tabelą ASCII i podstawową znajomością formatu DIB można to zrobić, ale byłoby to znacznie wolniejsze i podatne na błędy.
Więcej informacji o formacie DIB
źródło
Zakładam, że odnosisz się do odpowiedzi na jedno z pytań primaaprilisowych.
Domyślam się, że każdy piksel ma reprezentację binarną. I że każdy znak w kodzie źródłowym ma reprezentację binarną.
Osoba, która stworzyła program, musiała wypracować kolor dla każdego piksela, który miałby binarną reprezentację odpowiadającą każdemu znakowi.
źródło
Z teoretycznego punktu widzenia informatyki, byłoby interesujące zapytać, czy każdy program można napisać w taki sposób, aby postrzegany jako bitmapa faktycznie widział kod źródłowy, który robi to samo. Jeśli jesteś poważnie zainteresowany takimi wynikami, przeczytaj np. O twierdzeniu Kleene'a o punkcie stałym .
Program jako obraz może być również postrzegany jako forma zaciemniania kodu. Nie żeby było to szczególnie praktyczne ...
źródło