我已經在x86_64 Linux 3.0上實現了一個系統調用,並希望知道如何獲取調用進程的堆棧指針(%rsp)。我的系統調用是一個普通的系統調用...獲取堆棧指針x86_64 linux系統調用
我已經習慣了使用task_pt_regs
得到調用進程的堆棧幀,但是從arxh/x86/include/asm/ptrace.h
,在struct pt_regs
附註註釋,非跟蹤的系統調用不讀所有的寄存器:調用CPU syscall
指令並調用我的實際系統調用時,ip,cs,flags,sp和ss未設置。換句話說,在我的系統調用task_pt_regs(current)->ss
是垃圾。
對於像sys_fork這樣的調用,arch/x86/kernel/entry_64.S
(PTREGSCALL
)中的一個特殊宏設置了sys_fork函數,並使用適當的pt_regs棧幀調用該函數。
如何在我的系統調用中提取像IP和SS這樣的值,而不用強制在我的自定義系統調用上使用PTREGSCALL
這樣的sys_fork進行額外的參數?