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

发布于 2024-11-01 19:01:13 字数 434 浏览 1 评论 0原文

0x0000000149ab0d2c <+0000> jmpq *0x1e04b6(%rip) # 0x149c911e8

(gdb) p $rip $1 = (void (*)(void)) 0x149ab0d2c

(gdb) p $rip+6+0x1e04b6 $4 = (void (*)(void)) 0x149c911e8

在stepi之后:(它应该在0x149c911e8,但是...)

(gdb) p $rip $5 = (void (*)(void)) 0x148c46d4a

顺便说一句,我的环境是 Mac OS X 10.6.4。该程序加载 2 个 dylib,它们都链接到使用 -fPIC 选项编译的同一静态库。这个问题使 dylib 感到困惑,并使其中一个调用另一个 dylib 中的函数,这是不应该的,因为它们实际上是相互独立的。

0x0000000149ab0d2c <+0000> jmpq *0x1e04b6(%rip) # 0x149c911e8

(gdb) p $rip
$1 = (void (*)(void)) 0x149ab0d2c

(gdb) p $rip+6+0x1e04b6
$4 = (void (*)(void)) 0x149c911e8

after stepi: (It should be at 0x149c911e8 then, however...)

(gdb) p $rip
$5 = (void (*)(void)) 0x148c46d4a

btw, my environment is Mac OS X 10.6.4. The program loads 2 dylibs, both of which link to the same static library compiled with the -fPIC option. This issue confuses the dylibs and make one of them call functions in another one, which shouldn't, since they're actually independent with each other.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

隐诗 2024-11-08 19:01:14

*表明这是绝对跳转,而不是相对跳转。绝对跳转将跳转到存储在寄存器中的地址,或者在这种情况下,跳转到存储在给定位置的地址。如果您读取地址 0x149c911e8 (x/gx 0x149c911e8) 的内容,您可能会发现它包含地址 0x148c46d4a。

The * shows that this is an absolute jump, not a relative jump. An absolute jump will either jump to the address stored in the register, or, in this case, jump to the address stored at the given location. If you read the contents of the address 0x149c911e8 (x/gx 0x149c911e8), you will probably find that it contains the address 0x148c46d4a.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文