对一处汇编指令 jmpq 的结果不理解

发布于 2022-09-11 17:04:16 字数 810 浏览 10 评论 0

我动态加载了一段代码到内存里执行,报 SIGSEGV。用 gdb 调试,发现一个奇怪的现象:

首先,环境是:

(gdb) bt
#0 0x00007ffff7e91360 in ?? ()
(gdb) i r
...
rip 0x7ffff7e91360
cs  0x33
(gdb) x/i 0x7ffff7e91360
=> 0x7ffff7e91360: rex.W jmpq *0x5e019(%rip)    # 0x7ffff7eef380
(gdb) x/7xb 0x7ffff7e91360
0x7ffff7e91360: 0x48 0xff 8x25 0x19 0xe0 0x05 0x00
(gdb) x/5i 0x7ffff7eef380
   0x7ffff7eef380: mov %gs,(%rax)
   0x7ffff7eef382: or (%rax),%al
   0x7ffff7eef384: add %al,(%rax)
   0x7ffff7eef386: add %al,(%rax)
   0x7ffff7eef388: subb $0xa,(%rax)
(gdb) x/8xb 0x7ffff7eef380
0x7ffff7eef380: 0x8c 0x28 0x0a 0x00 0x00 0x00 0x00 0x00

gdb 给的提示 0x7ffff7eef380 这里的信息也很奇怪。

单步调试:

(gdb) stepi
0x00000000000a288c in ?? ()

该处地址未映射,无法访问,报段错误。

请问这个问题可能是什么原因?谢谢!

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

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

发布评论

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

评论(1

無心 2022-09-18 17:04:16

重新观察了一下 0x7ffff7eef380 处的信息,不正好是 0x00000000000a288c 么,那么 jmpq *偏移量(寄存器) 的意思也就明确了,找到【寄存器的值 + 4 Bytes 偏移量】这处地址开始的 8 Bytes 的值,跳转到该值指向的地址处。

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