1. ホーム
  2. assembly

[解決済み] CILのnopオペコードの目的は何ですか?

2023-06-27 09:06:32

質問

MSILを調べていて、たくさんの nop という命令がたくさんあることに気づきました。

MSDN の記事によると、これらは何もせず、オペコードにパッチが適用された場合にスペースを埋めるために使用されるそうです。これらは、リリース ビルドよりもデバッグ ビルドでより多く使用されます。

この種のステートメントはアセンブリ言語で後の命令を整列させるために使用されることは知っていますが、なぜ MSIL の nops は MSIL で必要なのでしょうか?

(編集者注: 受け入れられた答えはマシンコードのNOPについてであり、質問がもともと尋ねていたMSIL/CIL NOPについてではありません)。

どのように解決するのですか?

NOPはいくつかの目的があります。

  • NOP は、生成されたコード内で他の行と結合されている場合でも、デバッガーがその行にブレークポイントを置くことを可能にします。
  • ローダーが異なるサイズのターゲット オフセットを持つジャンプにパッチを適用することを可能にします。
  • コードのブロックが特定の境界でアライメントされることを可能にし、これはキャッシュに適している場合があります。
  • 関数全体のサイズが変わることを気にすることなく、新しいセクションへの呼び出しでコードのチャンクを上書きするインクリメンタルリンクを可能にします。