在我的项目中,我希望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,我得到一个分段错误...
有没有人知道这里出了什么问题?为什么?