opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

dtraceでotoolが呼んでいるシステムコールを調べてみた

DTraceが面白いということでやってみた。
これは覚えたいなぁ....

じゃあ早速、今日はDTraceでotoolが呼んでいるシステムコールを調べてみたよ.

$ sudo dtrace -n syscall:::entry'/execname == "otool" /{ @syscalls[probefunc] = count(); }'

まずは上のようにコマンドを打ち込んでおく。 その後tmuxなり別のタブなり開いて適当にotoolを実行してみる。

$ otool -L /usr/local/bin/git
/usr/local/bin/git:
        /usr/local/lib/libpcre.0.dylib (compatibility version 1.0.0, current version 1.1.0)
        /opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
        /opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
        /usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 44.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

で、このあとdtraceコマンドを打ち込んだタブに戻りCtrl-C押してdtaceを終了すると...

[19:19:57 opamp] ;-) sudo dtrace -n syscall:::entry'/execname == "otool" /{ @syscalls[probefunc] = count(); }' 
dtrace: description 'syscall:::entry' matched 439 probes
^C

  __mac_syscall                                                     1
  __sysctl                                                          1
  audit_session_self                                                1
  bsdthread_register                                                1
  exit                                                              1
  getaudit_addr                                                     1
  getegid                                                           1
  geteuid                                                           1
  getpid                                                            1
  getrlimit                                                         1
  issetugid                                                         1
  shared_region_check_np                                            1
  thread_selfid                                                     1
  close                                                             2
  csops                                                             2
  fstat64                                                           2
  ioctl                                                             2
  open                                                              2
  munmap                                                            4
  write_nocancel                                                    6
  mmap                                                              7
  mprotect                                                          8
  stat64                                                           28

という情報が得られる。

この一覧が呼ばれているシステムコールになっているようだ。多分。


うむーこれを見ればotoolが使ってるFrameworkがわかるかと思ったんだがな... それがわかればあとはこっちからプログラムでそいつを呼び出してバイナリの依存関係を調べて前の日記で書いた自動でdylibの関係を解決してappにFrameworkを組み込むツールをつくろうと思ったんだが....

とりあえずもう少し調べてみる。

Firefox ブラウザ無料ダウンロード