需要从绕行功能调用原始功能

ssu*_*ube 6 c++ hook detours

我正在使用Detours挂钩到可执行文件的消息函数,但我需要运行自己的代码然后调用原始代码.从我在Detours文档中看到的内容来看,这听起来应该是自动发生的.原始功能会在屏幕上显示一条消息,但是一旦我附上绕道,就会开始运行我的代码并停止打印.

原始功能代码大致是:

void CGuiObject::AppendMsgToBuffer(classA, unsigned long, unsigned long, int, classB);
Run Code Online (Sandbox Code Playgroud)

我的功能是:

void CGuiObject_AppendMsgToBuffer( [same params, with names] );
Run Code Online (Sandbox Code Playgroud)

我知道原始函数所在的内存位置,因此使用:

DWORD OrigPos = 0x0040592C;
DetourAttach( (void*)OrigPos, CGuiObject_AppendMsgToBuffer);
Run Code Online (Sandbox Code Playgroud)

让我进入这个功能.这段代码几乎完美无缺:用适当的参数调用我的函数.但是,执行会离开我的函数并且不会调用原始代码.我已经尝试过jmping,但是崩溃了程序(我假设代码Detours移动以适应钩子负责崩溃).

编辑:我已设法修复第一个问题,没有返回程序执行.通过将OrigPos值作为函数调用,我可以转到"trampoline"函数并从那里到原始代码.但是,在某些地方,寄存器正在发生变化,一旦我回到原始代码,就会导致程序崩溃并出现段错误.

Edit2:最终工作代码:

class CGuiObject
{
 public:
    void MyFunc( [params] );
};

DWORD TrueAddr = 0x0040592C;

CGuiObject::MyFunc( [params] )
{
    _asm { pushad }
    // process
    _asm {
        popad
        leave
        jmp TrueAddr
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用TrueAddr作为DetourAttach中的第一个参数.