N64のゲームを、84日かけて設計図に戻した
N64『スノーボードキッズ』の全2,145関数が、コンパイルすると元と同じ機械語になるCコードに復元された。続編にかかった596日に対し84日。AIエージェントを並列で走らせた成果。
ひかり:ねえ、84日ってさ……夏休みよりちょっと長いくらいだよね。それでゲーム1本まるごと分解できちゃうものなの?
ことね:分解というより、復元ね。売られているゲームの中身は、機械がそのまま読む数字の列になっているでしょう。そこから、人が読める元のプログラムを組み立て直すの。しかも「だいたい同じ」では認められないのよ。書いたものをもう一度コンパイルしたら、元の数字の列と1バイトも違わない——それを2,145個の部品ぜんぶでやり切って、100%になったの。
ひかり:えっ、答えを見ないで答案を1文字ずつ当てにいく感じ!? ……というか、なんでそんな大変なことするのっ?
ことね:速く走りたい人たちのためよ。このゲーム、昔からタイム短縮を競る人たちに人気なの。でも外から眺めているだけだと、キャラの速度が何で決まるのか、コンピューター側がどう道を選んでいるのかが分からない。設計図が手に入れば、それが読めるでしょう。
みずき:…で、84日。前は? ……ことね先輩、こないだの天地創造のときと同じ顔してる。
ことね:……顔の話はいいでしょう。続編の『2』のときは596日かかっているのよ。今回は作者が「Nigel」という仕組みを自作して、AIに部品を1個ずつ割り振って、4つの作業場所で同時に走らせたの。しかもAIが古いコンパイラの癖を見つけるたび、それを1つのメモ帳ファイルに書き足させる。次に来たAIがそれを読むから、だんだん賢くなっていく。
ひかり:あっ、それ部活の引き継ぎノートじゃんっ! いいなあ、うちにもほしいー!
みずき:…あるよ。ひかりが去年つくって、表紙にシール貼ったところで力尽きたやつ。
ことね:……話を戻すわね。ここが面白いのだけれど、作者自身が「84日と596日の差を全部LLMのせいにするのは乱暴な単純化だ」と書いているの。部品を一致させた作業のうち、人間の専門家が手を出したのは4.8%だけ。でもその4.8%がなければ89〜90%あたりで止まっていただろう、とも言っているのよ。相手が1990年代のSGI製の商用コンパイラで、最適化の癖がとにかく読めないの。作者の言葉だと「LLMも私も、その出力を再現するのがあまり得意ではない」。
ひなた:ふぁ〜……最後のひと手間が、いつもいちばん大変なのですよね。ひなた、みかんの白いすじを取るのだけは、いまだにお母さんに勝てないのです。
まとめ:2,145個ぜんぶ機械語まで一致させて、最後まで読み切れなかったのは1990年代のコンパイラの気分だった。