私はこの数日以内にこれを見たばかりで、それがどのように機能するのか理解できません。私が話すビデオはここにあります:
これは、このStack Overflowの質問からの最高評価の回答です。なぜこのプログラムが3つのコンパイラによって拒否されたのですか?
このビットマップはどのようにして「Hello World」のC ++プログラムを表示できますか?
私はこの数日以内にこれを見たばかりで、それがどのように機能するのか理解できません。私が話すビデオはここにあります:
これは、このStack Overflowの質問からの最高評価の回答です。なぜこのプログラムが3つのコンパイラによって拒否されたのですか?
このビットマップはどのようにして「Hello World」のC ++プログラムを表示できますか?
回答:
BMP(DIB)画像は、ヘッダーとそれに続く非圧縮1色データで構成されます(24 bpp画像の場合、ピクセルあたり3バイトで、行の逆順で格納され、行のストライドは4バイトです)。
色データのバイトは色を表すために使用され(つまり、ファイル形式2によって「必須」にされず、すべてが各ピクセルの色から取得されます)、書き込まれたピクセルの色とバイトの間に完全な1:1の対応があります。ファイル内; したがって、完全に選択された色を使用して、実際にファイルに必要なものを書き込むことができます(ヘッダーを除く)。
生成されたファイルをメモ帳で開くと、カラーデータがテキストとして表示されます。ヘッダー(BM
テキストの先頭から先頭までの部分)からは、ファイル形式で指定されていることがはっきりとわかります。
私の意見では、このビデオはこのように行われました:最初に著者はビットマップに必要なサイズを計算し、単純なパターンに展開する色で満たされた正しいサイズのDIBファイルを作成しました(たとえば、すべてのバイト65 => 'A'
); 次に、ビデオに示すように、そのようなパターンを「ペイロード」コードに置き換えました。
ただし、すべてをメモ帳で手作りすることは不可能ではないことに注意してください。カラーチューザダイアログ、ASCIIテーブル、DIBフォーマットの基本的な知識があれば、それを実行できますが、はるかに時間がかかり、エラーが発生しやすくなります。
エイプリルフールの質問への回答を参照していると思います。
私の推測では、各ピクセルにはバイナリ表現があります。そして、ソースコードの各文字には、バイナリ表現があります。
プログラムを作成した人は、各文字に対応するバイナリ表現を持つ各ピクセルの色を計算したはずです。
理論的なコンピューターサイエンスの観点からは、すべてのプログラムがビットマップとして表示され、同じことを行うソースコードを実際に見られるような方法で作成できるかどうかを尋ねることは興味深いでしょう。このような結果に真剣に関心がある場合は、たとえばクリーネの不動点定理について読んでください。
Program-as-an-imageは、コードの難読化の形式と見なすこともできます。特に実用的ではなかった...