使用 memcpy 复制函数的地址 space

copying address space of a function using memcpy

我已经将 fun 指针类型定义为

typedef void (*fn)(void)

声明了一个指针变量: fn 变量 = NULL; 写了一个小函数 无效乐趣(无效){} 现在,我想使用 memcpy 将函数 fun 的地址 space 复制到 var 变量中。我正在尝试这个: memcpy(var, &fun, sizeof(fn))

但是,当我打印 var 的值时,它显示为垃圾值或负值,并且从 var 调用函数会导致分段错误。 请帮忙,我哪里错了。

您的代码可能是 memcpy(&var,&fun,sizeof(fn)),否则它将立即失败,var 初始化为 NULL

上面的 memcpy 正在将 fun 代码 的第一个字节复制到 var,这不是您想要的(不是这是任何标准定义的行为,这就是它可能在您的 OS/compiler).

上行为不端的原因

仅使用 var = fun;

如果您决定玩 memcpy(为了娱乐或学习),您必须首先获得一个包含函数指针的变量,而不仅仅是一个 那个指针:

fn var1 = fun;
fn var2 = NULL;
memcpy(&var2,&var1,sizeof(fn));
var2();