【问题标题】: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();
    

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 1970-01-01
      • 2020-04-22
      • 2013-09-22
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      相关资源
      最近更新 更多