プログラムが、自分自身のプログラムを書き換えてしまうこと。
機械語で数バイトを書き換えることで別の機能を持ったサブルーチンを作れる(例えばある部分をNOPにする、INC命令をDEC命令にする、といった例が考えられる)ような時に利用される。
8ビットマイクロプロセッサの時代などでは貧困なメモリ容量の中で複雑な仕事をするために時々用いられたが、ソースコードが複雑怪奇になったり、メンテナンス的な問題があった。
また近年のメモリ保護機能のあるオペレーティングシステムではユーザプログラムがコード領域のメモリを書き換えることが出来ないため、このような技術を利用することはできない。