1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

DTrace tricks and tips (6) – 访问寄存器

在使用DTrace时,可以通过uregs[]数组访问具体的寄存器。关于各个寄存器的具体的值,可以参考这篇文档:http://docs.oracle.com/cd/E23824_01/html/E22973/gkyeg.html,我就不一一列举了。需要注意的是,有4个通用的寄存器,可以在所有硬件平台上使用:

名字 代表的寄存器
R_PC 程序计数器
R_SP 堆栈指针
R_R0 第一个返回值
R_R1 第二个返回值

最后以一个简单的程序示范一下如何访问寄存器。C程序如下:

#include <stdio.h>

int func(void)
{
    return 3;
}
int main(void)
{
    func();
    return 0;
}

生成可执行文件名为“a”。执行DTrace命令:

dtrace -n 'pid$target:a:func:return {trace(uregs[R_R0])}' -c ./a
dtrace: description 'pid$target:a:func:return ' matched 1 probe
dtrace: pid 21357 has exited
CPU     ID                    FUNCTION:NAME
  0  58535                      func:return                 3

可以看到正确地打印出了func函数的返回值3

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.