覆盖函数指针引发错误:非对象类型不可分配
Posted
技术标签:
【中文标题】覆盖函数指针引发错误:非对象类型不可分配【英文标题】:Overwriting function pointer raises error: non-object type is not assignable 【发布时间】:2017-06-18 19:52:59 【问题描述】:我目前正在做一个猴子补丁 c 函数调用的演示,想法是你有一个共享的 c 文件(例如:lib.c
),它在头文件 @ 中有一个名为 void foo()
的导出函数987654323@.
目前我正在尝试执行以下操作:
#include <stdio.h>
#include "lib.h"
void (*foo_original)() = NULL;
void foo_patch()
puts("Before foo!");
(*foo_original)();
puts("Before foo!");
int main()
foo_original = &foo;
foo = &foo_patch;
// Somewhere else in the code
foo();
但是这给了我以下错误:
error: non-object type 'void ()' is not assignable
有谁知道我该如何解决这个问题?谢谢
【问题讨论】:
【参考方案1】:这一行:
foo = &foo_patch;
不是重新分配函数指针,而是尝试重新分配函数foo
本身的地址,这是不允许的,因为那是r-value。
如果您将指针foo_original
重新分配为指向foo_patch
,您将得到一个无限递归循环,因为foo_patch
调用了foo_original
指向的函数。
【讨论】:
所以基本上你的意思是根本不可能覆盖foo()
的地址?
@paradoxis:没错。函数在名义上只执行内存中具有固定地址。以上是关于覆盖函数指针引发错误:非对象类型不可分配的主要内容,如果未能解决你的问题,请参考以下文章