最近看到一篇古老的帖子(http://thr3ads.net/dtrace-discuss/2008/03/379528-stack-tracing-and-uregs),说是执行完一个把堆栈写坏的函数,为什么DTrace输出EBP
的值改变了,但是EIP
的值没变?我觉得很有意思,就研究了一下。下面就[……]
为什么EBP值变了,EIP值没变?
Leave a reply
最近看到一篇古老的帖子(http://thr3ads.net/dtrace-discuss/2008/03/379528-stack-tracing-and-uregs),说是执行完一个把堆栈写坏的函数,为什么DTrace输出EBP
的值改变了,但是EIP
的值没变?我觉得很有意思,就研究了一下。下面就[……]
在使用DTrace时,可以通过uregs[]数组访问具体的寄存器。关于各个寄存器的具体的值,可以参考这篇文档:http://docs.oracle.com/cd/E23824_01/html/E22973/gkyeg.html,我就不一一列举了。需要注意的是,有4个通用的寄存器,可以在所有硬件平台上[……]
以下面程序为例,介绍如何查看进程的probe:
#include <stdio.h> void func(void) { printf("hello\n"); } int main(void) { while (1) {[......]
最近在做redis的相关工作,无意中发现Brendan Gregg大神写的度量redis处理请求延时的DTrace脚本:redisslat.d(https://github.com/brendangregg/dtrace-cloud-tools/blob/master/redis/r[……]