DTrace tricks and tips (3) - 访问程序全局变量

在stackoverflow上有人问如何用DTrace访问程序的全局变量(http://stackoverflow.com/questions/11228352/dtrace-accessing-global-variables-from-application),答案也简单,只需知道全局变量的地址,然后把地址作为指针,按照变量的类型,解引用指针即可。所以问题来了,如何得到全局变量地址?


还是以stackoverflow上问题的代码做例子,并假设编译后生成的可执行文件名为a:


(1)用printf打印变量地址,这个最简单:“printf("%p\n", &global_var);”,但是这需要执行代码一次。
(2)用gdb调试程序,打印地址,同样也要执行一次:


(3)用操作elf文件的命令得到变量地址。以elfdump命令为例:


知道地址后,就可以用DTrace脚本来观察值了。DTrace脚本如下:


执行如下命令:


如果你对DTrace感兴趣,欢迎关注DTrace公众号(微信号:chinadtrace,博客地址:http://blog.segmentfault.com/chinadtrace),介绍关于DTrace的使用技巧,经验分享,话题讨论等等。也非常欢迎你转发给其它对DTrace感兴趣的朋友。



你可能感兴趣的:(dtrace)