我正在学习使用Detours 1.5进行绕行功能。我创建了一个包含此函数的目标可执行文件
float myFunction(int a)
{
cout << "The function argument value is " << a << std::endl;
return static_cast<float>(a);
}
一个将注入其中的DLL,其中包含此代码
...
float(__cdecl originalFunc) (int);
float hookedFunc(int in)
{
std::cout << "Function myFunction() was intercepted!\n";
return originalFunc(18);
}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
originalFunc = (float(__cdecl*)(int))DetourFunction((PBYTE)FUNCTION_ADDRESS, (PBYTE)hookedFunc);
break;
}
return true;
}
但是在“originalFunc = ...”一行(在进程附加之后),编译器抛出错误“表达式必须是可修改的左值”。我认为这是因为我正在尝试为函数赋值,但这就是它在教程中的显示方式,所以我该如何解决这个问题呢? 我使用的IDE是Visual Studio 2015社区版。