RSP寄存器指向当前函数堆栈的顶部。当用户级程序进入系统调用时,应将用户级RSP保存在某处,以便在系统调用完成后恢复。在以下代码中,我想从系统调用中获取用户级别的RSP。
我发现“struct thread_struct”中有一个“usersp”字段,我希望从那里获得用户级别的RSP。但是,系统调用中从那里获得的用户级RSP的值与用户级函数中的值不同。为什么它们不同,如何从系统调用获得用户级RSP? 我正在使用Linux内核3.14.4在x86平台上运行Ubuntu 14.04。
void main(void){
...
register unsigned long rsp asm("rsp");
my_syscall();
...
}
void my_syscall(){
/*the value of user_rsp is not equal to the value of USER_RSP in main()*/
unsigned long user_rsp = current->thread.usersp;
}