我对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),那么一切正常。
所以,有些问题:
imageOffset = 0;
总是正确吗?或者什么时候不正确?)