我動態(tài)加載了一段代碼到內(nèi)存里執(zhí)行,報 SIGSEGV。用 gdb 調試,發(fā)現(xiàn)一個奇怪的現(xiàn)象:首先,環(huán)境是:(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 0x00gdb 給的提示 0x7ffff7eef380 這里的信息也很奇怪。單步調試:(gdb) stepi0x00000000000a288c in ?? ()該處地址未映射,無法訪問,報段錯誤。請問這個問題可能是什么原因?謝謝!
1 回答

富國滬深
TA貢獻1790條經(jīng)驗 獲得超9個贊
重新觀察了一下 0x7ffff7eef380
處的信息,不正好是 0x00000000000a288c
么,那么 jmpq *偏移量(寄存器)
的意思也就明確了,找到【寄存器的值 + 4 Bytes 偏移量】這處地址開始的 8 Bytes 的值,跳轉到該值指向的地址處。
- 1 回答
- 0 關注
- 732 瀏覽
添加回答
舉報
0/150
提交
取消