IT用語集 › プログラミング › 自己書き換えコード

自己書き換えコード

プログラミング Svenska → 更新: 2026-10-22

実行中に自分自身の命令を書き換えるプログラム。最初期のプログラム内蔵方式の計算機では、汚い小技ではなく必需品だった。

命令とデータが同じメモリを共有すると、プログラムは自分の命令をデータとして扱い、実行中に変更できる。1948年頃のマンチェスター・ベビーやEDSACにはインデックスレジスタがなく、配列を順に処理するには、自分の命令のアドレス部を一段ずつ書き換えるしかなかった。これは小細工ではなく日常だった。

1949年のマンチェスター・マーク1でトム・キルバーンがインデックスレジスタを導入すると、この技法は不要になった。アドレスはコードに触れず、別のレジスタで数え上げればよい。以後、自己書き換えコードは避けるべきものになった。読みにくく、ROMに置けず、デバッグは悪夢である。それでも役に立つ場所には生き残っている。JITコンパイラは機械語をその場で生成し、マルウェアは検知を逃れるために自らを変異させる。

← 用語集に戻る