ktrace で FreeBSD 上のプロセスを調べる ― 2014年12月09日 16時02分51秒
以下は、FreeBSD RELEASE 10.1 を用いたときの出力の一部。echo のみの ktrace でも 148 行にもおよび、様々なファイルやライブラリがプロセス起動のために読み込まれるのが分かる。
まずは、単純に「echo」のみを ktrace を用いて実行。
% ktrace echo
% kdump | less
1514 ktrace RET ktrace 0
1514 ktrace CALL execve(0xbfbfe3c0,0xbfbfe8dc,0xbfbfe8e4)
1514 ktrace NAMI "/sbin/echo"
1514 ktrace RET execve -1 errno 2 No such file or directory
1514 ktrace CALL execve(0xbfbfe3c0,0xbfbfe8dc,0xbfbfe8e4)
1514 ktrace NAMI "/bin/echo"
1514 ktrace NAMI "/libexec/ld-elf.so.1"
1514 echo RET execve 0
1514 echo CALL mmap(0,0x8000,0x3,0x1002,0xffffffff,0,0)
1514 echo RET mmap 671481856/0x28060000
プロセス番号の 1524 が ktrace として始まり、そこから echo コマンドを探しているのが分かる。/bin/echo を見付けて、execve で新しいプログラムの実行を開始。
新しいプログラムの実行が始まっても、まだ道のりは長い。ライブラリの読み込みが始まる。
1514 echo RET mmap 671481856/0x28060000
1514 echo CALL issetugid
1514 echo RET issetugid 0
1514 echo CALL lstat(0x28065000,0xbfbfd238)
1514 echo NAMI "/etc"
1514 echo STRU struct stat {dev=99, ino=22, mode=040755, nlink=...
1514 echo RET lstat 0
1514 echo CALL lstat(0x28065000,0xbfbfd238)
1514 echo NAMI "/etc/libmap.conf"
1514 echo STRU struct stat {dev=99, ino=908, mode=0100644, nlink=...
1514 echo RET lstat 0
1514 echo CALL open(0x28065000,0x100000,0xbfbfdef4)
1514 echo NAMI "/etc/libmap.conf"
1514 echo RET open 3
1514 echo CALL fstat(0x3,0xbfbfded8)
echo の本体は更に進んだ後のこれ。
1514 echo CALL writev(0x1,0x28803050,0x1)
1514 echo GIO fd 1 wrote 1 byte
"
"
1514 echo RET writev 1
writev でファイルディスクリプタの 1 に一バイト書き出している。
最近のコメント