コンパイラのソースには書いていないのにバイナリだけで代々伝わっていく情報というのがあって、それはコンピュータのセキュリティに大きく関わっている。ここではそれについて書いてみよう。 僕は8ccというCコンパイラをスクラッチから書いたことがあるのだけど、8ccには文字列を読む部分で、"\"の後に"n"がきたら"\n"という文字(改行文字)を読んだことにするという箇所がある。これはよく考えてみれば自己言及的になっていて、ソースコードの中に"\n"のASCIIコードが一体本当は何なのかという情報が含まれていない。しかしコンパイラをコンパイルするコンパイラからその情報が受け継がれるので、できたバイナリは改行文字をきちんと出力できる。つまり8ccの改行文字は何度セルフコンパイルしても最初に使ったGCC起源ということになる。 コンパイラは、改行文字の文字コードというレベルではなく、もっと大きな情報をバイ
![コンパイラに仕込まれた細工とシステムのセキュリティの話|Rui Ueyama](https://cdn-ak-scissors.b.st-hatena.com/image/square/6b58dbde2577b883f70ca9e20ae8ea09fcce8bff/height=288;version=1;width=512/https%3A%2F%2Fd2l930y2yx77uc.cloudfront.net%2Fproduction%2Fsocial_images%2F89ee0c8537f2339316f7c7215e636a58493917a5.png)