从内核系统调用获取用户空间 RBP 寄存器
Get userspace RBP register from kernel syscall
我正在编写一个内核系统调用,我想读取用户的基址指针寄存器(RBP)。也许我可以使用为参数传递的 pt_regs
结构来做到这一点,不是吗?
示例代码:
unsigned long int data;
asmlinkage int my_read(int d)
{
get_rbp_of_userStack(&data);#or somthing like that
}
我知道这个数据保存在某个地方用于上下文切换,我怎样才能得到它?
这是我的用户代码
void rar()
{//rbp here should be rsp when it call so it basically the return addres of the main
char t[10];
getchar();
}
int main()
{
rar();
}
您可以使用 task_pt_regs()
宏来获取 current
任务的用户寄存器(在系统调用进入时保存):
#include <asm/processor.h>
SYSCALL_DEFINE1(foo, int, d)
{
const struct pt_regs *user_regs = task_pt_regs(current);
unsigned long rbp = user_regs->bp;
/* Do whatever you need... */
return 0;
}
我正在编写一个内核系统调用,我想读取用户的基址指针寄存器(RBP)。也许我可以使用为参数传递的 pt_regs
结构来做到这一点,不是吗?
示例代码:
unsigned long int data;
asmlinkage int my_read(int d)
{
get_rbp_of_userStack(&data);#or somthing like that
}
我知道这个数据保存在某个地方用于上下文切换,我怎样才能得到它?
这是我的用户代码
void rar()
{//rbp here should be rsp when it call so it basically the return addres of the main
char t[10];
getchar();
}
int main()
{
rar();
}
您可以使用 task_pt_regs()
宏来获取 current
任务的用户寄存器(在系统调用进入时保存):
#include <asm/processor.h>
SYSCALL_DEFINE1(foo, int, d)
{
const struct pt_regs *user_regs = task_pt_regs(current);
unsigned long rbp = user_regs->bp;
/* Do whatever you need... */
return 0;
}