assembly - CIL nop 操作码的用途是什么?

标签 assembly bytecode cil

我正在查看 MSIL 并注意到有很多 nop MSIL 中的说明。

MSDN 文章称,如果操作码被修补,它们不会采取任何操作,而是用于填充空间。它们在调试版本中的使用比发布版本中的使用要多得多。

我知道汇编语言中使用此类语句来对齐后面的指令,但为什么 MSIL 中需要 MSIL nops?

(编者注:接受的答案是关于机器代码 NOP,而不是问题最初询问的 MSIL/CIL NOP。)

最佳答案

NOP 有多种用途:

  • 它们允许调试器在一行上放置断点,即使它与生成的代码中的其他断点组合在一起也是如此。
  • 它允许加载器使用不同大小的目标偏移量来修补跳转。
  • 它允许代码块在特定边界对齐,这有利于缓存。
  • 它允许增量链接通过调用新部分来覆盖代码块,而不必担心整体函数大小的变化。

关于assembly - CIL nop 操作码的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/234906/

相关文章:

内存地址对齐

c++ - C++ 编译器使用什么类型的程序集?

java - 字节码:LOOKUPSWITCH 和 TABLESWITCH

c# - 如何检测我正在加载的 .NET 程序集是否包含不安全代码?

c# - 如何防止我的代码被盗?

assembly - x86 操作码编码 : sib byte

c - Linux 汇编语言中的 pthread_mutex_timedlock 使用

java - Mac 和 Windows 上的字节码

java - Byte Buddy 可以访问方法的局部变量名吗?

.net-core - 如何在 CIL .data-declarations 中使用 "&"