Я видел это в течение последних нескольких дней и не могу понять, как это работает. Видео, о котором я говорю, находится здесь :
Это самый популярный ответ на вопрос о переполнении стека: почему эта программа была отклонена тремя компиляторами?
Как это растровое изображение может отображать программу C ++ для "Hello World"?
Ответы:
Изображение BMP (DIB) состоит из заголовка, за которым следуют несжатые данные одного цвета (для изображений с разрешением 24 бит на пиксель это 3 байта на пиксель, хранящиеся в обратном порядке строк и с шагом строки 4 байта).
Байты для данных цвета используются для представления цветов (т. Е. Ни один из них не "предписан" форматом файла 2 , все они происходят из цвета каждого пикселя), и существует идеальное соответствие 1: 1 между цветами пикселей и записанными байтами. в файле; таким образом, используя идеально подобранные цвета, вы можете записать в файл все, что захотите (за исключением заголовка).
Когда вы открываете сгенерированный файл в блокноте, данные о цвете будут отображаться в виде текста; вы все еще можете ясно видеть из заголовка (часть от
BM
до начала текста), что требуется форматом файла.На мой взгляд, это видео было сделано следующим образом: сначала автор рассчитал размер, необходимый для растрового изображения, и создал файл DIB правильного размера, заполненный цветом, который расширяется до простого шаблона (например, все байты 65 =>
'A'
); затем заменил такой шаблон кодом "полезной нагрузки", как показано на видео.Обратите внимание, однако, что это не невозможно сделать вручную с помощью блокнота - с диалоговым окном выбора цвета, таблицей ASCII и базовыми знаниями формата DIB это можно сделать, но это будет намного медленнее и подвержено ошибкам.
Подробнее о формате DIB
источник
Полагаю, вы имеете в виду ответ на один из первоапрельских вопросов.
Я предполагаю, что у каждого пикселя есть двоичное представление. И что каждый символ в исходном коде имеет двоичное представление.
Человек, создавший программу, должен был разработать цвет для каждого пикселя, который имел бы двоичное представление, соответствующее каждому символу.
источник
С точки зрения теоретической информатики было бы интересно спросить, может ли каждая программа быть написана таким образом, чтобы, рассматривая ее как растровое изображение, вы действительно видели исходный код, который делает то же самое. Если вас серьезно интересуют такие результаты, прочтите, например, о теореме Клини о неподвижной точке .
Программа-изображение также может рассматриваться как форма обфускации кода. Не то чтобы это было особенно практично ...
источник