链接硬编码函数指针

时间:2010-12-03 08:54:51

标签: c++ pointers initialization

我知道具有已知签名的特定功能位于已知地址。如何在C ++中初始化函数指针?

我尝试了以下(及其许多变体)无济于事:

int (*FunctionName)(int arg1, long arg2, char *arg3) = (int (*FunctionName)(int arg1, long arg2, char *arg3))0xCAKE;

我感觉右边的表达式会导致麻烦,因为如果代码初始化为0x0 / NULL,代码就会编译。有什么指针吗? (双关语)。

2 个答案:

答案 0 :(得分:5)

除了CAKE不是正确的十六进制值这一事实,因为K不是一个有效的十六进制字符,加上有关不同指针类型的任何问题,你的主要错误是FunctionName是一个不是类型的变量。

就像在做

px = (px)0xBADFACE;

其中px是常规指针

如果你删除右边的FunctionName,剩下的就可以了,但是更容易成为一个typedef。

typedef int( *FuncType)(int arg1, long arg2, char * arg3 );
FuncType FunctionName = (FuncType)(0xCAFE);

答案 1 :(得分:2)

int (*FunctionName)(int arg1, long arg2, char *arg3) = (int ( * )(int arg1, long arg2, char *arg3))0x01;

适用于VS2008。 FunctionName是变量的名称,而不是类型的一部分。