为什么jmpq可以跳转到与Mac OS X上GDB提示不同的地址?

| 0x0000000149ab0d2c <+0000> jmpq * 0x1e04b6(%rip)#0x149c911e8 (gdb)p $ rip $ 1 =(无效(*)(无效))0x149ab0d2c (gdb)p $ rip + 6 + 0x1e04b6 $ 4 =(无效(*)(无效))0x149c911e8 在stepi之后:(然后应该是0x149c911e8,但是...) (gdb)p $ rip $ 5 =(无效(*)(无效))0x148c46d4a 顺便说一句,我的环境是Mac OS X 10.6.4。该程序加载2个dylib,这两个dylib都链接到使用-fPIC选项编译的同一静态库。这个问题使dylib感到困惑,并使其中的dylib调用了另一个函数,而这不应该,因为它们实际上彼此独立。     
已邀请:
*
表示这是绝对跳跃,而不是相对跳跃。绝对跳转将跳转到存储在寄存器中的地址,或者在这种情况下,跳转到存储在给定位置的地址。如果阅读地址0x149c911e8(
x/gx 0x149c911e8
)的内容,则可能会发现它包含地址0x148c46d4a。     

要回复问题请先登录注册