【问题标题】:copying address space of a function using memcpy使用 memcpy 复制函数的地址空间
【发布时间】:2015-06-09 16:20:54
【问题描述】:
我已经将有趣的指针类型定义为
typedef void (*fn)(void)
声明了一个指针变量:
fn 变量 = 空值;
写了一个小函数
无效乐趣(无效){}
现在,我想使用 memcpy 将函数 fun 的地址空间复制到 var 变量中。我正在尝试这个:
memcpy(var, &fun, sizeof(fn))
但是,当我打印 var 的值时,它会显示垃圾或负值,并且从 var 调用函数会导致分段错误。
请帮忙,我在哪里错了。
【问题讨论】:
标签:
function
pointers
memcpy
【解决方案1】:
您的代码可能是 memcpy(&var,&fun,sizeof(fn)),否则它会立即失败,并将 var 初始化为 NULL。
上面的memcpy 正在将fun 的代码 的第一个字节复制到var,这不是您想要的(不是任何标准定义的行为,它只是它是如何发生在你的操作系统/编译器上的)。
请改用var = fun;。
如果您决定使用memcpy(为了好玩或学习),您必须首先获取一个包含指向函数的指针的变量,而不仅仅是该指针的 值 :
fn var1 = fun;
fn var2 = NULL;
memcpy(&var2,&var1,sizeof(fn));
var2();