これは、マシン コードをあるアーキテクチャから別のアーキテクチャに変換する必要がある場合に発生します。静的に行うには、コードを表すプログラムの部分を正しく識別でき、バイナリ イメージ内の実際のデータであるビットによって混乱しないことが必要です。多くのコンパイラはこれを簡単に行うことはできません。これは、実行可能ファイルを逆コンパイルしようとした人なら誰でも知っていることです。
簡単な例は、C の switch ステートメントから生成され、実行可能コードと共に .text セグメントにコンパイルされたジャンプ テーブルです。このテーブルには、コードではなくアドレスが含まれています。これらのバイトをアドレスとして解釈するには、コンパイラに組み込まれているコード ジェネレータについてよく知っている必要があります。不可能ではありませんが、もちろん、別のコンパイラによって生成されたコードではうまく機能しません。または、同じコンパイラの別のバージョンですら。
動的変換の問題ではありません。マシンが実行しようとしているため、バイトのチャンクがコードであることがわかります。
ジッターには別の考慮事項が適用されます。中間コードは簡単に識別できるように設計されているため、このようなトランスレーターはコードの識別に問題が生じることはありません。そのような場合、動的変換は、変換のオーバーヘッドを時間の経過とともに分散させ、プログラム実行の一時停止を減らすことができるため、望ましいものです。また、決して実行されないコードで作業を行うことは完全に避けてください。