我刚刚在过去几天看到这一点,无法弄清楚它是如何工作的.我谈到的视频在这里:

这是Stack Overflow问题的最高评价答案:为什么这个程序被三个编译器拒绝了?
这个位图如何能够显示"Hello World"的C++程序?
Mat*_*lia 55
BMP(DIB)图像由标题后跟未压缩的1个颜色数据组成(对于24个bpp图像,每个像素3个字节,以反向行顺序存储并且具有4个字节的行步长).
颜色数据的字节用于表示颜色(即它们都没有被文件格式2 "强制" ,它们都来自每个像素的颜色),并且在像素颜色和写入的字节之间存在完美的1:1对应关系在文件中; 因此,使用完美选择的颜色,您实际上可以在文件中写入任何内容(标题除外).
在记事本中打开生成的文件时,颜色数据将显示为文本; 您仍然可以从标题(从BM文本的开头到文本的开头)清楚地看到,这是由文件格式强制执行的.
在我看来,这个视频是这样完成的:首先作者计算了位图所需的大小,并创建了一个正确大小的DIB文件,其中填充的颜色扩展为简单模式(例如,所有字节65 => 'A'); 然后用"有效载荷"代码替换这种模式,如视频中所示.
但请注意,用记事本手工制作整个东西并非不可能 - 使用颜色选择器对话框,ASCII表和DIB格式的基本知识可以完成,但它会慢得多且容易出错.
And*_*imm 18
我假设你指的是愚人节问题之一的答案.
我的猜测是每个像素都有一个二进制表示.并且源代码中的每个字符都有一个二进制表示.
创建程序的人必须已经计算出每个像素的颜色,这些像素具有与每个字符相对应的二进制表示.
从理论计算机科学的角度来看,如果每个程序都能以这样的方式编写,以便作为位图查看,您实际上看到了执行相同操作的源代码,那将会很有趣.如果您对此类结果非常感兴趣,请阅读例如Kleene的不动点定理.
程序即图像也可以被视为代码混淆的一种形式.并不是说它特别实用......