获取有关函数地址的信息

时间:2015-10-08 21:36:51

标签: c++ reflection

是的,这又是“这些”问题之一。

我启动并运行了一个基本的反射框架,虽然它仍然需要前端用户手动注册每个方法(包括返回类型,参数)。但是我想到了使每个函数都需要反映的虚拟,因为(即使它依赖于编译器)这些函数在技术上应该在vtable中(如果没有优化)。所以我得到了每个函数的地址,并成功调用/执行每个函数。但是,是否有一种“获取”返回类型的方法,以及给定此函数地址的参数类型。

现在在你说这是不可能的之前,我不介意最奇怪的方式,最黑客的方式,因为我只是为了挑战这样做。但是我不想要预先制作方法,或类似的东西,因为这不是我的目标。

2 个答案:

答案 0 :(得分:1)

使用反编译器或调试器(idapro,ollydebug,windasm ...)然后在调用该函数之前检查有多少推送来猜测参数,并尝试查找存储在eax中的内容以了解什么是返回。这是低级别的东西,根本不是一件容易的事。

答案 1 :(得分:0)

在C ++ 11中,您可以使注册和调用界面使用模板,例如:

template <class Return, class... Args>

然后,您可以将其专门化以在注册函数中存储类型信息,并将其与运行时参数进行比较:基本上,通过模板元编程序列化类型对象,比较,将函数指针强制转换为所需类型,并使用参数列表。