如何从系统调用中获取用户级RSP的值?

时间:2016-08-05 04:23:38

标签: c

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; 
}

0 个答案:

没有答案