web-dev-qa-db-ja.com

Mac OS X用のreadelfのようなツール?

このreadelf出力に類似した再配置テーブルとシンボルオフセットに関する情報を出力するMac OS Xバイナリを読み取るためのツールはありますか?

readelf -r app

Relocation section '.rel.dyn' at offset 0x5ec contains 2 entries:
 Offset     Info    Type            Sym.Value  Sym. Name
08049d58  00001706 R_386_GLOB_DAT    00000000   __gmon_start__
08049d60  00000305 R_386_COPY        08049d60   _ZSt4cout

Relocation section '.rel.plt' at offset 0x5fc contains 13 entries:
 Offset     Info    Type            Sym.Value  Sym. Name
08049d24  00000107 R_386_JUMP_SLOT   0804868c   print
08049d28  00000207 R_386_JUMP_SLOT   0804869c   _ZNSt8ios_base4InitC1E
08049d2c  00000507 R_386_JUMP_SLOT   080486ac   _ZStlsISt11char_traits
08049d30  00000607 R_386_JUMP_SLOT   080486bc   _ZNSolsEPFRSoS_E
08049d34  00000707 R_386_JUMP_SLOT   08048664   _init
08049d38  00000807 R_386_JUMP_SLOT   080486dc   sleep
08049d3c  00000907 R_386_JUMP_SLOT   080486ec   _ZNKSsixEj
08049d40  00000b07 R_386_JUMP_SLOT   080486fc   _ZNKSs4sizeEv
08049d44  00000c07 R_386_JUMP_SLOT   0804870c   __libc_start_main
08049d48  00000d07 R_386_JUMP_SLOT   08048ae4   _fini
08049d4c  00001307 R_386_JUMP_SLOT   0804872c   _ZSt4endlIcSt11char_tr
08049d50  00001507 R_386_JUMP_SLOT   0804873c   __gxx_personality_v0
08049d54  00001607 R_386_JUMP_SLOT   0804874c   _ZNSt8ios_base4InitD1E

この例では、printは実行時に共有ライブラリ(私が書いた)からロードされた関数です。 readelfは、appバイナリ内の場所に関する情報を表示できます。

49
karlphillip

Macports を使用:

  1. macportsのインストール
  2. Macportsを使用するport install binutils
  3. gobjdump -p /path/to/app

Homebrew を使用:

  1. Homebrewのインストール
  2. 行う brew update && brew install binutils
  3. gobjdump -p /path/to/app

もちろん、他にも多くのコマンドラインオプションがあります。 binutilsポートは、インストールすると他のポートのビルドに失敗する可能性があることに注意してください。ポートのインストール/何か/ポートのアンインストールを見て回ることは、まだ便利です。

これを行うためのネイティブツールがまだないことは、驚くべきことです。

81
cbehanna

otool -l test.o

18
ergosys

dwarfdump を試してみてください。

⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣

6
Peter Hosey
Ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install binutils
greadelf filepath
  1. homebrewをインストールします。
  2. homebrewを使用してbinutilsをインストールする
  3. binutilsのreadelfはgreadelfと呼ばれます。
6
Jichao

ObjConvを試しましたか? http://agner.org/optimize/#objconv

このユーティリティは、32ビットおよび64ビットのすべてのx86プラットフォームのCOFF/PE、OMF、ELF、およびMach-O(Mac OSで使用)形式間のオブジェクトファイルの変換に使用できます。オブジェクトファイル内のシンボル名を変更できます。プラットフォーム間で関数ライブラリを構築、変更、変換できます。オブジェクトファイルと実行可能ファイルをダンプできます。 SSE4、AVX、FMA、およびXOP命令セットをサポートする非常に優れた逆アセンブラも含まれています。

追伸:ソースコードが含まれています(GPL)。

5
carlfilips