x86上的RIP相对寻址

时间:2011-09-07 14:15:01

标签: memory-management assembly x86 addressing relative-addressing

我对x86汇编程序并不熟悉,并尝试调试与a bug in mach_inject相关的问题。

原始代码如下所示(mach_inject.c中的函数mach_inject):

#if defined(__x86_64__)
        imageOffset = 0; // RIP-relative addressing
#else
        ASSERT_CAST( void*, remoteCode );
        imageOffset = ((void*) remoteCode) - image;
#endif

然后稍晚(mach_inject_bundle_stub.c的函数INJECT_ENTRY):

pthread_create( &thread,
                &attr,
                (void* (*)(void*))((long)some_local_function + imageOffset),
                (void*) param );

对我来说,当我为x86编译它时,它失败了。如果我更改代码以便我在每个架构上都有imageOffset = 0;(也适用于x86),那么一切正常。

所以,有些问题:

  • RIP相对寻址也适用于32位/ x86模式?
  • 如果我们还有32位模式的RIP相对寻址,那么(可能)这个代码的初始意图是什么?
  • RIP相对寻址编译器设置?或者,如果我的代码使用RIP相对寻址,我可以用什么方式控制? (或者更多与此错误相关:imageOffset = 0;总是正确吗?或者什么时候不正确?)

0 个答案:

没有答案