Почему jmpq может перейти по адресу, отличному от подсказки GDB в Mac OS X? - PullRequest
1 голос
/ 15 апреля 2011

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

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

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

после stepi: (тогда это должно быть 0x149c911e8, однако ...)

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

кстати, моя среда - Mac OS X 10.6.4.Программа загружает 2 dylibs, которые ссылаются на одну и ту же статическую библиотеку, скомпилированную с опцией -fPIC.Эта проблема путает дилибов и заставляет одну из них вызывать функции в другой, что не должно происходить, поскольку они фактически независимы друг от друга.

1 Ответ

3 голосов
/ 15 апреля 2011

* показывает, что это абсолютный скачок, а не относительный скачок.Абсолютный переход либо перейдет к адресу, сохраненному в регистре, либо, в этом случае, перейдет к адресу, сохраненному в данном месте.Если вы прочитаете содержимое адреса 0x149c911e8 (x/gx 0x149c911e8), вы, вероятно, обнаружите, что оно содержит адрес 0x148c46d4a.

...