OTOOL(1)
名前
otool - オブジェクトファイル表示ツール
文法
otool [ option ... ] [ file ... ]
内容
otool コマンドは、オブジェクトファイルやライブラリの特定の部分を表示するんだ。-m オプションが使われてなければ、引数として渡されるファイルは libx.a(foo.o) の形だと思う。完全なライブラリじゃなくて、オブジェクトファイルの情報の要求なんだ。(普通は、この引数はクォートで囲まれているんだ、``libx.a(foo.o)'' っていう感じに。これでシェル経由でできる。)otool は、Mach-O と fat の両方のフォーマットを理解することができるんだ。あと、特定の情報を、生(数字)で表示したり(-v フラグをつけていないときね)、定数とかのマクロ名を使ってシンボリックに表示させたりすることができるんだ(-v か -V フラグが付いているときね)。
次のオプションのうち、少なくとも 1 つは付けないといけないんだ:
-a
アーカイブヘッダを表示するんだ。ファイルがアーカイブのときにね。
-S
__.SYMDEF ファイルの中身を表示するんだ。ファイルがアーカイブのときにね。
-f
fat ヘッダを表示するんだ。
-h
Mach ヘッダを表示するんだ。
-l
load コマンドを表示するんだ。
-L
オブジェクトファイルが使う、共有ライブラリの名前とバージョンを表示するんだ。
-D
共有ライブラリのインストールされた名前だけを表示するんだ。
-s segname sectname
セクション(segname,sectname)の内容を表示するんだ。-v フラグが付いていれば、セクションはタイプで表示されるんだ。タイプが 0 じゃなかったらね(セクションヘッダフラグ)。セクション (__OBJC,__protocol)、(__OBJC,__string_object)、(__OBJC,__runtime_setup) は、-v フラグが付いていたら、シンボリックで表示されるんだ。
-t
(__TEXT,__text) セクションの中身を表示するんだ。-v フラグが付いていたら、テキストを逆アセンブルするんだ。-V フラグが付いてたら、オペランドも逆アセンブルするんだ。
-d
(__DATA,__data) セクションの中身を表示するんだ。
-o
Objective-C ランタイムが使う、__OBJC セグメントの中身を表示するんだ。
-r
リロケーションするエントリを表示するんだ。
-c
コアファイルからの、引数文字列(argv[] と envp[])を表示するんだ。
-I
indirect シンボルテーブルを表示するんだ。
-T
ダイナミックリンクされる共有ライブラリのテーブルの中身を表示するんだ。
-R
ダイナミックリンクされる共有ライブラリのリファレンステーブルを表示するんだ。
-M
ダイナミックリンクされる共有ライブラリのモジュールテーブルを表示するんだ。
-H
two-level 名前空間のヒントテーブルを表示するんだ。
次のオプションは、他のオプションといっしょに指定することができるぜ。
-p name
-t と -v か -V といっしょに使って、シンボル名からの逆アセンブルをスタートさせて、(__TEXT,__text) セクションの最後まで続けることができるんだ。
-v
できるかぎりメッセージを表示するぜ。
-V
逆アセンブルされたオペランドをシンボリックに表示するぜ(-v オプションを含むんだ)。こいつは -t といっしょに使うと便利だぜ。
-X
セクションの中身を表示するときに、リーディングアドレスを表示しないようにするんだ。
-arch arch_type
ファイルが fat のときに、arch_type でアーキテクチャを指定するんだ。(arch(3) を見ると、現在使える arch_type が書いてあるよ。)ファイルにあるすべてのアーキテクチャを指定するには、all を arch_type に使えるんだ。デフォルトでは、もしあれば、ホストのアーキテクチャだけを表示するんだ。もしなかったら、すべてのアーキテクシャを表示するんだ。
-m
オブジェクトファイル名が、archive(member) っていう文法じゃないときに指定するんだ。こいつを使えば、ファイル名に括弧を含ませることができるぜ。
使用例
Mail.app が使用しているフレームワークを表示させてみよう。-L オプションを使うんだ。
mkino% cd /Applications/Mail.app/Contents/MacOS
mkino% otool -L Mail
Mail:
/System/Library/Frameworks/Message.framework/Versions/B/Message (compatibility version 1.0.0, current version 551.0.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 663.6.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 462.0.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 14.0.0)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 18.0.0)
/System/Library/PrivateFrameworks/HTMLDisplay.framework/Versions/A/HTMLDisplay (compatibility version 1.0.0, current version 129.0.0)
/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 122.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 263.2.0)
/System/Library/PrivateFrameworks/SearchKit.framework/Versions/A/SearchKit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AddressBook.framework/Versions/A/AddressBook (compatibility version 1.0.0, current version 216.0.0)
/System/Library/PrivateFrameworks/InstantMessage.framework/Versions/A/InstantMessage (compatibility version 1.0.0, current version 60.7.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 218.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 61.0.0)
という感じで、ダイナミックリンクされるフレームワークと共有ライブラリを知ることができるんだ。
|