【发布时间】:2010-03-29 09:57:54
【问题描述】:
我有一个指向函数的指针(我从 vtable 获得),我想通过在运行时更改汇编代码(更改几个字节)来编辑函数。我尝试使用 memset 并尝试直接分配新值(例如 mPtr[0] = X、mPtr[1] = Y 等),但我不断收到分段错误。 如何更改代码?
(我使用的是 C++)
操作系统是windows。
【问题讨论】:
-
你为什么要这样做呢?当然,唯一的原因是减少工作内存的数量,因为您可以从磁盘加载代码段。如果您解释一下您要做什么,也许我们可以提供帮助。
-
自修改代码很难。该操作系统完全用汇编语言编写,因为没有中级语言具有允许自修改代码的语法:valerieaurora.org/synthesis/SynthesisOS/abs.html。
-
自修改代码在 60 年代很流行(特别是在俄罗斯,他们制造了非常出色的编译器来生成自修改代码)。虽然这种开发风格在 70 年代初期基本上被放弃了,因为(没有编译器的帮助)它很难编写并且几乎无法调试。因此,现代操作系统现在明确防范自我修改代码(借助硬件),因为在现代语言中,它(自我修改代码)通常是编码错误或恶意代码的结果。