|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。 ・ 自己 : [じこ] 【名詞】 1. self 2. oneself ・ 己 : [き, つちのと] 【名詞】 1. 6th in rank 2. sixth sign of the Chinese calendar ・ 書 : [しょ] 【名詞】 1. penmanship 2. handwriting 3. calligraphy (esp. Chinese) ・ 換え : [かえ] (n) rate of exchange ・ ー : [ちょうおん] (n) long vowel mark (usually only used in katakana)
自己書き換えコード(じこかきかえコード、''self-modifying code'')とは、目的を問わず実行時に自分自身の命令を書き換えるコードを指す。 自己書き換えコードはアセンブリ言語を使用すると簡単に記述できる(CPUのキャッシュを考慮する必要がある)。 また、SNOBOL4やLISPのようなインタプリタ型の高級言語でもサポートされている。また、COBOLには ALTER という命令が存在していた。 コンパイラで実装するのは難しいが、CLIPPERとSPITBOLではその試みが行われている。 バッチスクリプトも自己書き換えコードを頻繁に使用する。 再構成可能コンピューティングは、言ってみれば「自己書き換え''ハードウェア''」である。 再構成可能コンピューティングはソフトウェアとハードウェアの境界を曖昧にする概念である。 == 自己書き換えコードの用途 == 自己書き換えコードは様々な目的で用いられる。 # 状態依存ループの最適化 # 実行時コード生成、実行時あるいはロード時にアルゴリズムを特化させる(これは、リアルタイムグラフィックスなどの領域で一般的である)。 # オブジェクトのインライン状態を変化させる。あるいはクロージャの高度な構造をシミュレートする。 # サブルーチンを呼び出す部分にパッチを当てる。一般にダイナミック・ライブラリをロードするときに行われる。しかし、これを自己書き換えコードと呼ぶかどうかは場合による。 # ダイナミックリンクライブラリのロード時などにサブルーチンを呼び出すアドレスにパッチを当てる。これを自己書き換えコードと呼ぶかどうかは微妙である。 # 遺伝的プログラミングなど # 逆アセンブラやデバッガを使ったリバースエンジニアリングを防ぐためにコードを隠す目的で行う。 # コンピュータウイルスやスパイウェアがワクチンソフトから逃れる目的で行う。 # メモリやディスク容量が限られている環境で、コードを圧縮しておき、実行時に解凍してから実行する。 # 命令セットが非常に小さい場合、自己書き換えコードを使う以外に機能を実現できない場合がある。例えば、「減算し、その結果が負であれば分岐する」(subtract-and-branch-if-negative)という命令しかないコンピュータも原理的には可能だが、この場合C言語での " *a = *b" に相当するような間接コピーは自己書き換えコードを使わないと実行できない。 2 番と 3 番はLISPのような高級言語でもよく使われる。 Linux カーネルは 起動時に環境に応じた自己書き換えを行ったり(alternative.c)、デバッグ用のコードを自己書き換えで挿入するようにしたり(jump labels)して、コードの最適化を図っている。また、自己書き換えによって任意の位置の性能解析をすることができる(perf events)。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「自己書き換えコード」の詳細全文を読む スポンサード リンク
|