使用DetourFunction()时,“表达式必须是可修改的左值”

时间:2016-06-15 08:23:07

标签: c++ visual-studio hook dll-injection detours

我正在学习使用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社区版。

0 个答案:

没有答案