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

DTraceToolkit脚本解析(3)- filebyproc.d

filebyproc.d位于DTraceToolkitProc文件夹下,其功能是打印进程打开的文件名。脚本代码就一行(略去版权信息):

syscall::open*:entry { printf("%s %s", execname, copyinstr(arg0)); }

脚本代码分析如下:
监听所有open相关函数的entry probe,如果触发,就打印进程名(execname)和文件名(arg0)。

执行脚本,输出如下:

root# ./filebyproc.d 
dtrace: script './filebyproc.d' matched 7 probes[......]

阅读全文

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

DTraceToolkit脚本解析(2)- kill.d

kill.d位于DTraceToolkitProc文件夹下,其功能是检查进程之间发送的信号值,以及信号发送是否成功。脚本代码如下(略去版权信息):

dtrace:::BEGIN
{
    /* Print header */
    printf("%5s %12s %5s %-6s %s\n",
        "FROM", "COMMAND", "SIG", "TO", "RESULT");
}

syscall::kill:entry
{
    /* Record target PID and signal */
    self->target[......]

阅读全文

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

DTrace tricks and tips (13) -查看模块是否包含CTF数据

CTFCompact C Type Format)包含了下面信息:
a)所有类型和结构体的定义;
b)每个函数的参数和类型;
c)函数返回值的类型;
d)全局变量的类型。

因此如果有CTF数据,就可以有args[]变量信息。如何查看模块是否包含CTF数据?可以用以下命令:

bash# elfdump /lib/libc.so | grep SUNW_ctf
Section Header[37]:  sh_name: .SUNW_ctf

如果模块有CTF数据,就会有这个section信息,反之则没有。

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

DTraceToolkit脚本解析(1)- sigdist.d

Sigdist.d位于DTraceToolkitProc文件夹下,其功能是统计一段时间内进程之间发送信号的数量和类型。脚本代码如下(略去版权信息):

#pragma D option quiet

dtrace:::BEGIN
{
    printf("Tracing... Hit Ctrl-C to end.\n");
}

proc:::signal-send
{
    @Count[execname, stringof(args[1]->pr_fname), args[2]] = count();
}

dtrace:::END
{[......]

阅读全文