提问人:user1641854 提问时间:11/10/2023 最后编辑:user1641854 更新时间:11/11/2023 访问量:58
CR2 来自内核和用户空间中的 RIP 的分段错误
Segmentation fault with CR2 from kernel and RIP in userspace
问:
我在 Linux x86_64上有一些具有类似状态的段错误:
[pid 35742] [time 1699532462] signal caught: Segmentation fault
si_signo: 11
si_code: SEGV_MAPERR
si_errno: 0
si_pid: 2166368523
si_uid: 4294967295
si_addr: 0xffffffff8120290b
si_status: 0
si_band: 0xffffffff8120290b
uc_flags: 0x1
ss_sp: 0x7f7d25851000
ss_size: 1048576
ss_flags: 0x0
REG_R8: 0xe76b5bc
REG_R9: 0x7f7d0743cc40
REG_R10: 0x7f7d0743b040
REG_R11: 0x0
REG_R12: 0x0
REG_R13: 0x0
REG_R14: 0x7f7d25952020
REG_R15: 0x7f7d258137a8
REG_RDI: 0x7f7d258137a0
REG_RSI: 0x0
REG_RBP: 0x7ffe5d6d86a0
REG_RBX: 0x7f7d258137a0
REG_RDX: 0x7f7c45f00000
REG_RAX: 0x0
REG_RCX: 0x6
REG_RSP: 0x7ffe5d6d8560
REG_RIP: 0x8af560
REG_EFL: 0x10242
REG_CSGSFS: 0x33
REG_ERR: 0x15
REG_TRAPNO: 0xe
REG_OLDMASK: 0xfffffffe00015a03
REG_CR2: 0xffffffff8120290b
虽然这似乎是尝试执行内核代码的页面错误,但我想知道它如何使 RIP 属于用户空间。
有趣的是,内核代码在调用指令之前有 jmp 到 CR2 地址,而用户空间在 RIP 之前有调用指令。
0x8af560附近的代码:
0x00000000008af55b <+683>: call 0x8adb50 <...>
0x00000000008af560 <+688>: mov -0xe8(%rbp),%rdi
答: 暂无答案
评论
0xffffffff8120290b
0x8adb50
munmap()
mprotect
mov -0xe8(%rbp),%rdi
0x000055...