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

DTrace tricks and tips (15) -通过二级指针访问内存的值

由于DTrace probe在操作系统的kernel空间执行,所以不能直接访问进程user space的内容。通常要使用copyincopyinstr这些函数把进程user space的内容copy出来。如果程序里的变量是个二级指针,就要相对麻烦一些。以下面程序为例(编译成32位的程序,所以指针用uint32_t):

#include <stdio.h>
void func(char **p)
{
        *p = strdup("hello");
        return;
}
int main(void)
{
        char *p[......]

阅读全文

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信息,反之则没有。