【发布时间】:2011-07-28 23:32:02
【问题描述】:
你能想到任何合法的(智能)用于运行时代码修改(程序在运行时修改它自己的代码)吗?
现代操作系统似乎不赞成执行此操作的程序,因为病毒已使用该技术来避免检测。
我能想到的只是某种运行时优化,通过在运行时知道一些在编译时无法知道的东西来删除或添加一些代码。
【问题讨论】:
-
在现代架构上,它严重干扰了缓存和指令管道:自我修改代码最终不会修改缓存,因此您需要屏障,这可能会使您的代码变慢。并且您不能修改已经在指令管道中的代码。因此,任何基于自我修改代码的优化都必须在代码运行之前执行,以产生优于运行时检查的性能影响。
-
@Alexandre:尽管执行任意次数,但自修改代码的修改很少变化(例如一次、两次)是很常见的,因此一次性成本可能微不足道。跨度>
-
不确定为什么这被标记为 C 或 C++,因为两者都没有任何机制。
-
@Alexandre:众所周知,Microsoft Office 就是这样做的。因此(?)所有 x86 处理器都对自修改代码提供了出色的支持。在其他处理器上,昂贵的同步是必要的,这使得整个事情的吸引力降低。
-
@Cawas:通常自动更新软件会下载新的程序集和/或可执行文件并覆盖现有的。然后它将重新启动软件。这就是firefox、adobe等所做的。自我修改通常意味着在运行时代码由于某些参数而被应用程序重写到内存中,而不必持久化回磁盘。例如,它可能会优化整个代码路径,如果它可以智能地检测到在此特定运行期间不会执行这些路径以加快执行速度。
标签: executable cpu-architecture instructions self-modifying platform-agnostic