
SystemTap
文章平均质量分 71
Justlinux2010
新浪微博 justlinux2010
展开
-
SystemTap----thread_indent()函数分析
thread_indent是systemtap中一个非常有用的函数,声明如下:thread_indent:string(delta:long)它可以输出当前probe所处的可执行程序名称、线程id、函数执行的相对时间和执行的次数(通过空格的数量)信息,它的返回值就是一个字符串。参数delta是在每次调用时增加或移除的空白数量。在没有看thread_indent函原创 2013-08-24 15:15:41 · 3821 阅读 · 0 评论 -
SystemTap----利用stap命令来查找内核函数定义
我们知道stap命令的-l(或-L)选项可以列出指定的某个probe描述中所有符合的probe点的列表,例如可以使用下面的命令,看到所有可以probe的函数:stap -l 'kernel.function("*")'今天在看书的时候,突然想到可以利用这个选项来找到一些内核函数的定义,例如sys_open()的定义。不管是source insight还是vim+ctag+csc原创 2013-08-24 19:57:13 · 7154 阅读 · 0 评论 -
SystemTap----将SystemTap脚本编译成内核模块
当运行SystemTap脚本时,会根据脚本生成一个内核模块,然后插入到系统中执行后退出。这个过程总共分为5个阶段:parse, elaborate, translate, compile, run,对应的编号为1-5.stap命令的-p选项可以用来指定在哪个阶段停止,利用这个选项可以将脚本编译成内核模块。正常情况下,SystemTap脚本只能在部署了SystemTap执行环境(安装内核的开发包原创 2013-08-25 21:15:24 · 3020 阅读 · 0 评论 -
SystemTap----初始化和遍历数组
SystemTap数组中的索引项可以是long或者string类型(systemtap的基本类型),访问数组项的方式和C语言类似,数组名[索引]。例如odds[x],odds是数组名,x是索引。下面的示例是以long为索引项,如下所示:global oddsprobe begin {printf("probe begin\n");for (i = 0; i原创 2013-08-17 22:45:04 · 3438 阅读 · 0 评论 -
SystemTap----嵌入C代码
SystemTap支持guru模式,通过-g选项来以这种模式执行SystemTap脚本。在guru模式下,嵌入的C代码在“%{"和“%}"标记之间,这些代码会原封不动地放到生成的模块中。嵌入的C代码不仅可以作为函数体,还可以出现在SystemTap描述中(例如函数等),示例如下:%{#include linux/in.h>#include linux/ip.h>%}原创 2013-08-18 10:07:27 · 3760 阅读 · 0 评论 -
探究Linux下参数传递及查看和修改方法
X86-64下有16个64位寄存器,其中%rdi、%rsi、%rdx,%rcx、%r8、%r9用作传递函数参数,分别对应第1个参数、第2个参数直到第6个参数,如下图所示(图片来自网络): 如果函数的参数个数超过6个,则超过的参数直接使用栈来传递。在被调用函数执行前,会先将寄存器中的参数压入堆栈,之后的访问会通过栈寄存器加上偏移位置来访问。下面我们结合程序及其反汇编的结果来看一看。C语原创 2013-09-08 18:15:17 · 4704 阅读 · 0 评论 -
SystemTap----常用变量、宏、函数和技巧
后面会持续更新,方便自己,方便大家.......一、宏1. kderef从指定的地址处读取指定大小的值格式为:kderef(size, address);其中address为要读取的地址值,size是要是读取的值的大小,返回值就是所读取的值。2.kread在嵌入的C代码中安全地读取指针值格式为:kread(&(address))原创 2013-08-18 18:39:21 · 7436 阅读 · 0 评论 -
使用Systemtap生成Flame Graph(火焰图)
参考资料: 《Systemtap生成Flame Graph(火焰图)》之所以再写一篇博客,主要是原文的内容显示的有问题,直接贴文章中的脚本有问题,另外文章中也没有说明可能遇到的一些问题。以下的安装步骤是在CentOS 6.4下进行的,内核版本是2.6.32-358.el6.x86_64,选择的应用软件是nginx-1.4.2。1、检查内核是否提供utrace/uprobes用户态支持原创 2013-09-05 18:12:58 · 6976 阅读 · 7 评论 -
SystemTap----通过pid和fd来获取对应的socket实例地址
说明:1.这个脚本可能会导致内核panic,所以一定不要在生产环境中使用,切记! 2.这个脚本不具备通用性,如果你使用了lxc或者cgroup,获得的结果可能有误或者找不到 3.这个脚本只是提供了找到socket实例的方法,如果你想获取这个套接字的其他信息需要自己编写脚本, 通过获得的socket实例来获取。插入的位置在脚本中已标注,可以直接原创 2013-12-29 14:12:37 · 4962 阅读 · 0 评论