是否有任何运行时代码修改的智能案例?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (30)

你能想到用于运行时代码修改的任何合法(智能)用法(程序在运行时修改它自己的代码)吗?

现代操作系统似乎对这样做的程序感到不满,因为这种技术已被病毒用来避免检测。

我所能想到的只是某种运行时优化,它会通过在运行时了解某些在编译时无法知道的东西来删除或添加一些代码。

提问于
用户回答回答于

代码修改有许多有效的情况。在运行时生成代码可用于以下用途:

  • 一些虚拟机使用JIT编译来提高性能。
  • 动态生成专用功能在计算机图形学中一直很普遍。请参阅Blit(1984)的 Rob Pike和Bart Locanthi和John Reiser 硬件软件权衡位图图形(1984),或者Chris Lattner撰写的关于苹果在其OpenGL堆栈中使用LLVM进行运行时代码专业化的文章(2006)。
  • 在某些情况下,软件采用被称为蹦床的技术,该技术涉及在堆栈(或其他地方)上动态创建代码。例子是GCC的嵌套函数和一些Unices 的信号机制。

有时代码会在运行时转换为代码(这称为动态二进制转换):

  • 像苹果Rosetta这样的仿真器使用这种技术来加速仿真。另一个例子是全美达的代码变形软件。
  • 像Valgrind或Pin这样的复杂调试器和分析器使用它来在您的代码执行时进行测试。
  • 在对x86指令集进行扩展之前,VMWare等虚拟化软件无法直接在虚拟机中运行特权x86代码。相反,它必须将任何有问题的指令随时转换为更合适的自定义代码。

代码修改可以用来解决指令集的限制:

  • 有一段时间(我知道很久以前),当时计算机没有指令从子程序返回或间接寻址内存。自修改代码是实现子例程,指针和数组的唯一方式。

更多代码修改的情况:

  • 许多调试器取代了执行断点的指令。
  • 一些动态连接器在运行时修改代码。本文提供了一些有关Windows DLL的运行时重定位的背景知识,它实际上是一种代码修改形式。
用户回答回答于

这已经在计算机图形学中完成,特别是用于优化目的的软件渲染器。在运行时,会检查许多参数的状态,并生成光栅化程序代码的优化版本(可能会消除很多条件),从而允许渲染图形基元(例如三角形)的速度更快。

扫码关注云+社区