C ++跳转到不同的DLL

时间:2017-06-19 15:12:44

标签: c++ windows gcc assembly dll

在我的项目中,我希望C ++跳转或转到一个地址,这似乎是另一个dll文件中的另一个函数。

到目前为止,这是我的代码

void* interceptor(JNIEnv *env, jclass clazz, ...){
    ...

    // get the function address
    void* originalfunc = bindingmap[method];

    //   restoring stack pointer and other critical registors
    asm (
        "mov %ebp, %esp;"
        "mov %rbp, %rsp;"
        "mov 0x10(%rbp), %rcx;"
        "mov 0x20(%rbp), %r8;"
        "mov 0x28(%rbp), %r9;"
        "mov 0x18(%rbp), %rdx;"
    );

    asm volatile("jmp *%0;"::"r" (originalfunc+4));
    //  goto *(originalfunc+4);
}

这里当我进入拦截器方法时,我正在检索一个函数的void *指针,然后我恢复所有关键寄存器然后我跳转函数...

此时我遇到了一个问题,它只有在我的目标函数与我的拦截器函数位于同一个dll文件中时才有效。如果我试图跳转到另一个DLL,我得到一个分段错误...

有没有人知道这里出了什么问题?为什么?

0 个答案:

没有答案