这种方式可以使用函数指针吗?

use*_*612 7 c c++ pointers function

这是我最近想到的,引自维基百科:"要初始化一个函数指针,你必须在它的程序中给它一个函数的地址."

所以,我不能指出一个任意的内存地址,但如果我用一个与之前相同大小的数据覆盖函数地址的内存而不是通过指针调用它呢?如果这样的数据对应于实际函数并且两个函数具有匹配的签名,则应该调用后者而不是第一个.

理论上可行吗?

如果由于我应该注意的一些非常明显的原因这是不可能的,我道歉.

Ste*_*sop 4

如果您正在编写类似 JIT 的东西,它可以动态生成本机代码,那么您可以做所有这些事情。

然而,为了生成本机代码,您显然需要了解您所在系统的一些实现细节,包括其函数指针如何工作以及需要对可执行代码采取哪些特殊措施。例如,在某些系统上,修改包含代码的内存后,您需要刷新指令缓存,然后才能安全地执行新代码。您无法使用标准 C 或 C++ 来便携式地完成所有这些操作。

您可能会发现,当您覆盖该函数时,只能对程序在运行时生成的函数执行此操作。作为正在运行的可执行文件一部分的函数很容易被操作系统标记为写保护。