gpt4 book ai didi

c++ - 更改函数指向的内容

转载 作者:行者123 更新时间:2023-11-30 02:04:41 24 4
gpt4 key购买 nike

我一直在研究 c/c++ 中的指针和函数指针。由于可以获得函数的地址,是否可以更改函数调用实际结束的位置?

我尝试获取一个函数的内存地址,然后将第二个函数地址写入该位置,但它给了我一个访问冲突错误。

问候,

最佳答案

函数指针是变量,就像整数和 double 一样。函数的地址是不同的。它是二进制文件 .text 部分中函数开头的位置。您可以将函数的地址分配给相同类型的函数指针,但是 .text 部分是只读的,因此您不能修改它。写入函数的地址会尝试覆盖函数开头的代码,因此是不允许的。

注意:如果你想在运行时改变函数调用结束的地方,你可以创建一个叫做 vritual 调度表或 vtable 的东西。这是一个包含函数指针的结构体,在 c++ 等语言中用于实现多态性。

例如:

struct VTable {
int (*foo)(void);
int (*bar)(int);
} vTbl;

在运行时,您可以更改 vTbl.foovTbl.bar 的值以指向不同的函数和对 vTbl.foo() 的任何调用.bar 将定向到新函数。

关于c++ - 更改函数指向的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10311019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com