使用 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();
我已经将 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();