自己書き換えコード
自己書き換えコード(じこかきかえコード、英: self-modifying code)とは、目的を問わず実行時に自分自身の命令を書き換えるコードを指す。
自己書き換えコードはアセンブリ言語を使用すると簡単に記述できる(CPUのキャッシュを考慮する必要がある)。 また、SNOBOL4やLISPのようなインタプリタ型の高級言語でもサポートされている。また、COBOLにはALTERという命令が存在していた。 コンパイラで実装するのは難しいが、CLIPPERとSPITBOLではその試みが行われている。 バッチスクリプトも自己書き換えコードを頻繁に使用する。
再構成可能コンピューティングは、言ってみれば「自己書き換えハードウェア」である。 再構成可能コンピューティングはソフトウェアとハードウェアの境界を曖昧にする概念である。
自己書き換えコードは様々な目的で用いられる。
状態依存ループの最適化
実行時コード生成、実行時あるいはロード時にアルゴリズムを特化させる(これは、リアルタイムグラフィックスなどの領域で一般的である)。
オブジェクトのインライン状態を変化させる。あるいはクロージャの高度な構造をシミュレートする。
サブルーチンを呼び出す部分にパッチを当てる。一般にダイナミックリンクライブラリをロードするときに行われる。しかし、これを自己書き換えコードと呼ぶかどうかは場合による。
ダイナミックリンクライブラリのロード時などにサブルーチンを呼び出すアドレスにパッチを当てる。これを自己書き換えコードと呼ぶかどうかは微妙である。
遺伝的プログラミングなど
逆アセンブラやデバッガを使ったリバースエンジニアリングを防ぐためにコードを隠す目的で行う。
コンピュータウイルスやスパイウェアがアンチウイルスソフトウェアから逃れる目的で行う。