我问的问题不会被用于制作,它只是纯粹的好奇心
我们说我有一个功能,它的原型是:
int myFunc(int, char*);
假设我知道静态内存地址(例如,0xC0DE),我可以这样做:
int (__cdecl* myFuncPtr)(int, char*) = (int(__cdecl*)(int, char*)) 0xC0DE;
myFuncPtr(1, "something");
现在,我能以某种方式在一行中调用该函数,而不是定义它吗?像这样:
((int(__cdecl*)) 0xC0DE)(1, "something");
答案 0 :(得分:14)
转换为函数指针类型而不是int*
:
((int(__cdecl*)(int, char const*)) 0xC0DE)(1, "something")
请注意,这仍会调用未定义的行为,必须避免,除非您的实现明确记录了您可能会这样做并且您不关心可移植性。如果您想要安全,至少使用内联汇编,以便您可以依赖目标体系结构而不是编译器提供的保证。
答案 1 :(得分:4)
在C中,但不是C ++,您可以省略参数类型:
((int(*)()) 0xC0DE)(1, "something");