door callを追ってみましょう。

システム/アプリケーションでよく見かけるdoor call(1対1で、server process内にある関数をたたく)なのですが、たとえば、svc.startd(1M)のdoorファイルを調べてみましょう(↓)。どんなアプリケーションで、どんなファイルを使ってdoorのやりとりをしているか?気になったりしませんか?(\^\^;(しません。。って周りにいわれます。。きっと私と同じように気になっている方がいると思います!!)たまに、コマンドのバグとかにひっかかるとdoor callをしたんだけど、コマンドがかえってきませんというようなバグに遭遇してしまう場合があります。というか、そのバグにあたったので、このブログを書いているかもしれませんが。。とにかく、1プロセスを追うコールではなくて、システムカーネルレベルで、すべてのアプリケーションのdoorコールを追ってみたい!

 # pfiles 1562 | grep door
      O_RDWR FD_CLOEXEC  door to svc.configd[1144]
      O_RDWR FD_CLOEXEC  door to svc.configd[1144]
      O_RDWR FD_CLOEXEC  door to svc.configd[1144]
      O_RDWR FD_CLOEXEC  door to svc.configd[1144]
      O_RDWR FD_CLOEXEC  door to svc.startd[1562]
      O_RDWR FD_CLOEXEC  door to svc.configd[1144]



 カーネルレベルのdoor_callをコールしている際に、取得されるディクリプタとdoor_lookupをとる相手(サーバー?)をDTraceを用いて取得してみます。

//door.d 

 #!/usr/sbin/dtrace -s


door_call:entry
{
self->in=1;
self->door_file=fds[arg0].fi_pathname;
self->door_fs=fds[arg0].fi_fs;
}

door_lookup:return
/self->in/
{
        self->filed = args[1]->door_target;
}

door_call:return
/self->in&&self->filed!=0/
{
        @[execname,self->door_file,self->door_fs,stringof(self->filed->p_user.u_psargs)] = count();
        self->in = 0;
        self->filed = 0;
        self->door_file=0;
        self->door_fs=0;
}

 これを実行してみましょう。このスクリプトを実行する際に、pkill -9 svc.startdとかprtdiag(1M)とかしてみましょう。(何でもいいです。) そうすると下記のような出力結果が得られます。

kato@kato-osol:~$ pfexec ./door.d
dtrace: script './door.d' matched 3 probes
\^C

  svcs                                                /etc/svc/volatile/repository_door                   namefs                                              /lib/svc/bin/svc.configd                                          1
  svcs                                                <unknown>                                           doorfs                                              /lib/svc/bin/svc.configd                                       9366



Comments:

Post a Comment:
  • HTML Syntax: NOT allowed
About

This blog is talked about OpenSolaris Community Activity and Bencmarking Test, which are my job.

Search

Archives
« July 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  
       
Today