我可以在运行时基于另一个函数创建一个函数吗?
|
我正在使用Microsoft的Detours挂钩API,例如,我可以更改
MessageBoxA
时的情况
以这种方式被调用:
int (WINAPI* pMessageBoxA)(HWND, LPCTSTR, LPCTSTR, UINT) = MessageBoxA;
int WINAPI MyMessageBoxA(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
printf(\"A function is called here!\\n\");
return pMessageBoxA(hWnd, lpText, lpCaption, uType); // call the regular MessageBoxA
}
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pMessageBoxA, MyMessageBoxA);
因此,当您呼叫MessageBoxA
时,您实际上是在呼叫MyMessageBoxA
。
现在,我想编写一个函数Hook()
,它将在运行时执行上面的代码。例如,如果我将函数指针MessageBoxA
传递给该函数,它将完全执行上面的代码。
当然,我也可以将其他函数指针传递给它。
然后有一个问题,当我在Hook
中获得函数指针时,如何定义一个具有与给定函数相同的返回值和参数的函数(在本例中为MessageBoxA
至int WINAPI MyMessageBoxA(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
),然后填充该函数的函数身体?
没有找到相关结果
已邀请:
2 个回复
版萍层分
凸晴
,它是struct / class的olverloading()运算符。然后,可以使用类的状态来记住要调用的实际函数。函子的示例: STL有一个
头,其中包含许多有用的实用程序,以使处理(成员)函数引用“更容易”。来自cplusplus.com的随机示例:
c ++ 0x具有许多漂亮的新功能(包括\'auto \'类型推断和lambda表达式),这将使许多操作变得更加容易