gpt4 book ai didi

c++ - 从方法指针获取 "real"函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:01 25 4
gpt4 key购买 nike

给定一个 c++ 对象指针和一个指向虚拟方法的兼容方法指针,是否有任何远程健壮/可移植的方法来获取指向将被调用的实际 concert 函数的指针?

用例是我想运行所说的指针,认为调试符号来获取将被调用的类型/函数的名称(而不实际调用它)。

如果这只能通过特定于实现的解决方案实现,那么我主要对支持 GCC/LLVM 感兴趣。

最佳答案

LLVM 和 GCC 都遵循 Itanium C++ ABI ,因此您需要找到一种方法来读取其中指定的数据结构。我会给出一个大概的轮廓。
指向虚拟成员的指针由虚拟函数表中的偏移量表示,出于某种原因 +1。

class A {
public:
virtual void f();
virtual void g();
};

void (A::*pAg)() = & A::g;
ptrdiff_t offset = *(ptrdiff_t*)(&pAg) - 1;

指向虚拟表的指针通常位于对象的开头:

A a;
void* vtable = *(void**)&a;

然后您查看该虚拟表中计算出的偏移量并找到您的实际函数指针。

void* function = *(void**)(vtable+offset)

关于c++ - 从方法指针获取 "real"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21037560/

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