我动态加载了一段代码到内存里执行,报 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 0x7ffff7e913600x7ffff7e91360: 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 0x7ffff7eef3800x7ffff7eef380: 0x8c 0x28 0x0a 0x00 0x00 0x00 0x00 0x00
gdb 给的提示 0x7ffff7eef380
这里的信息也很奇怪。
单步调试:
(gdb) stepi0x00000000000a288c in ?? ()
该处地址未映射,无法访问,报段错误。
请问这个问题可能是什么原因?谢谢!
幕布斯6054654
相关分类