newproc.d
位于DTraceToolkit的Proc
文件夹下,其功能是打印新执行的进程名字。脚本代码就一行(略去版权信息):
proc:::exec-success { trace(curpsinfo->pr_psargs); }
脚本代码分析如下:
监听exec-succ[......]
newproc.d
位于DTraceToolkit的Proc
文件夹下,其功能是打印新执行的进程名字。脚本代码就一行(略去版权信息):
proc:::exec-success { trace(curpsinfo->pr_psargs); }
脚本代码分析如下:
监听exec-succ[......]
可以利用DTrace
的“-F
”选项显示函数之间的调用关系,这对分析代码来说是个绝对好用的工具。以下面脚本为例:
#!/usr/sbin/dtrace -Fs
pid$target:::entry,
pid$target:::return
{
}
syscall:::entry,[......]
由于DTrace probe
在操作系统的kernel
空间执行,所以不能直接访问进程user space
的内容。通常要使用copyin
、copyinstr
这些函数把进程user space
的内容copy
出来。如果程序里的变量是个二级指针,就要相对麻烦一些。以下面程序为例(编译成32
位的程序,所以指针用[……]
filebyproc.d
位于DTraceToolkit的Proc
文件夹下,其功能是打印进程打开的文件名。脚本代码就一行(略去版权信息):
syscall::open*:entry { printf("%s %s", execname, copyinstr(arg0)); }
脚本代码分析[……]
kill.d
位于DTraceToolkit的Proc
文件夹下,其功能是检查进程之间发送的信号值,以及信号发送是否成功。脚本代码如下(略去版权信息):
dtrace:::BEGIN
{
/* Print header */
printf("%5s %12s %5s %-6s[......]