【发布时间】:2012-08-23 12:08:42
【问题描述】:
我在 x86_64 Linux 3.0 上实现了一个系统调用,想知道如何获取调用进程的堆栈指针 (%rsp)。我的系统调用是一个普通的系统调用......
我习惯使用task_pt_regs获取调用进程的栈帧,但是从arxh/x86/include/asm/ptrace.h,struct pt_regs中的cmets注意非跟踪系统调用不会读取所有寄存器:ip,cs,当调用 CPU syscall 指令并调用我的实际系统调用时,未设置标志、sp 和 ss。换句话说,在我的系统调用中task_pt_regs(current)->ss 是垃圾。
对于像 sys_fork 这样的调用,arch/x86/kernel/entry_64.S (PTREGSCALL) 中的一个特殊宏设置要使用适当的 pt_regs 堆栈帧调用的 sys_fork 函数。
如何在我的系统调用中提取 IP 和 SS 之类的值,而不用PTREGSCALL 对我的自定义系统调用(例如 sys_fork)强制添加额外的参数?
【问题讨论】:
标签: linux-kernel x86-64