如何从系统调用中获取RIP(程序计数器)的值?

时间:2016-07-11 05:38:46

标签: linux cpu-registers

RIP是一个存储当前指令地址的寄存器。我正在编写一个系统调用来获取用户级进程的程序计数器。以下面的代码为例,sys_getrip()是我正在处理的系统调用。我该如何实施?

我正在使用的平台是Ubuntu 14.04和Linux内核3.14.4。

/*A system call in the kernel level*/
void sys_getrip(){
    char *pc =//What's the magic here?

    printk(KERN_INFO, "The current program counter of %d is %p", current->pid, pc);
}

/*A test function running in user level*/
void main(void){
   ...
   sys_getrip();
   ...
   ...
   sys_getrip();
   ...
}

此处发布了类似的问题:How to print exact value of the program counter in C。我在本文中尝试了通过实现sys_getrip()的方法,如下所示

void sys_getrip(void){
    printk(KERN_INFO "RIP = %p\n", __builtin_return_address(0));
}

但是,在这种情况下,main()中sys_getrip()的不同调用给出了相同的RIP值。

0 个答案:

没有答案