从'int *'分配给'int (*)(int, int, int, int, int)'的不兼容指针类型



我有一个指向orgFunction的指针,它接受5 int作为输入并返回int,而orgfunctionhook接受相同的args并返回:

int (*orgFunction)(int a1, int a2 , int a3 , int a4, int a5);
int orgFunctionHook(int a1, int a2 , int a3 , int a4, int a5)
{
// do something..
return orgFunction(a1,a2,a3,a4,a5);
}
void Load(){
orgFunction = (int*)HookFunction((char*)"something", 0x50000, (void*)orgFunctionHook);
}

HookFunction使用3个args、const char、我原来函数的地址和一些钩子

为了方便起见,这就是它的定义:

void* HookFunction(char* path, uint64_t vaddr, void* replace);

它返回一个void*,我想使用它的函数返回int,一旦我在Load((中使用它

我得到这个错误:

" Incompatible pointer types assigning to 'int (*)(int, int, int, int, int)' from 'int *' "

我试图解决的是这样声明:

void Load(){
void * orgFunction = (int*)HookFunction((char*)"something", 0x50000, (void*)orgFunctionHook);
}

但这在运行时会产生问题——当它运行orgFunctionHook时,指向函数orgFunction的指针地址将被分类为0x0(EMPTY(

有没有其他解决方案可以在不丢失指向原始函数的指针的情况下传递此信息?

编辑:忘了提一下,我不能更改任何与HookFunction相关的内容,它的返回或参数保持不变。

您正在转换到错误的类型。如错误消息中所述,函数指针的类型为int (*)(int,int,int,int,int),但您正试图为其分配int *类型的表达式。这些类型不兼容。

正确的方法是为函数指针类型创建一个typedef:

typedef int (*ftype)(int, int, int, int, int);

然后用以下类型声明函数指针:

ftype orgFunction;

HookFunction:类似

ftype HookFunction(char* path, uint64_t vaddr, ftype replace);

那么你的Load函数会是这样的:

void Load(){
orgFunction = HookFunction((char*)"something", 0x50000, orgFunctionHook);
}

如果您不能修改HookFunction,那么只需在调用中使用typedef:

void Load(){
orgFunction = (ftype)HookFunction((char*)"something", 0x50000, (void *)orgFunctionHook);
}

最新更新